From 69cd742566d37273086d028546cf1a087bd0469c Mon Sep 17 00:00:00 2001 From: Tom Schindl Date: Fri, 19 Apr 2013 16:51:00 +0200 Subject: initial check in --- .gitignore | 1 + bundles/runtime/.gitignore | 1 + demos/org.eclipse.fx.demo.contacts.app/.classpath | 7 + demos/org.eclipse.fx.demo.contacts.app/.gitignore | 2 + demos/org.eclipse.fx.demo.contacts.app/.project | 39 +++ .../.settings/org.eclipse.core.resources.prefs | 6 + .../.settings/org.eclipse.jdt.core.prefs | 7 + .../Application.e4xmi | 78 ++++++ .../org.eclipse.fx.demo.contacts.app/IP_TODOS.txt | 24 ++ .../META-INF/MANIFEST.MF | 71 ++++++ .../OSGI-INF/component.xml | 7 + .../build.properties | 17 ++ .../contacts.product | 103 ++++++++ .../org.eclipse.fx.demo.contacts.app/css/blue.css | 104 ++++++++ .../org.eclipse.fx.demo.contacts.app/css/blue.png | Bin 0 -> 387 bytes .../css/bright.css | 85 +++++++ .../css/bright.png | Bin 0 -> 389 bytes .../org.eclipse.fx.demo.contacts.app/css/dark.css | 132 +++++++++++ .../org.eclipse.fx.demo.contacts.app/css/dark.png | Bin 0 -> 477 bytes .../icons/silk/arrow_redo.png | Bin 0 -> 625 bytes .../icons/silk/arrow_undo.png | Bin 0 -> 631 bytes .../icons/silk/bright.png | Bin 0 -> 389 bytes .../icons/silk/cross.png | Bin 0 -> 655 bytes .../icons/silk/cut.png | Bin 0 -> 648 bytes .../icons/silk/dark.png | Bin 0 -> 477 bytes .../icons/silk/disk.png | Bin 0 -> 620 bytes .../icons/silk/door_in.png | Bin 0 -> 693 bytes .../icons/silk/folder.png | Bin 0 -> 537 bytes .../icons/silk/folder_add.png | Bin 0 -> 668 bytes .../icons/silk/folder_user.png | Bin 0 -> 730 bytes .../icons/silk/page_copy.png | Bin 0 -> 663 bytes .../icons/silk/page_paste.png | Bin 0 -> 703 bytes .../icons/silk/readme.txt | 22 ++ .../icons/silk/report_user.png | Bin 0 -> 785 bytes .../icons/silk/user_add.png | Bin 0 -> 746 bytes .../icons/silk/user_delete.png | Bin 0 -> 767 bytes .../images/dummy.png | Bin 0 -> 3883 bytes .../plugin.properties | 29 +++ demos/org.eclipse.fx.demo.contacts.app/plugin.xml | 77 ++++++ .../plugin_customization.ini | 2 + .../plugin_ru.properties | 22 ++ demos/org.eclipse.fx.demo.contacts.app/splash.bmp | Bin 0 -> 397386 bytes .../fx/demo/contacts/BundleActivatorImpl.java | 75 ++++++ .../fx/demo/contacts/DecorationController.java | 77 ++++++ .../demo/contacts/handlers/AddContactHandler.java | 40 ++++ .../fx/demo/contacts/handlers/AddGroupHandler.java | 41 ++++ .../fx/demo/contacts/handlers/CopyHandler.java | 51 ++++ .../fx/demo/contacts/handlers/CutHandler.java | 50 ++++ .../contacts/handlers/DeleteContactHandler.java | 51 ++++ .../fx/demo/contacts/handlers/ExitHandler.java | 25 ++ .../fx/demo/contacts/handlers/PasteHandler.java | 66 ++++++ .../fx/demo/contacts/handlers/RedoHandler.java | 39 +++ .../demo/contacts/handlers/SwitchThemeHandler.java | 29 +++ .../fx/demo/contacts/handlers/UndoHandler.java | 41 ++++ .../fx/demo/contacts/model/ContactsManager.java | 25 ++ .../demo/contacts/model/ContactsManagerImpl.java | 55 +++++ .../demo/contacts/model/VCardContactsResource.java | 263 +++++++++++++++++++++ .../processors/AbstractThemeProcessor.java | 119 ++++++++++ .../contacts/processors/MenuThemeProcessor.java | 73 ++++++ .../contacts/processors/ToolbarThemeProcessor.java | 71 ++++++ .../fx/demo/contacts/views/ContactsListView.java | 86 +++++++ .../fx/demo/contacts/views/ContactsTableView.java | 104 ++++++++ .../fx/demo/contacts/views/ContactsTreeView.java | 102 ++++++++ .../demo/contacts/views/ContextMenuProvider.java | 156 ++++++++++++ .../demo/contacts/views/CustomFeedbackHandler.java | 34 +++ .../fx/demo/contacts/views/DetailsView.java | 61 +++++ .../demo/contacts/views/DetailsViewController.java | 150 ++++++++++++ .../eclipse/fx/demo/contacts/views/details.fxml | 91 +++++++ .../org/eclipse/fx/demo/contacts/views/dummy.png | Bin 0 -> 3883 bytes .../vcards/Angelo ZERR.vcf | 61 +++++ .../vcards/Boris Bokowski.vcf | 61 +++++ .../vcards/Chris Aniszczyk.vcf | 66 ++++++ .../vcards/Hallvard Traetteberg.vcf | 64 +++++ .../vcards/Kai Toedter.vcf | 16 ++ .../vcards/Kevin McGuire.vcf | 58 +++++ .../vcards/Lars Vogel.vcf | 16 ++ .../vcards/Peter Friese.vcf | 61 +++++ .../vcards/Tom Schindl.vcf | 55 +++++ .../vcards/Torsten Sommer.vcf | 18 ++ .../vcards/Yves YANG.vcf | 68 ++++++ 80 files changed, 3355 insertions(+) create mode 100644 .gitignore create mode 100644 bundles/runtime/.gitignore create mode 100755 demos/org.eclipse.fx.demo.contacts.app/.classpath create mode 100755 demos/org.eclipse.fx.demo.contacts.app/.gitignore create mode 100755 demos/org.eclipse.fx.demo.contacts.app/.project create mode 100644 demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.core.resources.prefs create mode 100644 demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.jdt.core.prefs create mode 100755 demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi create mode 100755 demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt create mode 100755 demos/org.eclipse.fx.demo.contacts.app/META-INF/MANIFEST.MF create mode 100755 demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml create mode 100755 demos/org.eclipse.fx.demo.contacts.app/build.properties create mode 100755 demos/org.eclipse.fx.demo.contacts.app/contacts.product create mode 100755 demos/org.eclipse.fx.demo.contacts.app/css/blue.css create mode 100755 demos/org.eclipse.fx.demo.contacts.app/css/blue.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/css/bright.css create mode 100755 demos/org.eclipse.fx.demo.contacts.app/css/bright.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/css/dark.css create mode 100755 demos/org.eclipse.fx.demo.contacts.app/css/dark.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_redo.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_undo.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/bright.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/cross.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/cut.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/dark.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/disk.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/door_in.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_add.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_copy.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_paste.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/readme.txt create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/report_user.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_add.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_delete.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/images/dummy.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/plugin.properties create mode 100755 demos/org.eclipse.fx.demo.contacts.app/plugin.xml create mode 100755 demos/org.eclipse.fx.demo.contacts.app/plugin_customization.ini create mode 100755 demos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties create mode 100755 demos/org.eclipse.fx.demo.contacts.app/splash.bmp create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/BundleActivatorImpl.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CopyHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CutHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/DeleteContactHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/ExitHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/PasteHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/RedoHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/SwitchThemeHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/UndoHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManager.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/AbstractThemeProcessor.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/MenuThemeProcessor.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/ToolbarThemeProcessor.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContextMenuProvider.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/CustomFeedbackHandler.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsView.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsViewController.java create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/details.fxml create mode 100755 demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/dummy.png create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf create mode 100755 demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..9d89fa03f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/org.eclipse.osgi diff --git a/bundles/runtime/.gitignore b/bundles/runtime/.gitignore new file mode 100644 index 000000000..9d89fa03f --- /dev/null +++ b/bundles/runtime/.gitignore @@ -0,0 +1 @@ +/org.eclipse.osgi diff --git a/demos/org.eclipse.fx.demo.contacts.app/.classpath b/demos/org.eclipse.fx.demo.contacts.app/.classpath new file mode 100755 index 000000000..098194ca4 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/.gitignore b/demos/org.eclipse.fx.demo.contacts.app/.gitignore new file mode 100755 index 000000000..4dc009173 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/.gitignore @@ -0,0 +1,2 @@ +/target +/bin diff --git a/demos/org.eclipse.fx.demo.contacts.app/.project b/demos/org.eclipse.fx.demo.contacts.app/.project new file mode 100755 index 000000000..ef0866633 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/.project @@ -0,0 +1,39 @@ + + + org.eclipse.fx.demo.contacts.app + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.pde.ds.core.builder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.core.resources.prefs b/demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..02db9ba99 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java=UTF-8 +encoding//src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java=UTF-8 +encoding//src/org/eclipse/fx/demo/contacts/handlers/PasteHandler.java=UTF-8 +encoding//src/org/eclipse/fx/demo/contacts/handlers/SwitchThemeHandler.java=UTF-8 +encoding//src/org/eclipse/fx/demo/contacts/processors/AbstractThemeProcessor.java=UTF-8 diff --git a/demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.jdt.core.prefs b/demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..f42de363a --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi b/demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi new file mode 100755 index 000000000..3c136dd70 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi @@ -0,0 +1,78 @@ + + + + no-decoration#topdecoration.fxml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt b/demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt new file mode 100755 index 000000000..1400c0596 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt @@ -0,0 +1,24 @@ +e4 icons: +--------- +css/blue.png +css/bright.png +css/dark.png + +FAM-FAM-FAM (Creative Commons Attribution 2.5 License): +------------------------------------------------------- +icons/slik/arrow_redo.png +icons/slik/arrow_undo.png +icons/slik/bright.png +icons/slik/cross.png +icons/slik/cut.png +icons/slik/dark.png +icons/slik/disk.png +icons/slik/door_in.png +icons/slik/folder_add.png +icons/slik/folder_user.png +icons/slik/folder.png +icons/slik/page_copy.png +icons/slik/page_paste.png +icons/slik/report_user.png +icons/slik/user_add.png +icons/slik/user_delete.png \ No newline at end of file diff --git a/demos/org.eclipse.fx.demo.contacts.app/META-INF/MANIFEST.MF b/demos/org.eclipse.fx.demo.contacts.app/META-INF/MANIFEST.MF new file mode 100755 index 000000000..6eaf39f84 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/META-INF/MANIFEST.MF @@ -0,0 +1,71 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Contacts Plug-in (Incubation) +Bundle-SymbolicName: org.eclipse.fx.demo.contacts.app;singleton:=true +Bundle-Version: 0.9.1.qualifier +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.fx.ui.application, + org.eclipse.fx.ui.workbench.fx, + javax.inject;bundle-version="1.0.0", + org.eclipse.e4.ui.model.workbench;bundle-version="0.9.1", + org.eclipse.e4.core.services;bundle-version="0.9.1", + org.eclipse.e4.core.di;bundle-version="0.9.0", + org.eclipse.e4.core.di.extensions;bundle-version="0.9.0", + org.eclipse.fx.ui.di, + org.eclipse.e4.core.contexts;bundle-version="0.9.0", + org.eclipse.fx.ui.databinding;bundle-version="0.8.1", + org.eclipse.core.databinding;bundle-version="1.4.0", + org.eclipse.core.databinding.beans;bundle-version="1.2.100", + org.eclipse.core.databinding.observable;bundle-version="1.4.0", + org.eclipse.core.databinding.property;bundle-version="1.4.0", + org.eclipse.e4.ui.services;bundle-version="0.9.0", + org.eclipse.e4.ui.workbench;bundle-version="0.9.1", + org.eclipse.core.commands;bundle-version="3.6.0", + org.eclipse.e4.core.commands;bundle-version="0.9.0", + org.eclipse.fx.ui.services;bundle-version="0.8.1", + org.eclipse.fx.demo.contacts;bundle-version="1.0.0", + org.eclipse.fx.demo.contacts.edit;bundle-version="1.0.0", + org.eclipse.fx.emf.databinding;bundle-version="0.8.1", + org.eclipse.fx.emf.edit.ui;bundle-version="0.8.1" +Import-Package: javafx.animation;version="2.0.0", + javafx.application;version="2.0.0", + javafx.beans;version="2.0.0", + javafx.beans.binding;version="2.0.0", + javafx.beans.property;version="2.0.0", + javafx.beans.value;version="2.0.0", + javafx.collections;version="2.0.0", + javafx.concurrent;version="2.0.0", + javafx.embed.swing;version="2.0.0", + javafx.event;version="2.0.0", + javafx.fxml;version="2.0.0", + javafx.geometry;version="2.0.0", + javafx.scene;version="2.0.0", + javafx.scene.chart;version="2.0.0", + javafx.scene.control;version="2.0.0", + javafx.scene.control.cell;version="2.0.0", + javafx.scene.effect;version="2.0.0", + javafx.scene.image;version="2.0.0", + javafx.scene.input;version="2.0.0", + javafx.scene.layout;version="2.0.0", + javafx.scene.media;version="2.0.0", + javafx.scene.paint;version="2.0.0", + javafx.scene.shape;version="2.0.0", + javafx.scene.text;version="2.0.0", + javafx.scene.transform;version="2.0.0", + javafx.scene.web;version="2.0.0", + javafx.stage;version="2.0.0", + javafx.util;version="2.0.0", + javax.annotation;version="1.0.0" +Bundle-ActivationPolicy: lazy +Bundle-Vendor: Eclipse.org +Bundle-Activator: org.eclipse.fx.demo.contacts.BundleActivatorImpl +Bundle-Localization: plugin +Service-Component: OSGI-INF/component.xml +Export-Package: org.eclipse.fx.demo.contacts, + org.eclipse.fx.demo.contacts.handlers, + org.eclipse.fx.demo.contacts.model, + org.eclipse.fx.demo.contacts.processors, + org.eclipse.fx.demo.contacts.views + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml b/demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml new file mode 100755 index 000000000..2a2b32aa3 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/build.properties b/demos/org.eclipse.fx.demo.contacts.app/build.properties new file mode 100755 index 000000000..6827a4f3e --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/build.properties @@ -0,0 +1,17 @@ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + images/,\ + icons/,\ + images/,\ + Application.e4xmi,\ + css/,\ + splash.bmp,\ + plugin_customization.ini,\ + vcards/,\ + plugin_ru.properties,\ + plugin.properties,\ + OSGI-INF/component.xml,\ + OSGI-INF/component.xml +source.. = src/ diff --git a/demos/org.eclipse.fx.demo.contacts.app/contacts.product b/demos/org.eclipse.fx.demo.contacts.app/contacts.product new file mode 100755 index 000000000..5b3be890c --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/contacts.product @@ -0,0 +1,103 @@ + + + + + + + + + + -Dosgi.framework.extensions=org.eclipse.fx.osgi + -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/css/blue.css b/demos/org.eclipse.fx.demo.contacts.app/css/blue.css new file mode 100755 index 000000000..ced94cc3c --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/css/blue.css @@ -0,0 +1,104 @@ +.root { + -fx-base: #7eaacc; + -fx-background: #7eaacc; + -fx-control-inner-background: white; +} + +.tab { + -fx-background-color: linear-gradient(to top, -fx-base, derive(-fx-base,30%)); +} + +.button { + -fx-background-color: transparent; + -fx-padding: 4; +} + +.button:hover { + -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; + -fx-color: -fx-hover-base; +} + +.tool-bar:horizontal .separator { + -fx-orientation: vertical; + -fx-padding: 2 0 2 0; +} + +.table-view { + -fx-table-cell-border-color:derive(-fx-base,+10%); + -fx-table-header-border-color:derive(-fx-base,+20%); +} + +.split-pane:horizontal > * > .split-pane-divider { + -fx-border-color: transparent -fx-base transparent -fx-base; + -fx-background-color: transparent, derive(-fx-base,20%); + -fx-background-insets: 0, 0 1 0 1; +} + +.menu-bar { + -fx-background-color: linear-gradient(to bottom, #7eaacc, derive(#7eaacc,+50%)); + } + +.menu-bar .menu .label { + -fx-padding: 0.333em 0.5em 0.333em 0.5em; /* 4 6 4 6*/ + -fx-text-fill: black; +} + +.my-gridpane { + -fx-background-color: radial-gradient(radius 100%, derive(-fx-base,70%), derive(-fx-base,20%)); +} + +.separator-label { + -fx-text-fill: derive(-fx-base,-50%) ; +} + +#window-resize-button { + -fx-background-image: url("images/window-corner.png"); + -fx-background-position: right 1px bottom 1px; + -fx-background-repeat: no-repeat; +} + +#window_close { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-close.png"); + -fx-padding: 6 6 4 6; +} + +#window_min { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-min.png"); + -fx-padding: 6 6 4 6; +} + +#window_max { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-expand.png"); + -fx-padding: 6 6 4 6; +} + +#window_close:hover { + -fx-background-image: url("images/window-close-over.png"); +} + +#window_min:hover { + -fx-background-image: url("images/window-min-over.png"); +} + +#window_max:hover { + -fx-background-image: url("images/window-expand-over.png"); +} + +.MTrimBar { + -fx-background-color: + linear-gradient(to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)), + linear-gradient(to bottom, derive(-fx-base,65%) 2%, derive(-fx-base,-20%) 95%); +} + +.MTrimBar .tool-bar { + -fx-border-style: solid; + -fx-background-color: null; + -fx-border-color: null; + -fx-border-width: 0px; +} \ No newline at end of file diff --git a/demos/org.eclipse.fx.demo.contacts.app/css/blue.png b/demos/org.eclipse.fx.demo.contacts.app/css/blue.png new file mode 100755 index 000000000..aac83ea0f Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/css/blue.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/css/bright.css b/demos/org.eclipse.fx.demo.contacts.app/css/bright.css new file mode 100755 index 000000000..1beae7fc3 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/css/bright.css @@ -0,0 +1,85 @@ +.root { + -fx-base: #d0d0d0; + -fx-background: #f4f4f4; + -fx-control-inner-background: white; +} + +.menu-bar { + -fx-background-color: linear-gradient(to bottom, #d0d0d0, derive(#d0d0d0,+50%)); + -fx-text-fill: black; +} + +.menu-bar .menu .label { + -fx-padding: 0.333em 0.5em 0.333em 0.5em; /* 4 6 4 6*/ + -fx-text-fill: black; +} + +.my-gridpane { + -fx-background-color: radial-gradient(radius 100%, derive(-fx-base,70%), derive(-fx-base,20%)); +} + +.separator-label { + -fx-text-fill: steelblue ; +} + +.button { + -fx-background-color: transparent; + -fx-padding: 4; +} + +.button:hover { + -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; + -fx-color: -fx-hover-base; +} + +#window-resize-button { + -fx-background-image: url("images/window-corner.png"); + -fx-background-position: right 1px bottom 1px; + -fx-background-repeat: no-repeat; +} + +#window_close { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-close.png"); + -fx-padding: 6 6 4 6; +} + +#window_min { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-min.png"); + -fx-padding: 6 6 4 6; +} + +#window_max { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-expand.png"); + -fx-padding: 6 6 4 6; +} + +#window_close:hover { + -fx-background-image: url("images/window-close-over.png"); +} + +#window_min:hover { + -fx-background-image: url("images/window-min-over.png"); +} + +#window_max:hover { + -fx-background-image: url("images/window-expand-over.png"); +} + +.MTrimBar { + -fx-background-color: + linear-gradient(to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)), + linear-gradient(to bottom, derive(-fx-base,65%) 2%, derive(-fx-base,-20%) 95%); +} + +.MTrimBar .tool-bar { + -fx-border-style: solid; + -fx-background-color: null; + -fx-border-color: null; + -fx-border-width: 0px; +} \ No newline at end of file diff --git a/demos/org.eclipse.fx.demo.contacts.app/css/bright.png b/demos/org.eclipse.fx.demo.contacts.app/css/bright.png new file mode 100755 index 000000000..ed1021257 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/css/bright.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/css/dark.css b/demos/org.eclipse.fx.demo.contacts.app/css/dark.css new file mode 100755 index 000000000..6c2b79326 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/css/dark.css @@ -0,0 +1,132 @@ +.root { + -fx-base: rgb(50, 50, 50); + -fx-background: rgb(50, 50, 50); + -fx-control-inner-background: rgb(50, 50, 50); +} + +.tab { + -fx-background-color: linear-gradient(to top, -fx-base, derive(-fx-base,30%)); +} + +.menu-bar { + -fx-background-color: linear-gradient(to bottom, -fx-base, derive(-fx-base,30%)); +} + +.MTrimBar { + -fx-background-color: + linear-gradient(to bottom, derive(-fx-base,+50%),derive(-fx-base,-40%), derive(-fx-base,-20%)); +} + +.tool-bar:horizontal { + -fx-background-color: + linear-gradient(to bottom, derive(-fx-base,+50%), derive(-fx-base,-40%), derive(-fx-base,-20%)); +} + +.tool-bar:vertical { + -fx-background-color: linear-gradient(to bottom, derive(-fx-base,-50%), derive(-fx-base,-40%), derive(-fx-base,-20%)); +} + +.tool-bar .separator:vertical .line { + -fx-border-style: solid; + -fx-background-color: null; + -fx-border-color: transparent transparent derive(-fx-base,-35%) derive(-fx-base,+15%); +} + +.tool-bar .separator:horizontal .line { + -fx-border-style: solid; + -fx-background-color: null; + -fx-border-color: transparent transparent derive(-fx-base,+15%) transparent; +} + +.tooltip { + -fx-background-color:-fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; +} + +.button { + -fx-background-color: transparent; + -fx-padding: 4; +} + +.button:hover { + -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; + -fx-color: -fx-hover-base; +} + +.table-view { + -fx-table-cell-border-color:derive(-fx-base,+10%); + -fx-table-header-border-color:derive(-fx-base,+20%); +} + +/* When the TableView is _not_ focused, we show alternate selection colors */ +.table-row-cell:filled:selected:focused, .table-row-cell:filled:selected { + -fx-background-color: derive(-fx-base,+60%); +} + + .table-row-cell:filled:hover { + -fx-background-color: derive(-fx-base,+40%); +} + +.split-pane:horizontal > * > .split-pane-divider { + -fx-border-color: transparent -fx-base transparent -fx-base; + -fx-background-color: transparent, derive(-fx-base,20%); + -fx-background-insets: 0, 0 1 0 1; +} + +.my-gridpane { + -fx-background-color: radial-gradient(radius 100%, derive(-fx-base,20%), derive(-fx-base,-20%)); +} + +.separator-label { + -fx-text-fill: orange; +} + +#decorationArea { + -fx-padding: 10px; + -fx-background-color: derive(-fx-base,+10%); + /* + -fx-background-image: url("images/top-bar.png"); + -fx-background-size: cover, contain; + -fx-background-position: left top, center center; + -fx-background-repeat: no-repeat; + */ +} + +#window-resize-button { + -fx-background-image: url("images/window-corner.png"); + -fx-background-position: right 1px bottom 1px; + -fx-background-repeat: no-repeat; +} + +#window_close { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-close.png"); + -fx-padding: 6 6 4 6; +} + +#window_min { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-min.png"); + -fx-padding: 6 6 4 6; +} + +#window_max { + -fx-font-size: 1px; + -fx-background-color: null; + -fx-background-image: url("images/window-expand.png"); + -fx-padding: 6 6 4 6; +} + +#window_close:hover { + -fx-background-image: url("images/window-close-over.png"); +} + +#window_min:hover { + -fx-background-image: url("images/window-min-over.png"); +} + +#window_max:hover { + -fx-background-image: url("images/window-expand-over.png"); +} + diff --git a/demos/org.eclipse.fx.demo.contacts.app/css/dark.png b/demos/org.eclipse.fx.demo.contacts.app/css/dark.png new file mode 100755 index 000000000..cc5f8c08f Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/css/dark.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_redo.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_redo.png new file mode 100755 index 000000000..fdc394c7c Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_redo.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_undo.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_undo.png new file mode 100755 index 000000000..6972c5e59 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/arrow_undo.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/bright.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/bright.png new file mode 100755 index 000000000..ed1021257 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/bright.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/cross.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/cross.png new file mode 100755 index 000000000..1514d51a3 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/cross.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/cut.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/cut.png new file mode 100755 index 000000000..f215d6f6b Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/cut.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/dark.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/dark.png new file mode 100755 index 000000000..cc5f8c08f Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/dark.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/disk.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/disk.png new file mode 100755 index 000000000..99d532e8b Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/disk.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/door_in.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/door_in.png new file mode 100755 index 000000000..41676a0a5 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/door_in.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder.png new file mode 100755 index 000000000..784e8fa48 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_add.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_add.png new file mode 100755 index 000000000..529fe8fe0 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_add.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png new file mode 100755 index 000000000..f021c3e12 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_copy.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_copy.png new file mode 100755 index 000000000..195dc6d6c Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_copy.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_paste.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_paste.png new file mode 100755 index 000000000..968f073fd Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/page_paste.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/readme.txt b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/readme.txt new file mode 100755 index 000000000..2cf67dcaf --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/readme.txt @@ -0,0 +1,22 @@ +Silk icon set 1.3 + +_________________________________________ +Mark James +http://www.famfamfam.com/lab/icons/silk/ +_________________________________________ + +This work is licensed under a +Creative Commons Attribution 2.5 License. +[ http://creativecommons.org/licenses/by/2.5/ ] + +This means you may use it for any purpose, +and make any changes you like. +All I ask is that you include a link back +to this page in your credits. + +Are you using this icon set? Send me an email +(including a link or picture if available) to +mjames@gmail.com + +Any other questions about this icon set please +contact mjames@gmail.com \ No newline at end of file diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/report_user.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/report_user.png new file mode 100755 index 000000000..7766edd74 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/report_user.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_add.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_add.png new file mode 100755 index 000000000..deae99bcf Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_add.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_delete.png b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_delete.png new file mode 100755 index 000000000..acbb5630e Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/icons/silk/user_delete.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/images/dummy.png b/demos/org.eclipse.fx.demo.contacts.app/images/dummy.png new file mode 100755 index 000000000..bb30f82d3 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/images/dummy.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/plugin.properties b/demos/org.eclipse.fx.demo.contacts.app/plugin.properties new file mode 100755 index 000000000..5d021c984 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/plugin.properties @@ -0,0 +1,29 @@ +############################################################################### +# Copyright (c) 2011 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +fileMenu = _File +editMenu = _Edit +switchThemeMenu = _Theme +partDetails = Details +contactsTree = Tree +contactsTable = Table +contactsList = List +menuLabelSave = _Save +menuLabelCut = Cut +menuLabelCopy = Copy +menuLabelPaste = Paste +menuLabelUndo = Undo +menuLabelDelete = _Delete +menuLabelDirectExit = Direct E_xit +menuLabelExit = _Exit +windowTitle = e4 JavaFX Contacts Demo +contactsTooltip = List of Contacts +detailsTooltip = Contact Details +toolbarSaveTooltip = Save diff --git a/demos/org.eclipse.fx.demo.contacts.app/plugin.xml b/demos/org.eclipse.fx.demo.contacts.app/plugin.xml new file mode 100755 index 000000000..a7f112faa --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/plugin.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/plugin_customization.ini b/demos/org.eclipse.fx.demo.contacts.app/plugin_customization.ini new file mode 100755 index 000000000..8a531fc70 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/plugin_customization.ini @@ -0,0 +1,2 @@ +org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true + diff --git a/demos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties b/demos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties new file mode 100755 index 000000000..f572982c7 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties @@ -0,0 +1,22 @@ +############################################################################### +# Copyright (c) 2011 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +fileMenu = &\u0424\u0430\u0439\u043B +partDetails = \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E +contactsList = \u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B +menuLabelSave = &\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C +menuLabelDelete = &\u0423\u0434\u0430\u043B\u0438\u0442\u044C +menuLabelDirectExit = &\u0411\u044B\u0441\u0442\u0440\u044B\u0439 \u0432\u044B\u0445\u043E\u0434 +menuLabelExit = &\u0412\u044B\u0445\u043E\u0434 +windowTitle = e4 \u0417\u0430\u043F\u0438\u0441\u043D\u0430\u044F \u043A\u043D\u0438\u0436\u043A\u0430 +contactsTooltip = \u0421\u043F\u0438\u0441\u043E\u043A \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043E\u0432 +detailsTooltip = \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u0435 +toolbarSaveTooltip = \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C + diff --git a/demos/org.eclipse.fx.demo.contacts.app/splash.bmp b/demos/org.eclipse.fx.demo.contacts.app/splash.bmp new file mode 100755 index 000000000..68ce4201a Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/splash.bmp differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/BundleActivatorImpl.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/BundleActivatorImpl.java new file mode 100755 index 000000000..1aea28d10 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/BundleActivatorImpl.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (c) 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + ******************************************************************************/ +package org.eclipse.fx.demo.contacts; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.osgi.service.datalocation.Location; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Filter; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.util.tracker.ServiceTracker; + +public class BundleActivatorImpl implements BundleActivator { + + private static final String F_META_AREA = ".metadata"; //$NON-NLS-1$ + private static final String F_PLUGIN_DATA = ".plugins"; //$NON-NLS-1$ + + private static BundleActivatorImpl instance; + + private BundleContext context; + + private ServiceTracker locationServiceTracker; + + private IPath stateLocation; + + public void start(BundleContext context) throws Exception { + instance = this; + this.context = context; + } + + public void stop(BundleContext context) throws Exception { + this.context = null; + instance = null; + } + + public IPath getStateLocation() { + try { + if (stateLocation == null) { + Filter filter = context.createFilter(Location.INSTANCE_FILTER); + if (locationServiceTracker == null) { + locationServiceTracker = new ServiceTracker(context, + filter, null); + locationServiceTracker.open(); + } + Location location = (Location) locationServiceTracker + .getService(); + if (location != null) { + IPath path = new Path(location.getURL().getPath()); + stateLocation = path.append(F_META_AREA).append( + F_PLUGIN_DATA).append( + context.getBundle().getSymbolicName()); + stateLocation.toFile().mkdirs(); + } + } + } catch (InvalidSyntaxException e) { + // ignore this. It should never happen as we have tested the above + // format + } + return stateLocation; + } + + public static BundleActivatorImpl getInstance() { + return instance; + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java new file mode 100755 index 000000000..ed3df76e5 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java @@ -0,0 +1,77 @@ +package org.eclipse.fx.demo.contacts; + +import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.geometry.Rectangle2D; +import javafx.scene.control.ToolBar; +import javafx.scene.input.MouseEvent; +import javafx.stage.Screen; +import javafx.stage.Stage; +import javax.annotation.PostConstruct; + +public class DecorationController { + private double mouseDragOffsetX = 0; + private double mouseDragOffsetY = 0; + + @FXML + private ToolBar decorationArea; + + private Rectangle2D backupWindowBounds; + + public DecorationController() { + } + + @PostConstruct + void init() { + decorationArea.setOnMousePressed(new EventHandler() { + public void handle(MouseEvent event) { + mouseDragOffsetX = event.getSceneX(); + mouseDragOffsetY = event.getSceneY(); + } + }); + decorationArea.setOnMouseDragged(new EventHandler() { + public void handle(MouseEvent event) { + Stage w = getStage(); + w.setX(event.getScreenX() - mouseDragOffsetX); + w.setY(event.getScreenY() - mouseDragOffsetY); + } + }); + } + + public void handleClose(ActionEvent event) { + Platform.exit(); + } + + public void handleMin(ActionEvent event) { + getStage().setIconified(true); + } + + public void handleMax(ActionEvent event) { + Stage stage = getStage(); + final double stageY = stage.getY(); + final Screen screen = Screen.getScreensForRectangle(stage.getX(), stageY, 1, 1).get(0); + Rectangle2D bounds = screen.getVisualBounds(); + if (bounds.getMinX() == stage.getX() && bounds.getMinY() == stageY && bounds.getWidth() == stage.getWidth() + && bounds.getHeight() == stage.getHeight()) { + if (backupWindowBounds != null) { + stage.setX(backupWindowBounds.getMinX()); + stage.setY(backupWindowBounds.getMinY()); + stage.setWidth(backupWindowBounds.getWidth()); + stage.setHeight(backupWindowBounds.getHeight()); + } + } else { + backupWindowBounds = new Rectangle2D(stage.getX(), stage.getY(), stage.getWidth(), stage.getHeight()); + final double newStageY = screen.getVisualBounds().getMinY(); + stage.setX(screen.getVisualBounds().getMinX()); + stage.setY(newStageY); + stage.setWidth(screen.getVisualBounds().getWidth()); + stage.setHeight(screen.getVisualBounds().getHeight()); + } + } + + Stage getStage() { + return (Stage) decorationArea.getScene().getWindow(); + } +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java new file mode 100755 index 000000000..1476a8d62 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T��dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + +import javax.inject.Inject; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.edit.command.AddCommand; +import org.eclipse.fx.demo.contacts.Contact; +import org.eclipse.fx.demo.contacts.ContactsFactory; +import org.eclipse.fx.demo.contacts.ContactsPackage; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + + +@SuppressWarnings("restriction") +public class AddContactHandler { + + @Inject + ContactsManager contactsManager; + + @Execute + void execute() { + Contact contact = ContactsFactory.eINSTANCE.createContact(); + Command command = AddCommand.create(contactsManager.getEditingDomain(), contactsManager.getRootGroup(), ContactsPackage.Literals.GROUP__CONTACTS, contact); + if (command != null && command.canExecute()) + contactsManager.getEditingDomain().getCommandStack().execute(command); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java new file mode 100755 index 000000000..7c4cacfbb --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T��dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + +import javax.inject.Inject; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.edit.command.AddCommand; +import org.eclipse.fx.demo.contacts.ContactsFactory; +import org.eclipse.fx.demo.contacts.ContactsPackage; +import org.eclipse.fx.demo.contacts.Group; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + + +@SuppressWarnings("restriction") +public class AddGroupHandler { + + @Inject + ContactsManager contactsManager; + + @Execute + void execute() { + Group group = ContactsFactory.eINSTANCE.createGroup(); + group.setName("New Group"); + Command command = AddCommand.create(contactsManager.getEditingDomain(), contactsManager.getRootGroup(), ContactsPackage.Literals.GROUP__GROUPS, group); + if (command != null && command.canExecute()) + contactsManager.getEditingDomain().getCommandStack().execute(command); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CopyHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CopyHandler.java new file mode 100755 index 000000000..95be09f00 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CopyHandler.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T??dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + +import java.util.List; +import javax.inject.Inject; +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.edit.command.CopyToClipboardCommand; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + +@SuppressWarnings("restriction") +public class CopyHandler { + + ContactsManager contactsManager; + + Command command; + + @Inject + public CopyHandler(ContactsManager contactsManager) { + this.contactsManager = contactsManager; + } + + @CanExecute + public boolean canExecute(@Optional List selection) { + if (selection != null) { + command = CopyToClipboardCommand.create(contactsManager.getEditingDomain(), selection); + return command.canExecute(); + } + return false; + } + + @Execute + public void execute() { + if (command != null && command.canExecute()) + contactsManager.getEditingDomain().getCommandStack().execute(command); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CutHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CutHandler.java new file mode 100755 index 000000000..2068adcdd --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/CutHandler.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T??dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + +import java.util.List; +import javax.inject.Inject; +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.edit.command.CutToClipboardCommand; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + +@SuppressWarnings("restriction") +public class CutHandler { + + ContactsManager contactsManager; + Command command; + + @Inject + public CutHandler(ContactsManager contactsManager) { + this.contactsManager = contactsManager; + } + + @CanExecute + public boolean canExecute(@Optional List selection) { + if (selection != null) { + command = CutToClipboardCommand.create(contactsManager.getEditingDomain(), selection); + return command.canExecute(); + } + return false; + } + + @Execute + public void execute() { + if (command != null && command.canExecute()) + contactsManager.getEditingDomain().getCommandStack().execute(command); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/DeleteContactHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/DeleteContactHandler.java new file mode 100755 index 000000000..5c131b402 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/DeleteContactHandler.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T??dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + +import java.util.List; +import javax.inject.Inject; +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.edit.command.DeleteCommand; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + +@SuppressWarnings("restriction") +public class DeleteContactHandler { + + ContactsManager contactsManager; + Command command; + + @Inject + public DeleteContactHandler(ContactsManager contactsManager) { + this.contactsManager = contactsManager; + } + + + @CanExecute + public boolean canExecute(@Optional List selection) { + if (selection != null) { + command = DeleteCommand.create(contactsManager.getEditingDomain(), selection); + return command.canExecute(); + } + return false; + } + + @Execute + public void execute() { + if (command != null && command.canExecute()) + contactsManager.getEditingDomain().getCommandStack().execute(command); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/ExitHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/ExitHandler.java new file mode 100755 index 000000000..b6c8aa2a0 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/ExitHandler.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2009 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T??dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + +import javafx.application.Platform; +import org.eclipse.e4.core.di.annotations.Execute; + +@SuppressWarnings("restriction") +public class ExitHandler { + @Execute + public void exit() { + // TODO better life cycle support + Platform.exit(); + } +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/PasteHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/PasteHandler.java new file mode 100755 index 000000000..3d4e21c8e --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/PasteHandler.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T��dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + +import javax.inject.Inject; + +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.emf.common.command.Command; +import org.eclipse.emf.edit.command.PasteFromClipboardCommand; +import org.eclipse.fx.demo.contacts.Contact; +import org.eclipse.fx.demo.contacts.ContactsPackage; +import org.eclipse.fx.demo.contacts.Group; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + + +@SuppressWarnings("restriction") +public class PasteHandler { + + ContactsManager contactsManager; + + Command command; + + @Inject + public PasteHandler(ContactsManager contactsManager) { + this.contactsManager = contactsManager; + } + + @CanExecute + public boolean canExecute(@Optional Object selectedItem) { + Group group = null; + + if (selectedItem instanceof Contact) + // get containing Group if selection is a Contact + group = (Group) ((Contact) selectedItem).eContainer(); + + else if (selectedItem instanceof Group) + group = (Group) selectedItem; + + if (group != null) { + command = PasteFromClipboardCommand.create(contactsManager.getEditingDomain(), group, + ContactsPackage.eINSTANCE.getGroup_Contacts()); + return command.canExecute(); + } + + return false; + } + + @Execute + public void execute() { + if (command != null && command.canExecute()) + contactsManager.getEditingDomain().getCommandStack().execute(command); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/RedoHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/RedoHandler.java new file mode 100755 index 000000000..123840f00 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/RedoHandler.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2009 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T??dter - initial implementation + ******************************************************************************/ +package org.eclipse.fx.demo.contacts.handlers; + + +import javax.inject.Inject; +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.emf.common.command.CommandStack; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + +@SuppressWarnings("restriction") +public class RedoHandler { + + @Inject + ContactsManager contactsManager; + + @CanExecute + public boolean canUndo() { + CommandStack commandStack = contactsManager.getEditingDomain().getCommandStack(); + return commandStack.canRedo(); + } + + @Execute + public void undo() { + CommandStack commandStack = contactsManager.getEditingDomain().getCommandStack(); + if (commandStack.canRedo()) + commandStack.redo(); + } +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/SwitchThemeHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/SwitchThemeHandler.java new file mode 100755 index 000000000..7cc4b6a17 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/SwitchThemeHandler.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2010 BestSolution.at and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tom Schindl - initial API and implementation + * Kai T��dter - Adoption to contacts demo + ******************************************************************************/ +package org.eclipse.fx.demo.contacts.handlers; + +import javax.inject.Named; + +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.fx.ui.services.theme.ThemeManager; + +@SuppressWarnings("restriction") +public class SwitchThemeHandler { + @Execute + public void switchTheme(@Named("contacts.commands.switchtheme.themeid") String themeId, + @Optional ThemeManager themeManager) { + if (themeManager != null) { + themeManager.setCurrentThemeId(themeId); + } + } +} \ No newline at end of file diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/UndoHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/UndoHandler.java new file mode 100755 index 000000000..07f1deb52 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/UndoHandler.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2009 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T??dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.handlers; + + +import javax.inject.Inject; +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.emf.common.command.CommandStack; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + +@SuppressWarnings("restriction") +public class UndoHandler { + + @Inject + ContactsManager contactsManager; + + @CanExecute + public boolean canUndo() { + CommandStack commandStack = contactsManager.getEditingDomain().getCommandStack(); + return commandStack.canUndo(); + } + + @Execute + public void undo() { + CommandStack commandStack = contactsManager.getEditingDomain().getCommandStack(); + if (commandStack.canUndo()) + commandStack.undo(); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManager.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManager.java new file mode 100755 index 000000000..377d1491b --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManager.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + ******************************************************************************/ +package org.eclipse.fx.demo.contacts.model; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.fx.demo.contacts.Group; + +public interface ContactsManager { + + Group getRootGroup(); + + AdapterFactory getAdapterFactory(); + + EditingDomain getEditingDomain(); + +} \ No newline at end of file diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java new file mode 100755 index 000000000..425e9be6b --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + ******************************************************************************/ +package org.eclipse.fx.demo.contacts.model; + + +import org.eclipse.emf.common.command.BasicCommandStack; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; +import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; +import org.eclipse.fx.demo.contacts.Group; +import org.eclipse.fx.demo.contacts.provider.ContactsItemProviderAdapterFactory; + +public class ContactsManagerImpl implements ContactsManager { + + protected EditingDomain editingDomain; + protected VCardContactsResource contactsResource; + protected ComposedAdapterFactory adapterFactory; + + public ContactsManagerImpl() { + adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); + adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); + adapterFactory.addAdapterFactory(new ContactsItemProviderAdapterFactory()); + adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); + + contactsResource = new VCardContactsResource(); + BasicCommandStack commandStack = new BasicCommandStack(); + editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack); + editingDomain.getResourceSet().getResources().add(contactsResource); + } + + public AdapterFactory getAdapterFactory() { + return adapterFactory; + } + + public EditingDomain getEditingDomain() { + return editingDomain; + } + + @Override + public Group getRootGroup() { + return (Group) contactsResource.getContents().get(0); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java new file mode 100755 index 000000000..2f729f693 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java @@ -0,0 +1,263 @@ +/******************************************************************************* + * Copyright (c) 2009, 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T????dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.model; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Enumeration; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.impl.ResourceImpl; +import org.eclipse.fx.demo.contacts.BundleActivatorImpl; +import org.eclipse.fx.demo.contacts.Contact; +import org.eclipse.fx.demo.contacts.ContactsFactory; +import org.eclipse.fx.demo.contacts.Group; +import org.osgi.framework.Bundle; + + +public class VCardContactsResource extends ResourceImpl { + + public VCardContactsResource() { + super(URI.createPlatformResourceURI("org.eclipse.fx.demo.contacts/vcards", false)); + + try { + Group rootGroup = ContactsFactory.eINSTANCE.createGroup(); + for (File file : getContacts()) { + Contact contact = readFromVCard(file.getAbsolutePath()); + rootGroup.getContacts().add(contact); + } + getContents().add(rootGroup); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private File[] getContacts() throws Exception { + File[] localContacts = getLocalContacts(); + if (localContacts.length == 0) { + IPath path = BundleActivatorImpl.getInstance().getStateLocation(); + byte[] buffer = new byte[8192]; + Bundle bundle = Platform.getBundle("org.eclipse.fx.demo.contacts.app"); //$NON-NLS-1$ + + for (Enumeration contacts = getStoredContacts(); contacts.hasMoreElements();) { + String bundlePath = (String) contacts.nextElement(); + if (!bundlePath.endsWith(".vcf")) { //$NON-NLS-1$ + continue; + } + + InputStream inputStream = FileLocator.openStream(bundle, new Path(bundlePath), false); + FileOutputStream outputStream = new FileOutputStream(path.append( + bundlePath.substring(bundlePath.indexOf('/') + 1)).toFile()); + + int read = inputStream.read(buffer); + while (read != -1) { + outputStream.write(buffer, 0, read); + read = inputStream.read(buffer); + } + + inputStream.close(); + outputStream.close(); + } + + return getLocalContacts(); + } + return localContacts; + } + + private File[] getLocalContacts() { + IPath path = BundleActivatorImpl.getInstance().getStateLocation(); + File directory = path.toFile(); + return directory.listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(".vcf"); //$NON-NLS-1$ + } + }); + } + + private Enumeration getStoredContacts() throws Exception { + Bundle bundle = Platform.getBundle("org.eclipse.fx.demo.contacts.app"); //$NON-NLS-1$ + return bundle.getEntryPaths("vcards"); //$NON-NLS-1$ + } + + /** + * Reads a Contact from a VCard. This method cannot parse a generic VCard, + * but can only parse VCards created with Microsoft Outlook. The intention + * is not to provide a generic VCard reader but an easy way to get contact + * data (including pictures) in the repository. + * + * @param fileName + * the vcard file + * @return the created Contact + */ + public Contact readFromVCard(String fileName) { + Contact contact = ContactsFactory.eINSTANCE.createContact(); + contact.setSourceFile(fileName); + BufferedReader bufferedReader = null; + String charSet = "Cp1252"; + + /* + * first try to guess the char set (currently not working under some + * JVMs + */ + + /* + * try { bufferedReader = new BufferedReader(new InputStreamReader( new + * FileInputStream(fileName))); String line; while ((line = + * bufferedReader.readLine()) != null) { int index = + * line.indexOf("CHARSET="); if (index != -1) { int endIndex = index + + * 8; while (line.charAt(endIndex) != ':' && line.charAt(endIndex) != + * ';') { endIndex += 1; } charSet = line.substring(index + 8, + * endIndex); break; } } } catch (FileNotFoundException e) { // TODO + * Auto-generated catch block e.printStackTrace(); + * + * } catch (IOException e) { // TODO Auto-generated catch block + * e.printStackTrace(); } finally { try { if (bufferedReader != null) { + * bufferedReader.close(); } } catch (IOException e) { // TODO + * Auto-generated catch block e.printStackTrace(); } } + */ + + // Then parse the vCard + try { + InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(fileName), charSet); + bufferedReader = new BufferedReader(inputStreamReader); + String line; + String value; + while ((line = bufferedReader.readLine()) != null) { + value = getVCardValue(line, "N"); + if (value != null) { + String[] result = value.split(";"); + + if (result.length > 0) { + contact.setLastName(result[0]); + } + if (result.length > 1) { + contact.setFirstName(result[1]); + } + if (result.length > 2) { + contact.setMiddleName(result[2]); + } + if (result.length > 3) { + contact.setTitle(result[3]); + } + continue; + } + value = getVCardValue(line, "TEL;WORK"); + if (value != null) { + contact.setPhone(value); + continue; + } + value = getVCardValue(line, "TEL;CELL"); + if (value != null) { + contact.setMobile(value); + continue; + } + value = getVCardValue(line, "ADR;WORK"); + if (value != null) { + String[] result = value.split(";"); + + if (result.length > 2) { + contact.setStreet(result[2]); + } + if (result.length > 3) { + contact.setCity(result[3]); + } + if (result.length > 4) { + contact.setState(result[4]); + } + if (result.length > 5) { + contact.setZip(result[5]); + } + if (result.length > 6) { + contact.setCountry(result[6]); + } + continue; + } + value = getVCardValue(line, "EMAIL;PREF;INTERNET"); + if (value != null) { + contact.setEmail(value); + continue; + } + value = getVCardValue(line, "URL;WORK"); + if (value != null) { + contact.setWebPage(value); + continue; + } + value = getVCardValue(line, "ORG"); + if (value != null) { + contact.setCompany(value); + continue; + } + value = getVCardValue(line, "TITLE"); + if (value != null) { + contact.setJobTitle(value); + continue; + } + value = getVCardValue(line, "NOTE"); + if (value != null) { + contact.setNote(value); + continue; + } + value = getVCardValue(line, "PHOTO;TYPE=JPEG;ENCODING=BASE64"); + if (value != null) { + line = bufferedReader.readLine(); + StringBuilder builder = new StringBuilder(); + while (line != null && line.length() > 0 && line.charAt(0) == ' ') { + builder.append(line.trim()); + line = bufferedReader.readLine(); + } + String jpegString = builder.toString(); + + contact.setJpegString(jpegString); + continue; + } + } + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + try { + if (bufferedReader != null) { + bufferedReader.close(); + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return contact; + } + + private String getVCardValue(String line, String token) { + if (line.startsWith(token + ":") || line.startsWith(token + ";")) { + String value = line.substring(line.indexOf(":") + 1); + return value; + } + return null; + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/AbstractThemeProcessor.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/AbstractThemeProcessor.java new file mode 100755 index 000000000..4d0595526 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/AbstractThemeProcessor.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * Copyright (c) 2010 BestSolution.at, Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tom Schindl - initial API and implementation + * Kai T��dter - Adoption to contacts demo + ******************************************************************************/ +package org.eclipse.fx.demo.contacts.processors; + +import java.util.List; + +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IExtensionRegistry; +import org.eclipse.core.runtime.RegistryFactory; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.e4.ui.model.application.commands.MCommand; +import org.eclipse.e4.ui.model.application.commands.MCommandsFactory; +import org.eclipse.e4.ui.model.application.commands.MParameter; +import org.eclipse.fx.ui.services.theme.Theme; +import org.eclipse.fx.ui.services.theme.ThemeManager; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; + +@SuppressWarnings("restriction") +public abstract class AbstractThemeProcessor { + + @Execute + public void process() { + if (!check()) { + return; + } + + // FIXME Remove once bug 314091 is resolved + Bundle bundle = FrameworkUtil.getBundle(getClass()); + BundleContext context = bundle.getBundleContext(); + + ServiceReference reference = context.getServiceReference(ThemeManager.class.getName()); + ThemeManager themeManager = (ThemeManager) context.getService(reference); + + List themes = themeManager.getAvailableThemes(); + if (themes.size() > 0) { + MApplication application = getApplication(); + + MCommand switchThemeCommand = null; + for (MCommand cmd : application.getCommands()) { + if ("contacts.switchTheme".equals(cmd.getElementId())) { //$NON-NLS-1$ + switchThemeCommand = cmd; + break; + } + } + + if (switchThemeCommand != null) { + + preprocess(); + + for (Theme theme : themes) { + MParameter parameter = MCommandsFactory.INSTANCE.createParameter(); + parameter.setName("contacts.commands.switchtheme.themeid"); //$NON-NLS-1$ + parameter.setValue(theme.getId()); + String iconURI = getCSSUri(theme.getId()); + if (iconURI != null) { + iconURI = iconURI.replace(".css", ".png"); + } + processTheme(theme.getName(), switchThemeCommand, parameter, iconURI); + } + + postprocess(); + } + } + } + + abstract protected boolean check(); + + abstract protected void preprocess(); + + abstract protected void processTheme(String name, MCommand switchCommand, MParameter themeId, String iconURI); + + abstract protected void postprocess(); + + abstract protected MApplication getApplication(); + + private String getCSSUri(String themeId) { + IExtensionRegistry registry = RegistryFactory.getRegistry(); + IExtensionPoint extPoint = registry.getExtensionPoint("org.eclipse.fx.ui.theme"); + + for (IExtension e : extPoint.getExtensions()) { + for (IConfigurationElement ce : e.getConfigurationElements()) { + if (ce.getName().equals("theme") && ce.getAttribute("id").equals(themeId)) { + return "platform:/plugin/" + ce.getContributor().getName() + "/" + + ce.getAttribute("basestylesheet"); + } + } + } + return null; + } + + protected boolean isAreadyProcessed(String processorId) { + MApplication application = getApplication(); + List tags = application.getTags(); + for (String tag : tags) { + if (processorId.equals(tag)) { + return true; // already processed + } + } + tags.add(processorId); + return false; + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/MenuThemeProcessor.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/MenuThemeProcessor.java new file mode 100755 index 000000000..dd48d12b9 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/MenuThemeProcessor.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2010 BestSolution.at, Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tom Schindl - initial API and implementation + * Kai T??dter - Adoption to contacts demo + ******************************************************************************/ +package org.eclipse.fx.demo.contacts.processors; + +import javax.inject.Inject; +import javax.inject.Named; + +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.e4.ui.model.application.commands.MCommand; +import org.eclipse.e4.ui.model.application.commands.MParameter; +import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem; +import org.eclipse.e4.ui.model.application.ui.menu.MMenu; +import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; +import org.eclipse.emf.ecore.EObject; + +public class MenuThemeProcessor extends AbstractThemeProcessor { + + private static final String BUNDLE_ID = "platform:/plugin/org.eclipse.fx.demo.contacts.app"; //$NON-NLS-1$ + private final static String PROCESSOR_ID = "org.eclipse.fx.demo.contacts.processors.theme.menu"; + + @Inject + @Named("menu:org.eclipse.ui.main.menu") + private MMenu menu; + private MMenu themesMenu; + + @Override + protected boolean check() { + if (isAreadyProcessed(PROCESSOR_ID)) { + return false; + } + return menu != null; + } + + @Override + protected void preprocess() { + themesMenu = MMenuFactory.INSTANCE.createMenu(); + themesMenu.setLabel("%switchThemeMenu"); //$NON-NLS-1$ + themesMenu.setContributorURI(BUNDLE_ID); + } + + @Override + protected void processTheme(String name, MCommand switchCommand, MParameter themeId, String iconURI) { + MHandledMenuItem menuItem = MMenuFactory.INSTANCE.createHandledMenuItem(); + menuItem.setLabel(name); + menuItem.setCommand(switchCommand); + menuItem.getParameters().add(themeId); + menuItem.setContributorURI(BUNDLE_ID); + if (iconURI != null) { + menuItem.setIconURI(iconURI); + } + themesMenu.getChildren().add(menuItem); + } + + @Override + protected void postprocess() { + menu.getChildren().add(themesMenu); + } + + @Override + protected MApplication getApplication() { + return (MApplication) (((EObject) menu).eContainer()).eContainer(); + } +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/ToolbarThemeProcessor.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/ToolbarThemeProcessor.java new file mode 100755 index 000000000..e23a9c3de --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/processors/ToolbarThemeProcessor.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2010 Siemens AG and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Kai T??dter - initial implementation + ******************************************************************************/ + +package org.eclipse.fx.demo.contacts.processors; + +import javax.inject.Inject; +import javax.inject.Named; + +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.e4.ui.model.application.commands.MCommand; +import org.eclipse.e4.ui.model.application.commands.MParameter; +import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; +import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem; +import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; +import org.eclipse.e4.ui.model.application.ui.menu.MToolBar; +import org.eclipse.emf.ecore.EObject; + +@SuppressWarnings("restriction") +public class ToolbarThemeProcessor extends AbstractThemeProcessor { + + private final static String PROCESSOR_ID = "org.eclipse.fx.demo.contacts.processors.theme.toolbar"; + + @Inject + @Named("toolbar:org.eclipse.ui.main.toolbar") + private MTrimBar topBar; + private MToolBar toolBar; + + @Override + protected boolean check() { + if (isAreadyProcessed(PROCESSOR_ID)) { + return false; + } + return topBar != null; + } + + @Override + protected void preprocess() { + toolBar = MMenuFactory.INSTANCE.createToolBar(); + topBar.getChildren().add(toolBar); + } + + @Override + protected void processTheme(String name, MCommand switchCommand, MParameter themeId, String iconURI) { + MHandledToolItem toolItem = MMenuFactory.INSTANCE.createHandledToolItem(); + toolItem.setTooltip(name); + toolItem.setCommand(switchCommand); + toolItem.getParameters().add(themeId); + if (iconURI != null) { + toolItem.setIconURI(iconURI); + } + toolBar.getChildren().add(toolItem); + } + + @Override + protected void postprocess() { + } + + @Override + protected MApplication getApplication() { + return (MApplication) (((EObject) topBar).eContainer()).eContainer(); + } +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java new file mode 100755 index 000000000..491661da0 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + *******************************************************************************/ +package org.eclipse.fx.demo.contacts.views; + +import java.util.List; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.ListChangeListener; +import javafx.scene.control.ListView; +import javafx.scene.control.SelectionMode; +import javafx.scene.layout.BorderPane; + +import javax.inject.Inject; + +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.fx.demo.contacts.ContactsPackage; +import org.eclipse.fx.demo.contacts.model.ContactsManager; +import org.eclipse.fx.emf.edit.ui.AdapterFactoryListCellFactory; +import org.eclipse.fx.emf.edit.ui.AdapterFactoryObservableList; +import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler; +import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter; +import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter; + + +@SuppressWarnings("restriction") +public class ContactsListView { + + @Inject + public ContactsListView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) { + EditingDomain editingDomain = contactsManager.getEditingDomain(); + AdapterFactory adapterFactory = contactsManager.getAdapterFactory(); + + ListView listView = new ListView<>(); + + parent.setCenter(listView); + + listView.setItems(new AdapterFactoryObservableList(adapterFactory, contactsManager.getRootGroup())); + listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + AdapterFactoryListCellFactory listCellFactory = new AdapterFactoryListCellFactory(adapterFactory); + listCellFactory.addCellCreationListener(new CellDragAdapter()); + EditingDomainCellDropAdapter dropAdapter = new EditingDomainCellDropAdapter(editingDomain); + dropAdapter.setFeedbackHandler(new CustomFeedbackHandler()); + listCellFactory.addCellCreationListener(dropAdapter); + listView.setCellFactory(listCellFactory); + + // add edit support + listView.setEditable(true); + listCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getGroup_Name(), editingDomain)); + + // add the context menu + ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager); + listCellFactory.addCellUpdateListener(contextMenuProvider); + + listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + listView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener() { + + @Override + public void onChanged(Change change) { + application.getContext().set(List.class, change.getList()); + } + + }); + + listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue arg0, Object arg1, Object arg2) { + application.getContext().set(Object.class, arg2); + } + + }); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java new file mode 100755 index 000000000..6574cec49 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + *******************************************************************************/ +package org.eclipse.fx.demo.contacts.views; + +import java.util.List; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.ListChangeListener; +import javafx.scene.control.SelectionMode; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.layout.BorderPane; + +import javax.inject.Inject; + +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.fx.demo.contacts.ContactsPackage; +import org.eclipse.fx.demo.contacts.model.ContactsManager; +import org.eclipse.fx.emf.edit.ui.AdapterFactoryObservableList; +import org.eclipse.fx.emf.edit.ui.AdapterFactoryTableCellFactory; +import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler; +import org.eclipse.fx.emf.edit.ui.ProxyCellValueFactory; +import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter; +import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter; + + +@SuppressWarnings("restriction") +public class ContactsTableView { + + @Inject + public ContactsTableView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) { + EditingDomain editingDomain = contactsManager.getEditingDomain(); + AdapterFactory adapterFactory = contactsManager.getAdapterFactory(); + + TableView tableView = new TableView<>(); + + parent.setCenter(tableView); + + TableColumn firstNameColumn = new TableColumn<>("First Name"); + TableColumn lastNameColumn = new TableColumn<>("Last Name"); + + tableView.getColumns().addAll(firstNameColumn, lastNameColumn); + + firstNameColumn.setCellValueFactory(new ProxyCellValueFactory()); + AdapterFactoryTableCellFactory firstNameCellFactory = new AdapterFactoryTableCellFactory<>(adapterFactory, 0); + firstNameCellFactory.addCellCreationListener(new CellDragAdapter()); + firstNameCellFactory.addCellCreationListener(new EditingDomainCellDropAdapter(editingDomain)); + firstNameColumn.setCellFactory(firstNameCellFactory); + firstNameColumn.setSortable(false); + + lastNameColumn.setCellValueFactory(new ProxyCellValueFactory()); + AdapterFactoryTableCellFactory lastNameCellFactory = new AdapterFactoryTableCellFactory( + adapterFactory, 1); + lastNameCellFactory.addCellCreationListener(new CellDragAdapter()); + lastNameCellFactory.addCellCreationListener(new EditingDomainCellDropAdapter(editingDomain)); + lastNameColumn.setCellFactory(lastNameCellFactory); + lastNameColumn.setSortable(false); + + tableView.setItems(new AdapterFactoryObservableList(adapterFactory, contactsManager.getRootGroup())); + tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + // add edit support + tableView.setEditable(true); + firstNameCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getContact_FirstName(), + editingDomain)); + lastNameCellFactory + .addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getContact_LastName(), editingDomain)); + + // add the context menu + ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager); + firstNameCellFactory.addCellUpdateListener(contextMenuProvider); + lastNameCellFactory.addCellUpdateListener(contextMenuProvider); + + tableView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener() { + + @Override + public void onChanged(Change change) { + application.getContext().set(List.class, change.getList()); + } + + }); + + tableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue arg0, Object arg1, Object arg2) { + application.getContext().set(Object.class, arg2); + } + + }); + + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java new file mode 100755 index 000000000..e6074166e --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + *******************************************************************************/ +package org.eclipse.fx.demo.contacts.views; + +import java.util.ArrayList; +import java.util.List; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.ListChangeListener; +import javafx.scene.control.SelectionMode; +import javafx.scene.control.TreeView; +import javafx.scene.layout.BorderPane; + +import javax.inject.Inject; + +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.fx.demo.contacts.Contact; +import org.eclipse.fx.demo.contacts.ContactsPackage; +import org.eclipse.fx.demo.contacts.model.ContactsManager; +import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeCellFactory; +import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeItem; +import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler; +import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter; +import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter; + + +@SuppressWarnings("restriction") +public class ContactsTreeView { + + @Inject + public ContactsTreeView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) { + EditingDomain editingDomain = contactsManager.getEditingDomain(); + + // TreeView + TreeView treeView = new TreeView<>(); + treeView.setRoot(new AdapterFactoryTreeItem(contactsManager.getRootGroup(), treeView, contactsManager.getAdapterFactory())); + AdapterFactoryTreeCellFactory treeCellFactory = new AdapterFactoryTreeCellFactory(contactsManager.getAdapterFactory()); + + // add edit support + treeCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getGroup_Name(), editingDomain)); + + // adds drag support + treeCellFactory.addCellCreationListener(new CellDragAdapter()); + + // adds drop support + EditingDomainCellDropAdapter dropAdapter = new EditingDomainCellDropAdapter(editingDomain); + dropAdapter.setFeedbackHandler(new CustomFeedbackHandler()); + treeCellFactory.addCellCreationListener(dropAdapter); + + treeView.setCellFactory(treeCellFactory); + + parent.setCenter(treeView); + + treeView.setShowRoot(false); + + treeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + + treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + + public void changed(ObservableValue arg0, Object arg1, Object arg2) { + if (arg2 instanceof AdapterFactoryTreeItem) { + Object value = ((AdapterFactoryTreeItem) arg2).getValue(); + if (value instanceof Contact) + application.getContext().set(Object.class, value); + } + } + + }); + + treeView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener() { + + @Override + public void onChanged(Change change) { + ArrayList selection = new ArrayList(); + for (Object item : change.getList()) { + if (item instanceof AdapterFactoryTreeItem) { + Object value = ((AdapterFactoryTreeItem) item).getValue(); + selection.add(value); + } + } + application.getContext().set(List.class, selection); + } + + }); + + // add the context menu + ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager); + treeCellFactory.addCellUpdateListener(contextMenuProvider); + + treeView.setEditable(true); + } +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContextMenuProvider.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContextMenuProvider.java new file mode 100755 index 000000000..2567674fe --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContextMenuProvider.java @@ -0,0 +1,156 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + *******************************************************************************/ +package org.eclipse.fx.demo.contacts.views; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.fx.demo.contacts.handlers.CopyHandler; +import org.eclipse.fx.demo.contacts.handlers.CutHandler; +import org.eclipse.fx.demo.contacts.handlers.DeleteContactHandler; +import org.eclipse.fx.demo.contacts.handlers.PasteHandler; +import org.eclipse.fx.demo.contacts.model.ContactsManager; +import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory.ICellUpdateListener; + +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.control.Cell; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.ListCell; +import javafx.scene.control.MenuItem; +import javafx.scene.control.MultipleSelectionModel; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableRow; +import javafx.scene.control.TreeCell; +import javafx.scene.control.TreeItem; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.stage.WindowEvent; + +public class ContextMenuProvider implements ICellUpdateListener { + + ContactsManager contactsManager; + private DeleteContactHandler deleteHandler; + private MenuItem deleteMenuItem; + CutHandler cutHandler; + private MenuItem cutMenuItem; + private CopyHandler copyHandler; + private MenuItem copyMenuItem; + private PasteHandler pasteHandler; + private MenuItem pasteMenuItem; + + public ContextMenuProvider(ContactsManager contactsManager) { + this.contactsManager = contactsManager; + } + + static List getSelectionModel(Cell cell) { + if (cell instanceof ListCell) { + return ((ListCell) cell).getListView().getSelectionModel().getSelectedItems(); + } else if (cell instanceof TreeCell) { + MultipleSelectionModel selectionModel = ((TreeCell) cell).getTreeView().getSelectionModel(); + ObservableList selectedItems = selectionModel.getSelectedItems(); + ArrayList unwrappedItems = new ArrayList<>(selectedItems.size()); + for (Object object : selectedItems) { + TreeItem treeItem = (TreeItem) object; + unwrappedItems.add(treeItem.getValue()); + } + return unwrappedItems; + } else if (cell instanceof TableCell) { + return ((TableCell) cell).getTableView().getSelectionModel().getSelectedItems(); + } else if (cell instanceof TableRow) { + return ((TableRow) cell).getTableView().getSelectionModel().getSelectedItems(); + } + return null; + } + + @Override + public void updateItem(final Cell cell, final Object item, boolean empty) { + + final ContextMenu contextMenu = new ContextMenu(); + cell.setContextMenu(contextMenu); + contextMenu.getItems().add(new MenuItem()); + contextMenu.setOnShowing(new EventHandler() { + + @Override + public void handle(WindowEvent event) { + List selectedItems = getSelectionModel(cell); + deleteMenuItem.setDisable(!deleteHandler.canExecute(selectedItems)); + cutMenuItem.setDisable(!cutHandler.canExecute(selectedItems)); + copyMenuItem.setDisable(!copyHandler.canExecute(selectedItems)); + + Object item2 = cell.getItem(); + + pasteMenuItem.setDisable(!pasteHandler.canExecute(item2)); + contextMenu.getItems().clear(); + contextMenu.getItems().add(deleteMenuItem); + contextMenu.getItems().add(cutMenuItem); + contextMenu.getItems().add(copyMenuItem); + contextMenu.getItems().add(pasteMenuItem); + } + + }); + + deleteMenuItem = new MenuItem("Delete", getImage("icons/silk/cross.png")); + deleteHandler = new DeleteContactHandler(contactsManager); + deleteMenuItem.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + deleteHandler.execute(); + } + }); + + cutMenuItem = new MenuItem("Cut", getImage("icons/silk/cut.png")); + cutHandler = new CutHandler(contactsManager); + cutMenuItem.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + cutHandler.execute(); + } + }); + + copyMenuItem = new MenuItem("Copy", getImage("icons/silk/page_copy.png")); + copyHandler = new CopyHandler(contactsManager); + copyMenuItem.setOnAction(new EventHandler() { + + @Override + public void handle(ActionEvent event) { + copyHandler.execute(); + } + + }); + + pasteMenuItem = new MenuItem("Paste", getImage("icons/silk/page_paste.png")); + pasteHandler = new PasteHandler(contactsManager); + pasteMenuItem.setOnAction(new EventHandler() { + + @Override + public void handle(ActionEvent event) { + pasteHandler.execute(); + } + + }); + + } + + private ImageView getImage(String path) { + try { + URL url = new URL("platform:/plugin/org.eclipse.fx.demo.contacts.app/" + path); + Image image = new Image(url.toExternalForm()); + return new ImageView(image); + } catch (MalformedURLException e) { + throw new IllegalArgumentException(e); + } + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/CustomFeedbackHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/CustomFeedbackHandler.java new file mode 100755 index 000000000..c8249940c --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/CustomFeedbackHandler.java @@ -0,0 +1,34 @@ +package org.eclipse.fx.demo.contacts.views; + +import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter.IDnDFeedbackHandler; + +import javafx.scene.control.Cell; +import javafx.scene.control.TableView; + +/** + * A custom {@link IDnDFeedbackHandler} that increases the padding to make room + * for the dragged {@link Cell}. This does not work well with {@link TableView}s. + */ +public class CustomFeedbackHandler implements IDnDFeedbackHandler { + + @Override + public void onFeedbackInsertBefore(Cell cell) { + cell.setStyle("-fx-padding: 15 3 3 3;"); + } + + @Override + public void onFeedbackInsertAfter(Cell cell) { + cell.setStyle("-fx-padding: 3 3 15 3;"); + } + + @Override + public void onFeedbackSelect(Cell cell) { + cell.setStyle(null); + } + + @Override + public void onFeedbackNone(Cell cell) { + cell.setStyle(null); + } + +} \ No newline at end of file diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsView.java new file mode 100755 index 000000000..b1319d0d2 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsView.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + *******************************************************************************/ +package org.eclipse.fx.demo.contacts.views; + +import java.io.IOException; +import java.net.URL; + +import javafx.fxml.FXMLLoader; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.Pane; + +import javax.inject.Inject; + +import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.e4.ui.model.application.MApplication; +import org.eclipse.fx.demo.contacts.Contact; +import org.eclipse.fx.demo.contacts.model.ContactsManager; + + +@SuppressWarnings("restriction") +public class DetailsView { + + DetailsViewController controller; + + @Inject + ContactsManager contactsManager; + + @Inject + public DetailsView(BorderPane parent, final MApplication application) { + + URL location = getClass().getResource("details.fxml"); + + FXMLLoader fxmlLoader = new FXMLLoader(location); + controller = new DetailsViewController(); + fxmlLoader.setController(controller); + + Pane root = null; + try { + root = (Pane) fxmlLoader.load(); + } catch (IOException e) { + e.printStackTrace(); + } + + parent.setCenter(root); + } + + @Inject + public void setSelection(@Optional Object selectedItem) { + Contact contact = selectedItem instanceof Contact ? (Contact) selectedItem : null; + controller.updateBindings(contact, contactsManager.getEditingDomain()); + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsViewController.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsViewController.java new file mode 100755 index 000000000..12953c46e --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/DetailsViewController.java @@ -0,0 +1,150 @@ +/******************************************************************************* + * Copyright (c) 2012 TESIS DYNAware GmbH and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Torsten Sommer - initial API and implementation + *******************************************************************************/ +package org.eclipse.fx.demo.contacts.views; + +import java.io.ByteArrayInputStream; + +import javafx.beans.property.Property; +import javafx.fxml.FXML; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.fx.demo.contacts.Contact; +import org.eclipse.fx.demo.contacts.ContactsPackage; +import org.eclipse.fx.emf.databinding.edit.EMFEditFXProperties; +import org.eclipse.osgi.internal.signedcontent.Base64; + +@SuppressWarnings("restriction") +public class DetailsViewController { + + @FXML + private ImageView imageView; + + @FXML + private TextField title; + private Property titleProperty; + + @FXML + private TextField firstName; + private Property firstNameProperty; + + @FXML + private TextField lastName; + private Property lastNameProperty; + + @FXML + private TextField jobTitle; + private Property jobTitleProperty; + + @FXML + private TextField note; + private Property noteProperty; + + @FXML + private TextField street; + private Property streetProperty; + + @FXML + private TextField city; + private Property cityProperty; + + @FXML + private TextField zip; + private Property zipProperty; + + @FXML + private TextField state; + private Property stateProperty; + + @FXML + private TextField country; + private Property countryProperty; + + @FXML + private TextField phone; + private Property phoneProperty; + + @FXML + private TextField mobile; + private Property mobileProperty; + + @FXML + private TextField email; + private Property emailProperty; + + @FXML + private TextField webPage; + private Property webPageProperty; + + // @FXML + // public void initialize() { + // + // } + + public void updateBindings(Contact contact, EditingDomain editingDomain) { + // General + titleProperty = rebind(title, titleProperty, contact, ContactsPackage.eINSTANCE.getContact_Title(), editingDomain); + firstNameProperty = rebind(firstName, firstNameProperty, contact, ContactsPackage.eINSTANCE.getContact_FirstName(), editingDomain); + lastNameProperty = rebind(lastName, lastNameProperty, contact, ContactsPackage.eINSTANCE.getContact_LastName(), editingDomain); + jobTitleProperty = rebind(jobTitle, jobTitleProperty, contact, ContactsPackage.eINSTANCE.getContact_JobTitle(), editingDomain); + noteProperty = rebind(note, noteProperty, contact, ContactsPackage.eINSTANCE.getContact_Note(), editingDomain); + + // Business Address + streetProperty = rebind(street, streetProperty, contact, ContactsPackage.eINSTANCE.getContact_Street(), editingDomain); + cityProperty = rebind(city, cityProperty, contact, ContactsPackage.eINSTANCE.getContact_City(), editingDomain); + zipProperty = rebind(zip, zipProperty, contact, ContactsPackage.eINSTANCE.getContact_Zip(), editingDomain); + stateProperty = rebind(state, stateProperty, contact, ContactsPackage.eINSTANCE.getContact_State(), editingDomain); + countryProperty = rebind(country, countryProperty, contact, ContactsPackage.eINSTANCE.getContact_Country(), editingDomain); + + // Business Phones + phoneProperty = rebind(phone, phoneProperty, contact, ContactsPackage.eINSTANCE.getContact_Phone(), editingDomain); + mobileProperty = rebind(mobile, mobileProperty, contact, ContactsPackage.eINSTANCE.getContact_Mobile(), editingDomain); + + // Business Internet + emailProperty = rebind(email, emailProperty, contact, ContactsPackage.eINSTANCE.getContact_Email(), editingDomain); + webPageProperty = rebind(webPage, webPageProperty, contact, ContactsPackage.eINSTANCE.getContact_WebPage(), editingDomain); + + // image + Image image = null; + if (contact != null) { + String jpegString = contact.getJpegString(); + if (jpegString != null) { + byte[] imageBytes = Base64.decode(jpegString.getBytes()); + ByteArrayInputStream is = new ByteArrayInputStream(imageBytes); + image = new Image(is); + } + } + imageView.setImage(image); + } + + Property rebind(TextField textField, Property oldProperty, Contact contact, EStructuralFeature feature, + EditingDomain editingDomain) { + if (oldProperty != null) + textField.textProperty().unbindBidirectional(oldProperty); + + Property property = null; + if (contact != null) { + property = EMFEditFXProperties.value(editingDomain, contact, feature); + textField.textProperty().bindBidirectional(property); + } + + textField.setDisable(contact == null); + + if(contact == null) + textField.clear(); + + return property; + } + +} diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/details.fxml b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/details.fxml new file mode 100755 index 000000000..4c8be9d29 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/details.fxml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/dummy.png b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/dummy.png new file mode 100755 index 000000000..bb30f82d3 Binary files /dev/null and b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/dummy.png differ diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf new file mode 100755 index 000000000..4b55de06f --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf @@ -0,0 +1,61 @@ +BEGIN:VCARD +VERSION:2.1 +N:ZERR;Angelo +FN:Angelo ZERR +TITLE:Enthusiastic developer +NOTE:CSS Engine +ADR;WORK:;;;Saint Paul 3 Chateaux;;26130;France +LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Saint Paul 3 Chateaux 26130=0D=0A= +France +ADR;HOME:;;;;;;France +LABEL;HOME:France +X-MS-OL-DEFAULT-POSTAL-ADDRESS:0 +X-WAB-GENDER:2 +URL;WORK:http://akrogen.sourceforge.net/ +EMAIL;PREF;INTERNET:angelo.zerr@gmail.com +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABYAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1ySXc7beijFRp/qxnPJqrGSsRJPJ/nTri + cRjk4VBya961jzAuZlgikkchUX1rlNS8fx6c6pCsT84YFsEVxmu+Njqd46oxjto2IQf3u24+ + /wDKuG11Z94lsC4jyTu3ZYseTzXDXrtStE7aVBJXkeyXfxQuzJutdNDIADhmOSM+1dPo3jW0 + vcC5iktp2HRgSPzr580HXkaQR3hfeo2oHOR78n1rU/4SG7snjEQSO1LcLKCR/wABrH6xJGns + YNH0a8yNDuQ7gRkEVhXUhbzPYYry7w947ks9Xihe486xkbD5GNoP8WO2K9SnUfZy4wc8g120 + qiqK6OSrTcHZlSI+XECepoocErgdBRWxkXHJ82OIduTWR4zu/snhrVZ8lSkDcj1IxW+iBmL9 + 65H4p+Z/whepR28bSyOgXaoycZ5P4DmibtFsdNXkkfOK6g7SqB83cg12ummfUYo1ZUiiHIAH + X615tZFvti5555r1bRAXgiVMg47CvEnI9Wmk3qY/iLw1MiCSDbnrxxXLvd30TiGfLJ0KkfpX + rt5HMLc79hAHLFwf5DNcXqNsJHLBFznqDWc5tGipJmVpl4Jm8i5iRAR8smMFT+FfQfg+7a+8 + KaezyB3VSjMDnO3ivnxoGVmypHB5xXrvwTdn8JOrsTi4fH5LXbgZ81zkxcbJHdEdfyop7/Jj + 9aK9I4C6PkiH515n8ZBdG00+SJ5Ft28zdsOOeMfp/WvSrj59sY78VleM9LN/o2EiaRoG8xUU + cng5H5Gs68eem0b4Wfs6qkfMmh6cr6lIJVOFG5Qa3NR1u40xRDaLsbGC23NSTvbnXZJLXPll + cdMYI6itqSOy1DT/ACrrajAfK69Qa8V7npxWjscCmu37XIka5kYZ6djWhd69PHECygFhxmtC + 10SzF8I1kM8hPAx0FaXj3QoYtLsJIlQMq4YL1ApNX1GlKKscbY6lPdXI34ZT1FfQXwpgji8J + WjLEELlmbH8XOM14HoemvJqEEIAy7hVx719L6NAllYQwR4CRRhB+ArvwUd2jhxUrJJ7k1++c + hTjiiq1y/wArMT14FFd5wm1uCyE4JCDJPpXh3xO+JGvwa3Pp+lS/ZLBCIxIsYLSEgZ+Yg+vb + FeuwXlyPMduDKj7VA6DBxXAXVrFr+iyx3cQlQsdyL/yzb1HpWVRylpE3pqMdWeYQkxKnmfec + bsmluZJXDeWxH07VqeKdJa2tgIsgx8ofX2rlbW8Mku12x/eWvJqRadnuejCatoaETmC3kaG7 + 8q6P/LQNzj0rOk1O+f5JZmkA4yTnIrVltnlhMlpCmQOTxisZIHeba6AMT24qH2NG+p23wtsn + vdeSZ1yluN59Pb9a9rE22EkdScVyHgDQ5NH8Pb5UxdXR3YPUJjiuniRz5QfgZzXsYenyQSZ5 + VepzzuPuFLbRngc0VFdT7JmA7cUVsYmTrF5rslgrnTLV7iEEr9kvQzL9RjkV53oHiG40/Xrk + alavbfajko7cB/UE16brF5HeQb3KTRMOGIDge/8A9cV414q0m4EkpS6lZA2URzuC/Qnmsvea + ujofLc7HXdRguYxbXEJBlHXrivKNcsWtrmQrnIPWum8H+KYY/Ms9dVXVV2xyEfMuO2fSqPiq + 5tZ7rdAWAfuw+Un2NcuISnHmW5pSTi+VnNRX9zGpQO209s06LVJra6jlQ/PGwYZ9ajYYchhy + KoXC7LhwTz1rhje5vd2PpjwJ410/xRGqyyJBqCrgwMcbj6r6iuyMa+YWJHyjgV8d2k7QypJH + IySKcqynBBr1/wAIfFJoIPs3iBWmGAq3KfeH+8O/1r1KWJUtJbnHUotaxO/1S68p5ZpDhSeA + O+KK5S/1iHXXZdNlWUFcKqn5uepx16UV0Kz1uZcrRzeh+IHs7sx4L2Urfdz9zPpWh4gt2Ks0 + LK0LDdg9qKKKZpPc821zTpUuGmRSgPOTWc98NqJKpBAwW9fwoorhxC5J2RvDVaksZilwvmAA + 8ZxmtzXvDe3w/aarbglWXD8dxxn6GiislFOLNEcvbQrICx+VR1JPStSzCDHkQeaR/E/I/AUU + VlEGddovie90uVHjkMDrwUi6OPcdKKKK76NNSjdmM5NM/9k= + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090622T152914Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf new file mode 100755 index 000000000..4aaedfe21 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf @@ -0,0 +1,61 @@ +BEGIN:VCARD +VERSION:2.1 +N:Bokowski;Boris;;Dr. +FN:Dr. Boris Bokowski +ORG:IBM Canada Ltd. +TITLE:Eclipse Platform UI Technical Lead +TEL;WORK;VOICE:+1-613-820-1200 +TEL;WORK;FAX:+1-613-820-1202 +TEL;PREF:+1-613-820-1200 +ADR;WORK:;;2670 Queensview Dr;Ottawa;ON;K2A2A8;Canada +LABEL;WORK;ENCODING=QUOTED-PRINTABLE:2670 Queensview Dr=0D=0A= +Ottawa ON K2A2A8=0D=0A= +Canada +X-MS-OL-DEFAULT-POSTAL-ADDRESS:0 +EMAIL;PREF;INTERNET:Boris_Bokowski@ca.ibm.com +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABgAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDuUjbP3qnSJ8jBpsRGc1Nc3cNnYz3VwwCR + pnJOMVNzVIjvdWtdKUfbHiAx1c1zt58RbOyud+nqs8Y5OTXj/jzxU+rXzywy5t14BHeuOgvb + 2VWMSyNzngVi5t7GqgfSuk+M7PVrlVJMcknTcR19K6A3Q8s7WUj2NfK9tqt1ZyRtIjhlPXGK + 9F8H+MF8lYpX3MAEUO2APUmqjPuTKFtj2KOVZTtZjj2p8tlFFbtIZsydlFczbaiJIg6Mp/3T + kH6VOdSPQmtbX2M/UuM/PNFZr3wznNFFhHSIqADA4rzL476+9lo1pptoMPdyF3b/AGVxxj6k + H8K9JVy3HavAPi/dm9+JEdlvBS2jjiwOxI3H/wBCqJbFx1ZkeHdF/tWCFZgwjU7mH96vRtO8 + P29vCqRxhVx6VR8OQx28K7FwOmBXTJM2BkYFcE5XZ7FGmkjE1DRbdkP7pW78iuB8Q6Utk63V + kpjZGy6DoRXqVz5pQsvSuT15VdDkexohJpirU04lTwxrDRzW5kYmOQ7S2ehPAz+OK72STA61 + 4gt21vqH2MDbE7BMnoD1B/z616+0pZRk5OOa76N7WPIrbk7TnPWiqRJzRWxketeTDbqRPIox + 3Jxivnn4paW9l8WPMyGjukjuIyOmNu0/qpr3DWNImRZt08kka8quc15F8QY5JdY0iaRWzEDG + Xb+6egH0IP50p04qm5JlU5SdRRsR6beeVAS06QjdhS3U1tafrHzKkz+Yr9Dtwax7axjZld13 + DbgKRn3/AJ1ZFo39oW6qoXPIUdhXluzPdhGSJ7/UnuZXaHzSkeRsRsZx/WsTULgXaFVjkhkX + na5zkA4rSsLRzqMyjKyDLexFSXlufM3Oqgj0oTSHKm5annWo2oPiCJW6S7fwORXri25VQACA + BiuHj01b/XkYglYl3tg4PBFez22iSThN428DORXbRn0PIr02tTkTH7UV10+jQxuQfm96K3uc + 9jpL+RJFYbhtx1PFeZePbZJoYxGu6Uchs/3Tn9ea7iezvQrKzjH1rCm04XUqJNtba394jFa+ + xU4OKZMK/s6ik1ocfoRQxRs/QjNO1ELd34dTsReNwOMH2p0EKWl9NYPx9nnaP/gB5U/liori + 0ljvjJC6OOCBKoYDHtXiyXLNpn0NOpzwTQ+zxZ3iyrhkIwSDkgn1qfUysudncZFUJLOe4ljl + nmTYnGIUCcehIGat6pIkUUbLwFQ5561LteyNHJoxtDtJZ5r14EcupCZU+uf8K9rsNSN1kNtX + aOxryn4f/PaXshPLSj+X/wBeuwtpmgl3IM54r28PhU6fN1Z81icW/acnRHQ3U8STlZTzjtRX + NyLMzlnySecmiuhYWNtWcrxMr7HeXmkGacSrNlB/BnH60yzuLbT3CpAhmGQ0nU/ga2I2dkyy + AfjXO6pClmwKKGZufWuBTbVmdzilqjz74syRQ+K7G9hyDdW4SXnqynAP5ED8K56LUFMxSY7c + 9/UV0HxMSK6stMIQiaN5FYnvkAj/ANBrjLZJsgH5iPXvXJWguY9DD1Go3Rs3NzCigRbsnt61 + j6rcSPZsH4LHAHetAJOU+WML7gVnyWkkko3847VkopO5vKcpGz4A+WC9j9GQ/mD/AIV1WOa5 + fwcyw6hdQsQGkRSAe+Cf8a63HtX0GDleij5vHQ5azGAdhRT/AMKK6TkPKPh/8SfE3hyQW18h + u9KHHlTSfNGP9huT+ByPpXf6/wDGmwaNU0rSpZZMfM9yQuPoBnP5ivn9ZXx9404OxHWvMVNb + nrczPR4PEl3rsxN/cZlEhkEfRcH+6PauihtfMRZEGDXjkNwykEEhh0INdLpXjTULABJBHcx+ + kgwfzFYVsO5PmidVDEqC5ZI9OiiJjww/GoJrcIGOK5NfiQirzpZJ9p+P/QazNT+IV7coVtrW + C3HqSXb+g/Suf6tUfQ6niqS1udFdotvIZ5HEarzuJxiuduPGV7Fq63dtM7RxrsVJWJVx6kZr + lb/Vby+fddzvIewJ4H0HSqLSM3c12UKTpa31ODEVlW0toeoQfFApGBdafG79zHIVH5EGivLD + 7miur2sjj9jDsf/Z + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090525T141422Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf new file mode 100755 index 000000000..442f6d43a --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf @@ -0,0 +1,66 @@ +BEGIN:VCARD +VERSION:2.1 +N:Aniszczyk;Chris +FN:Chris Aniszczyk +ORG:EclipseSource +TEL;WORK;VOICE:1-860-839-2465 +TEL;PREF:1-860-839-2465 +ADR;WORK;PREF:;;1221 S. Congress Ave;Austin;TX;78704;USA +LABEL;WORK;PREF;ENCODING=QUOTED-PRINTABLE:1221 S. Congress Ave=0D=0A= +Austin, TX 78704=0D=0A= +USA +X-MS-OL-DEFAULT-POSTAL-ADDRESS:2 +EMAIL;PREF;INTERNET:zx@eclipsesource.com +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABIAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDP+Hus6eunW9ibuIXZjZRERtJO9mxjp05q + j4+Yx38G2R48yTjKf9c0PWuFvry5Wzs3ljkt72FwQzKVY8cMM/SvUvDqQ+KdOW9lNuZRxJFJ + brL5b7QCRu6AgZ//AFVnFu12XKKva5gaxA2oWmn7HuGuJLKIkxA5JV8dPxFbF5ZDRtS1XU9U + uFhtHuPOQMc9iMY555PHWus1uWLwl4fs5FWGS+uZBBAzRqoiBGSQMcAKOnrivCfEuoXfiLW5 + lE7tbQOVj3Hj0L+5J71SaauyeTWy3LeufEHUJmSHTD5FtECoZvvP7nHTp6965qXxNqjXzXgu + HS4ZChcHqpGCDnPatWHRrdI9zguRwN38qwtWaFXdY0REU4GAMsamFRSdkjaph3TjzSNPTvEs + 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 + GRsG7gUUUVlOnG5vTm2j/9k= + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090525T195324Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf new file mode 100755 index 000000000..d7c548c05 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf @@ -0,0 +1,64 @@ +BEGIN:VCARD +VERSION:2.1 +N:Traetteberg;Hallvard +FN:Hallvard Traetteberg +ORG:Norwegian University of Science and Technology;Dept. of Computer and Information Sciences +TITLE:Associate Professor +TEL;CELL;VOICE:+47 91897263 +ADR;WORK;PREF;CHARSET=Windows-1252:;;Gløshaugen;Trondheim;;7491;Norway +LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Gl=C3=B8shaugen=0D=0A= +7491 Trondheim=0D=0A= +Norway +X-MS-OL-DEFAULT-POSTAL-ADDRESS:2 +URL;HOME:http://www.idi.ntnu.no/~hal +URL;WORK:http://www.idi.ntnu.no/~hal/ +EMAIL;PREF;INTERNET:hal@idi.ntnu.no +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABcAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6E700mhjxzXBfEn4g2HhSzeMSCTUnQmKA + AnnsWPYVA7nXapq1jpcPm6hdwW0fZpXC5+meteVeMPjXZ6dLJBotut3IvSaQkIfoOp/SvJEt + 9d8Y30l/dvIRK2WkYcH2A9KS+8D3I+5liOpzUucYuzZcaU5K6R1Fv8dNcF4jzRWrRZ+aMR8H + 8c5/WvQ/D/xo0W+QLqME1pJnqn7xOnU9CPyP1r55tfC19dXZhjU4B+8RWxD4OuoCQ7N6DFJ1 + ILZlKjPsfV+i+INK1tC2lX0FztGWVG+ZR7qeRWqDXxpcxat4Zu4riCWWNozuSaIlWU/UV798 + KfiVF4pVdP1EJFqirkMvCzAdSB2Pt+XpVrVXRm007M9OooBooEZ2tXq2On3FzI2EiQuxPYAV + 8lWoufGvjKe6vCWWRy7nsq9lHsBgV9IfFq8Fl4F1eQnBaBkH1bgfzrxf4PWqtY3MxUGRpMA+ + 2KUnyxbKprmlqd9YWASGOC3XZGgCjArYj0UTR4cZz14rU063SKMEgVsRsm0AIpNcajzbnp35 + VojlV8NwKcrEAR6cVXvdDAUsqDPauwfaOdo/OqdzcICECfiKmUUkVGTkeW6/pqz2slvNHnII + 6dK8ZYXGga6rRSSRGN9ySKcEYPBBr6c1a1ikieQ8fhXhnxMsBGkdwigYbB4rTDTalyvqc+Kp + rluj6T+HHiBvEvhCx1Cb/j4IMcxAwC68E/jwfxorlf2d7kT+AfLyCYrp1xj1VT/WiuxrU4EW + fjnay3PgHUBCpYoFkI9gwJ/SvMfguwGl3K5yyy5/DFevfFqK4n8HXsVqcNIAjf7pPNeKfBuG + YtqUa5BUKPocmolrFouCadz26C4gijjWR1Vj2JrRg8uXGCp/GvLNUjurdZ1axlvZEQvlrgxA + /wCyuAST7cVU0CyufsiasJLmz3OQls9w5IAxzg9QTkcjt71hyNLmO1VLvlPZGiVepXmsu7vb + KOUpJPCrgfd3DP5VRfUt2iRzzOzOEyR0NecavpDSxy6pHaw3E6J5oidny/PQbWXtk/41C992 + RbbguZnfXl5bz20iQSqzA8jNeSfFFR/ZgPQs1dFYNPqdvbGXSktDICQ8TN8mDwGU56/XNYHx + XgkTT4VHJ3jJH0q4Q5Z2ZhVm5RO6/ZlkJ8OanEf4bhW6+q//AFqKufs66ZNYeGr2WdSv2iVW + XPpt/wDr0V1Sd2cdmtGeheK4hLod0Cob5c4+hzXm3gy1todV1N4IxFvkVmUf7v8A9c16xqMB + uLOaJQCXQgZ9cV5tBbvpepym5V43mwcMMdOOKxqaO50UXdWZ0Uxh53R7iR9a5/xFEBZllTyg + SOBxmujM8ccAb5SxHANcL4t1CeG5jnMInVCDhjgD8MVjK9rI7YpE1/L5emwQuxAOAcitTQrR + RDh/nQHIB5xXN+IPE1ne2Sxw2cjTHB2x9T+fSun8Iuy6WBdBh3UP94CoUWndFuzRstbRSICu + BjpXn3je3gmubSCYble4jXB/3ua9AubiGKAyKwK+orjYbIeJfE9vEm0CItJuboMDg/mRWid5 + HPUSSO6+HQcaRIJTlvM6Y4HA4FFbHh/TP7LsjEzh3ZtzEcD8KK6Y6Kxwzd5Nmka4rxxEv22z + dh98MmfQ8Ef1rtTXO+MrGS90iT7P/wAfER82P3I7fiMilJXVgi7O5xtx58sSPA6+Zsx83QEd + c1kJLdvL5dzp/m89Y5eD+YFUrfWN1zjeApO7GfzFdNbxJcxho5GikPQocVhF2ex3waZRvIoU + RpF0653nBbATj8zVO2vL6V9sUDRRg5ZpWHA9gM5rYlspcbZr+5kXupfP9KzNVuodPj2pk7uM + k5NOUl0Relrjr24MNlcM8vEgAUDjJ55/lW38K7cPeXt3jIjQRA+pJyf5D868xvdaWRygIY8q + oBzzXuHw/sE0/wAL2YXmSdRPIfVmA/kMD8KdKOtzkr1NLHT5opoNFbHLcVqrXQ3RMCOMVMSa + r3DERmgVz5o8VJPpuoTz22SiSMpUdsHFWfD/AMQra3gEd3uRl4wa6i5tory7vROoIeVyR9WN + ctb+FtLu9xlhbIYjKtjvWSSlozru4ao1H8f6XHukSRnkYZ6E1x+ueIrjWptlnGyR92b/AArr + LXwfpAOfJfp/eq5faNY2Noy20CrjPPejlUdR88p6HI+G9MMkhlkydnevovwXdx3Phyx2MC0c + YjYehXj+leN6MirYYA4fOaz9R1jUtEt5p9Jv7i1dOcI2Vb6qcg0oTvKwVaV4aH0lmiuL+Fmv + 33iPwnDe6myPciRoyyLt3YxyR0z9MUVtY4bn/9k= + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090526T085040Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf new file mode 100755 index 000000000..0a64e4c3e --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf @@ -0,0 +1,16 @@ +BEGIN:VCARD +VERSION:2.1 +N;CHARSET=UTF-8:Tödter;Kai; +FN;CHARSET=UTF-8:Kai Tödter +ORG;CHARSET=UTF-8:Siemens AG, CT T DE IT 1 +TITLE:Dipl.-Inform. +NOTE:Eclipse RCP Expert +TEL;WORK;VOICE:+49 (89) 636-45450 +TEL;CELL;VOICE:+49 (173) 7068910 +ADR;WORK;CHARSET=UTF-8:;;Otto-Hahn-Ring 6;Munich;;81739;Germany +URL;WORK:http://www.toedter.com +EMAIL;PREF;INTERNET:kai.toedter@siemens.com +PHOTO;TYPE=JPEG;ENCODING=BASE64: + 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 +END:VCARD + diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf new file mode 100755 index 000000000..cf2097dce --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf @@ -0,0 +1,58 @@ +BEGIN:VCARD +VERSION:2.1 +N:McGuire;Kevin +FN:Kevin McGuire +ORG:IBM Canada +TITLE:Eclipse UI Guy +ADR;WORK:;;2670 Queensview Drive;Ottawa;Ontario;K2B 8K1;Canada +LABEL;WORK;ENCODING=QUOTED-PRINTABLE:2670 Queensview Drive=0D=0A= +Ottawa Ontario K2B 8K1=0D=0A= +Canada +X-MS-OL-DEFAULT-POSTAL-ADDRESS:0 +EMAIL;PREF;INTERNET:kevin_mcguire@ca.ibm.com +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABcAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5npwpBUsMTSyBEGWPSkMYKcAScAEmtePS + QhDTmXGMkKnT2NWTpdnM4ZFYBxgMHOSajmRfIzF+zyAgbeT0GetNkjkjOJEZTkjDDHI61taT + pipdMLmcnIwu48Z7Z/L6VuvaWqiCJ285Dx85LAqP4fTd2yOemAez5kHIzhscUma3dZ0kQS3D + wDYiHcsbdSvqPcdx/SsM0yWrCUUYzRTERit3w3b/AOtuH2jjy4yeTuPoKwhXo3wn0tL3XLNr + oZjiLSqOzEDj9T+lZVpcsGzahDnmkaXh74f6jqs6zajK8UHGIsnJ+vvWtefD5rXUIZo2lkiT + AUZ6eoNe02VtGsY4Apl5ErI+B8wNeW683rc9tYamlax4Zqvgxd6yOpAA9apm2TT7aZHjeeEj + iIn+LBxg9u2a9T1pfmIIFcZf6ct3JNboMTOuIyOPm/8Ar1dOrJyWplWoxS0Rw8trPe6nMSBL + DgBVkGWGVz1578fjXKaxZNYahLbsCApBXPBweRXoEVrNawNBIJEu1ZoniKHcpAJVvocH8xXN + /EiNI9fVkOTJCrN9eR/ICvRhJtnlVIJI5biikorQwIhXonwe1Ax+J7SBu4dR9Nuf6V52K6Tw + Kp/txXjLCREbBEm3AYbT2JJ+btis68eaDRth21UVj6eu/Eml2BWO5vIlc8bFbLflUn9qW7Wx + uY3LRYzyegryf+w9SfzIrHT4onjAzNOwbJI6jJ4xx/hXW6Fo8w02a21NY5oJYyHQjAZuMdvY + 15LjFLRnvQnKTtY5nxX4uuZL54tNihcZ/wBY7cH6VzVpr2oxX8dy15BJKjcxCI4OD0OcfpWl + YWMcXiJ0OPkcqijjA7D6V0l54dgMfm+QqqpyEVQBmtVOMNkZSpVJvUsMZvGulXOr3UFpbXth + ECr224SZLYxJuGGUfe74x1rzDxTatcJNFdrm7t0Z0YN90Z3FT68ZPtXuPwtjSFdTW7QC2u0E + OG/i5ww/I1538QdHtdL8YeILXT1dtOt4C3ztnZvj3AD2wfyrpU5cqZzKlBylF9jxviioyeaK + 7DySMGtDRb9tN1S2u0G7ynyy/wB5ehH4jNZ1OBoaurDTad0fXmitZ31pFeqwMLxrIp9QRkVU + j1WCa6lkYeXbRvsBA3ZIGf8ACvPfhVrUmpeFZNNifF3aDYNx6qxO0/h0/CurgW60+KGKOxL2 + wkKvKXB2/wC0R1P4V4k4cs3Fn09Gqp01KPU4PxIzLq872cUr5bck4BXFdXpmsG4sFhmYtKqD + JYYqx4gSSa2zFD5addwjAz+JPH5Vzvhu32X0kt3IzI5Ee3jA9auSVhXlF3Oi0PVJbO+S0nBC + xyeag+uM1xfxn1sQeJdR8htzX9uik/3VwB/JcVv67OreJVMR4JxxXH/GTT44rjSL/JHnQCKX + 1DBnw35YB/CurDvnsmebim4Xcep5pRU81u8XUbl/vDkUV3nlESQSNzt2j1bgVKIFX7z5/wB0 + f1p5JY/MSaaBkkelTcuyNXwhrVxoniCC4tBmMfLMmcb0PUfXuPcV9IaDq9prNgk0EgeOUZBH + r7+9fMFn8tx8vauw+HmpS2niK2svPaOC6ymM8B8ZU/nx+NcmJoqa5lujtwld03y9Ge73umRP + DIW3Pjpk4rh/EU0Onw/u12kH7orXv9Z1KGBoxGGZeMmvNvEE19eTn7ScZ7LxmuKEL7npVKqt + puT2uqM7yahMOF+WMH+Jv/rVz/xI1z+0rHS7dseZDEd4z0Jc4/Rf1q/ZwtKRv4SMYA7AVwet + zfaNUmIPyl8D6DgV3Yde9p0PNxT9zXqLBdyQ3TOhOCAD70VXjGCc0V12OFNlrIxxTUb59pGR + TAflqbpKQOBntSGSLmOVie9ElxLbiK5hYrNE4kRh2IwR/KhxyD61SuZnF0IeDHjpQlcG7H0R + 4b1y28SaTBeRFFuCoEsZ/vd6xPEVrJc6giwQMqj77EAD8K848CXc9netHBIwRmII9a9c0x2u + CDKcmvNqQ9nKyPVpT9pFNnKayi6To1xKcCQjC/U9K8ic7rlj6V6n8V5GjNvCvCHLEe44/rXl + EZyzHvXZho2jfucOLlefL2LKDIop0PC5orc50f/Z + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090529T154834Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf new file mode 100755 index 000000000..9b243374a --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf @@ -0,0 +1,16 @@ +BEGIN:VCARD +VERSION:2.1 +N;CHARSET=windows-1252:Vogel;Lars; +FN;CHARSET=windows-1252:Lars Vogel +ORG;CHARSET=windows-1252:SAP AG +TITLE:Product Manager +NOTE: +TEL;WORK;VOICE: +TEL;CELL;VOICE: +ADR;WORK;CHARSET=windows-1252:;;268 Charles Marx Way;Palo Alto;CA;94304;USA +URL;WORK:http://www.vogella.de +EMAIL;PREF;INTERNET:Lars.Vogel@gmail.com +PHOTO;TYPE=JPEG;ENCODING=BASE64: + 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 +END:VCARD + diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf new file mode 100755 index 000000000..df31b274d --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf @@ -0,0 +1,61 @@ +BEGIN:VCARD +VERSION:2.1 +N:Friese;Peter +FN:Peter Friese +ORG:itemis +TEL;WORK;VOICE:+49 431 5606-338 +TEL;PREF:+49 431 5606-338 +ADR;WORK;PREF;CHARSET=Windows-1252:;;Schauenburgerstraße 116;Kiel;;24118;Germany +LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Schauenburgerstra=DFe 116=0D=0A= +=0D=0A= +24118 Kiel +X-MS-OL-DEFAULT-POSTAL-ADDRESS:2 +EMAIL;PREF;INTERNET:peter.friese@itemis.de +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABgAEUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0vINOAFN2expQn1r61nz1yQCjb7Vn6tqV + tpVsZ72ZYo+m5jxXDXXxV063nkgaGSTIISWBwwJxxx1H61jUrQp/EzWnSnU+FHpB2jGeMnFO + Cqe9eJ/8Ldni861mhjuDxsmHykD8uSPwrqPDHxGsJ/tB1SRLXLFlLE46cj8/51jHF05uyZpL + C1Iq7R6MEHY07yz6g1V02+g1C0iubVleKQblIIPH4Vb/AANdFznEEbe1FPBopXDQM/7I/Ksn + xTr9p4c0WfUbtMpGMBR1Zj0Fdm1nJ/s/lXg37Tc88A0mxyBE4aVlHcjgf1rlniEoto6YUG5J + M8q8T+K9Q8T6oZrp28ok+XEpOEHpiqFvYmWdRISDkEN/iKueH7ELB5zjLv0z2Fb9vbKzrkDN + ePUblqz2qNLRWKM2iPdO4CKZkmKhlGPlNJceGNRSWWRImZVbr1/z1r13wZYQsV+0xgsccnnN + evaHodlf2rDy1jAH3l71xOq+blR6Dw0Yx557Hyt4b8Qav4aut9vO4tFYCW2kOQfUAZGPwr6P + 8PaxYa1pcF7ajMUi/ke4/OvMfi94Xj0fVVnEe9LolDgkZI6YNS/AeNzc6nEJG+z7UcBsjDZI + PHTPb3xXp4LEuXuSPIx2FUffgeu/6P6fpRUv2Vf7y0V6PMu55dpdjRMje9fPv7TULyapoznO + 0wuv4hv/AK9fRWwHrXz7+0Pdre6/Y6dDGS1qgZ2B5O/nAH0FccpK1jvhCTdzzmGDZbwJF2QZ + rU0m0E1xsmlCccGsC+vG3/uvMHoqL0+tSadqpRsTOR/v8EVxVH2PVotLRnrPhqSO2u4YxIee + CQ2RXuGjW6/2aJBkKOeOK+W7fURaoLlXVu4O/ivUPhz8UIZmWwv0GCQqur5Ga42rO53TblDl + jubfxlQXelWnlLmRJfkGO+K5b4MWbR32qlVKwgKpU9jk/wCBrovi3ex29np1z1heUnK/Stf4 + Z6csehG7UhvtTb8+w4/xrpwTandnnY5L2fKjeEQ9DRWkIT7UV6ftTx/ZDS64614B8Yof+K8k + lA4+zI2fwx/jXum4eteYfGjT4xDa6orHzP8Aj3ZccEcsD/Os6kbRudFGd527nhk8bKxCgkfX + FGm2f2jVLTOAGkC4BzznqaWeR55mUD5VPPvU9jcGGWPcoXaQQwFcLnoz2YQjzJM9l+IngKPU + JdNltGhhMlqsYB43uBnNcno3gESXKxNcw/aUOdlspaQEfpXRa34guta8BNsREWFowkm7LhfU + enOKofDfxzcWV+ljfFSWbAkIwxPue9cvM1HyO72cU+7O5vtHEuhWNv4huTcpHKnJjwIxjHOO + Wx3JroPAT3S6I6Xjbtk8iRkDA2BsDHtxVm+tYtVt2EmAGAcfXtVy0UW1ukSY2qPzrTAxlOXN + 0RwY+tCFHk+03+RoeaKKq7/pRXq8h4fOZpmA6sB+Ncn8RoodU8M3MCSxm4ixMi7hkkdR+RNc + w92zc7VH4/8A164P4n+J5tMsEs7SXZc3IO5l6qn/ANes5YpTXLY2WHcHzXOX1C1NwHETFJMZ + BU45q3pJhuQkU0MouMAHyznJ+hqGCT9zEwOTtB/SrFok1zdAWwZpCeAByK4mrI9Wk+aWrOvE + WvJp0lnoVrezmRdux0Qrj3NYWkafeya/Cl4Qs8ThpNq4Cc816x4BtdVsbP8A09QqMPlzycVa + g8Pwza1LPtXDv5kpHfHQVxTqpXR6E6eqadzXTxJZWiLHNvaZF52gHGe3Wl/4TC1P3IZj9cCv + n/wH4guP7Y1S2eVyks8kgBY/e3H3ruGvJW43j8Tn+denRqqlBRR4Nan7Wbmz0N/GUSnC2sh/ + 4F/9aivOzcPnLOPyH+FFafWvP8DL6uiJ3mCktwByTmvD/G2p/wBp6/cTI++NSEQ+wrb8TfEC + 61APbacv2a1bKsx5dh/SuFdt0n41zRTWrNZyvojtrKctaxYPIUCtGx1N7SUOoZW9R3rndNlx + EvpWvC2eozUyOqnJ7o9b8J+Mb/UhDYJEzY/i9K6rxt4kh8I+Fp7l2BvJEKwpnkuR1+g615t4 + E1y10mOea42xhACSeuPavPfiX4sn8Sak80hKwj5Yo88Kv+Ncfseefkdsq/s6fM3dlbwtdm1n + F1je5fcw9eSTXqtld2t9GjW8qkkZK5G4fhXjug7xaBiOrfLV2+uDHcjyHKsgxlTjmu5xujyl + I9hxxzn8xRXllt4p1SGIJ9p3Af3xk/nRU8jHzI//2Q== + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090526T042241Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf new file mode 100755 index 000000000..2cf757e96 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf @@ -0,0 +1,55 @@ +BEGIN:VCARD +VERSION:2.1 +N:Schindl;Tom +FN:Tom Schindl +ORG:BestSolution.at Systemhaus Gmbh +TEL;WORK;VOICE:0676 323 21 47 +TEL;CELL;VOICE:0676 323 21 47 +TEL;PREF:0676 323 21 47 +ADR;WORK;PREF;CHARSET=Windows-1252:;;Eduard-Bodemgasse 6;Innsbruck;;6020;Österreich +LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Eduard-Bodemgasse 6=0D=0A= +6020 Innsbruck=0D=0A= +=D6sterreich +X-MS-OL-DEFAULT-POSTAL-ADDRESS:2 +EMAIL;PREF;INTERNET:tom.schindl@bestsolution.at +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABTAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6ppHYKMmhjtGa8Y+M/wAQp7C1l0vQXH2l + srNcbsBB3VT6/wAqmUlFXY0rnW+LPiRoeheZE93FLcrwYkbp9T2rzzUPjaXdks7SMdlZ3JFf + PKrdSXMjXUbSsW3FtxOalXbPMAlwseHKkdSBXPKcnszRRXU9yHxpmjj/ANJggL/9M92B9a6z + wn8SotXVfN2RyHptOQa+cLfR7VC00ySHP3drfzrT0e7XT7jzY8ptKsno3PSs1Wae9ynTR9f6 + XqyXAGGBrcRw65FfO/grxmXuBBODHKDjBOa9p0PVFuIl+auyMlJXRi01udDRSI25c0VQjN8R + 3K2uj3czsVSOJnJBxwBmvkyOzufE2pTX0jHYznb6KM19QfEVXk8IaskX32tnA/KvDfDlsLTR + bZIhklck+pJrlxMrWOrCxUpanJXHg6VrrO+RgR8p7D6+tNbwn5SyOYxI/I2465r0FvNOBt5p + fsk4OcAmuKU5W3O9U49UcPDpcWm2iBQBJtJ2dR9K5zUmjZ1QgKu4Er34PUf57V6dqdh5Y8wx + k8cZ9a8t8TQlr+F0wuHO76VFJ80tTCtBJaFf+0Ge7ivIpStxbSbQOnmJ6GvoHwHrJlEYLdcV + 806kyRqrDG8yYOPTpXsvw3ui/wBnbJOVU8/QV6VBWOGofSOnS+ZCD7UVS8PvugX6UV0GY/xJ + b/atKuYAcGSNkz9RXzNc6/daNaJZfZADBlHllcICQTnFfU18u6Bq+dvHnhW31XUrpyAZSzoQ + WOAM1hXS0udOGvd8pkReI3mtllUA4HJQ7gPyrktT8V6kbphDeFFGTtjTccDvXc+CPCdrpFhq + A4YOMYJ4FYq+FdOuL9mikVHHUex9vSua8FKzPRtNx8zL8NeLjdtsluzcoTgh1KsPpWv4k0qK + eye4iGWCliPWuh07R9O0yEKIo3I5DFRgfgKivZEcMigbTkVzVLKV46CUHa0jw8xSm8X5WeIN + lgOuO9ey+AgiTQeSW8oqpXd1xjvXPHw3HHfpPE5VUQvKD0K5Oa6nwHCz3EbBcKMAAdgK9ChL + nd0cVekqcF3Z774bP7hPpRTvDsZWBM+lFdJxmtcjMLV8/wDxCuZrDWbuGMHc8mV/GvoSQZQi + vGPi7ozPdw3icA4QsOx7VlWV43OjDT5JnnGqeIL3Sl+zQpHuKA+of61mS397fLFd3c0a3KAq + qxrtAHpS+ILSSNf9Ju3YgcMFxWTaaW14FX7TcqueqtXK1FLmPUu7Xubdvqs86r15rUhl2Rhp + DzWO6RWBSEZwoySe5qlNqnmThFJ2g84rnmuf4SXLTU1L68urq7+wRjbAACxHVs84+len+AtH + KKhK1wnhOwe+vvOdfvHj2Fe9eF9OEMKcV6VGHJBI8mrUc5XOg06HyoQPairSjAwKK1MxawPE + umpfWcsUi7lYYNb9MmjDoQaAPmDxXJHpF61rfQjKk7Sw+8PWuVvvFVpBGViRU+gr6S8XeFbP + V4Gju7aOZe25c4+leW6h8LdOWQmO0AHuSa53h0zsWLaVjxm41e41GbESklugFdL4Z0CeaRWm + UlienpXoem/D+G3bEUCJ9BXc6B4USAqSg/KrhSUTGdaUtCr4L0DyVQla9RsYRFEABVbTbBbd + AABxWmBgcVqYhRRRQAUUUUARTqCORWbPDGTygoooAjigiz9wVo28ajoooooAtDiiiigAoooo + A//Z + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090528T104730Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf new file mode 100755 index 000000000..7989a04c5 --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf @@ -0,0 +1,18 @@ +BEGIN:VCARD +VERSION:2.1 +N:Sommer;Torsten +FN:Torsten Sommer +ORG:TESIS DYNAware GmbH +TITLE:Dipl.-Ing. +TEL;WORK;VOICE:+49 89 747377-7438 +TEL;WORK;FAX:+49 89 747377 99 +TEL;PREF:+49 89 747377-7438 +ADR;WORK:;;Baierbrunner Str. 15;München;;D-81379;Germany +LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Baierbrunner Str. 15=0D=0AM=FCnchen D-81379=0D=0AGermany +URL;HOME:http://www.tesis-dynaware.de/ +URL;WORK:http://www.tesis-dynaware.de/ +EMAIL;PREF;INTERNET:torsten.sommer@tesis.de +PHOTO;TYPE=JPEG;ENCODING=BASE64: + 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de/+ttEoL9n5v0p1XLJIHds4/kj5B9R+rP8Azygfs31fs/8Awv8ANf8Ag3t/zV13/Zt/3R+h5/T/ANf+tLwBJDr0Xv8A/9n/7SeYUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAccAgAAAm9sADhCSU0EJQAAAAAAEHUqq0lMt8MP2eTQze+bRII4QklNA+oAAAAAGA88P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+UE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCQkJPHJlYWw+NzgzPC9yZWFsPgoJCQkJCQk8cmVhbD41NTk8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPjgyNDwvcmVhbD4KCQkJCQkJPHJlYWw+NTc3PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJCQk8cmVhbD43ODM8L3JlYWw+CgkJCQkJCTxyZWFsPjU1OTwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk+CgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0PgoAOEJJTQPtAAAAAAAQAEf//wACAAIAR///AAIAAjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANVAAAABgAAAAAAAAAAAAAAZAAAAFoAAAAQAHAAcgBvAHQAcgBhAGkAdAAtADEANAAwAHgAMQA4ADAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFoAAABkAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAABkAAAAAFJnaHRsb25nAAAAWgAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25n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OmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhhcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2giIHhhcDpDcmVhdGVEYXRlPSIyMDEwLTA2LTE1VDE5OjA5OjEyKzAyOjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAxMi0xMS0xMVQyMzozOTo1NyswMTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAxMi0xMS0xMVQyMzozOTo1NyswMTowMCIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDo5MEExOTc4MTQzN0FERjExOTExMkZGMDI2OUVFQjI1MSIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDowN0Y4MDgyN0VCMkRFMjExOERDQ0YzQUQ4NDRFQ0Y0NyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiBwaG90b3Nob3A6SGlzdG9yeT0iIiB0aWZmOk9yaWVudGF0aW9uPSIxIiB0aWZmOlhSZXNvbHV0aW9uPSIyODM0NjUvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjI4MzQ2NS8xMDAwMCIgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMyIgdGlmZjpOYXRpdmVEaWdlc3Q9IjI1NiwyNTcsMjU4LDI1OSwyNjIsMjc0LDI3NywyODQsNTMwLDUzMSwyODIsMjgzLDI5NiwzMDEsMzE4LDMxOSw1MjksNTMyLDMwNiwyNzAsMjcxLDI3MiwzMDUsMzE1LDMzNDMyOzI2MjExOTRDNEE1NjY5MTUwRjZDRjRDNDA0NUI3RTJFIiBleGlmOlBpeGVsWERpbWVuc2lvbj0iOTAiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMDAiIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDs4RTlEMkMwMjUwM0M1NDQ0MzlEQUQzNTEyNUNFNkVCMCI+IDx4YXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOjhEQTE5NzgxNDM3QURGMTE5MTEyRkYwMjY5RUVCMjUxIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOjhEQTE5NzgxNDM3QURGMTE5MTEyRkYwMjY5RUVCMjUxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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 +REV:20121111T231052Z +END:VCARD diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf new file mode 100755 index 000000000..e417f325a --- /dev/null +++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf @@ -0,0 +1,68 @@ +BEGIN:VCARD +VERSION:2.1 +N;LANGUAGE=en-us:YANG;Yves +FN:Yves YANG +ORG:Soyatec +TITLE:XWT +NOTE:Modeling & Declarative UI +TEL;WORK;VOICE:+33 (1) 60130667 +TEL;CELL;VOICE:+33 (6) 20743945 +TEL;WORK;FAX:+33 (9) 58070667 +ADR;WORK;PREF;CHARSET=Windows-1252:;;1, allée des Monégasques;Massy;;91300;France +LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:1, all=E9e des Mon=E9gasques=0D=0A= +91300 Massy +X-MS-OL-DEFAULT-POSTAL-ADDRESS:2 +URL;WORK:http://www.soyatec.com +EMAIL;PREF;INTERNET:yves.yang@soyatec.com +PHOTO;TYPE=JPEG;ENCODING=BASE64: + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY + GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa + KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR + CABgAEUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA + AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK + FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG + h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl + 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA + AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk + NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk + 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwBPDXiP4eQ+GdJjvNO0x7pLSFZS2nqxLhBu + JO3k5zzV2TxX8NR00jTT9NLT/wCJrwewGbKD/rmv8qkmcRjnO70quULntUni/wCHC5xodiR7 + aZH/AIVl33jrwGgxaeGbGRj3bT4gB+leNTSM3U8elR5pcpaR6wvj7wmj/vPCWmyJ6pZxKf1B + qwnjzwR28JW+fQ2cP+FePU4cHijlHynsLePPBm4BPBtofXNrAP6V1Hw+vfC/jDULu2i8J6bb + C3iEpZ7aJt2TjHC189Ruc89a9h/Z3mVdf1VWOC1qoH/fVDVhWIv2g9F0rTjoP2DTLG18z7Rv + 8m3RN2PLxnA56n86Ku/tJHP/AAjv/bx/7SoqRM4HTbC0t9Aiup2YAW6Pz6lelcq0hkkZznce + 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 + +X-MS-OL-DESIGN;CHARSET=utf-8: +REV:20090602T075537Z +END:VCARD -- cgit v1.2.3