5034
Comment:
|
8114
|
Deletions are marked like this. | Additions are marked like this. |
Line 40: | Line 40: |
It takes three steps to add a tabbed panel to the control panel. {{{ #!java //1. Define a CytoPanel class public class MyCytoPanel extends JPanel implements CytoPanelComponent { ... @Override public CytoPanelName getCytoPanelName() { return CytoPanelName.WEST; } ... } // 2. Create an instance of MyCytoPanel MyCytoPanel myPanel = new MyPanel(); //3. Register myPanel as a service registerService(bc,myCytoPanel,CytoPanelComponent.class, new Properties()); }}} Download a sample plugin, here. |
|
Line 43: | Line 65: |
{{{ #!java // Define a CyAction class public class AddImageIconAction extends AbstractCyAction { public AddImageIconAction(CySwingApplication desktopApp){ ... ImageIcon icon = new ImageIcon(getClass().getResource("/images/tiger.jpg")); putValue(LARGE_ICON_KEY, icon); ... } public boolean isInToolBar() { return true; } ... } }}} {{{ #!java // Register the CyAction as service AddImageIconAction addImageIconAction = new AddImageIconAction(cytoscapeDesktopService); registerService(bc,addImageIconAction,CyAction.class, new Properties()); }}} |
|
Line 45: | Line 95: |
{{{ #!java // Define a CyAction class public class Sample04 extends AbstractCyAction { ... public Sample04(CySwingApplication desktopApp){ // Add a sub-menu item -- Apps->Sample04->sample04 super("sample04..."); setPreferredMenu("Apps.Sample04"); //Specify the menuGravity value to put the menuItem in the desired place setMenuGravity(2.0f); ... } }}} {{{ #!java // Register the CyAction as service Sample04 Sample04Action = new Sample04(cytoscapeDesktopService); registerService(bc,Sample04Action,CyAction.class, new Properties()); }}} |
|
Line 47: | Line 120: |
{{{ #!java }}} |
|
Line 48: | Line 126: |
{{{ #!java }}} |
|
Line 50: | Line 132: |
{{{ #!java }}} |
|
Line 52: | Line 138: |
{{{ #!java }}} |
|
Line 54: | Line 144: |
{{{ #!java }}} |
|
Line 56: | Line 150: |
{{{ #!java }}} |
|
Line 59: | Line 157: |
{{{ #!java // Define a task public class ZoomTask extends AbstractNetworkViewTask { ... ZoomTask(CyNetworkView v) { super(v); ... } public void run(TaskMonitor tm) { ... // Get the scale and adjust it double newScale = view.getVisualProperty(NETWORK_SCALE_FACTOR).doubleValue() * scale; view.setVisualProperty(NETWORK_SCALE_FACTOR, newScale); view.updateView(); } } ... } }}} {{{ #!java // Define taskFactory and pass in the view as parameter to the task public class Sample10TaskFactory extends AbstractNetworkViewTaskFactory { .... public TaskIterator createTaskIterator() { ... return new TaskIterator(new ZoomTask(this.view)); .... } } }}} {{{ #!java // Register the task factory as service registerService(bc,sample10TaskFactory,TaskFactory.class, sample10TaskFactoryProps); }}} |
|
Line 60: | Line 201: |
{{{ #!java }}} |
|
Line 63: | Line 208: |
{{{ #!java }}} |
|
Line 65: | Line 214: |
{{{ #!java }}} |
|
Line 68: | Line 221: |
{{{ #!java }}} |
|
Line 70: | Line 227: |
{{{ #!java }}} |
|
Line 72: | Line 233: |
{{{ #!java }}} |
|
Line 74: | Line 239: |
{{{ #!java }}} |
|
Line 76: | Line 245: |
{{{ #!java }}} |
|
Line 78: | Line 251: |
{{{ #!java }}} |
|
Line 81: | Line 258: |
{{{ #!java }}} |
|
Line 83: | Line 264: |
{{{ #!java }}} |
|
Line 87: | Line 272: |
{{{ #!java }}} |
|
Line 90: | Line 279: |
{{{ #!java }}} |
|
Line 93: | Line 286: |
{{{ #!java }}} |
Contents
- About the cookbook
- How to use the cookbook?
-
The list of app examples in the cookbook
- Introduction
- How to add a tabbed Panel to Control panel?
- How to add an image icon (menu item) to the toolbar?
- How to create a submenu?
- How to create, modify, and destroy a network, nodes, and edges?
- How to create, modify, and destroy a network view?
- How to save/restore app states?
- How to determine which nodes are currently selected on a network?
- How to handle events from a network (and discuss each event type)?
- How to change the background color of a view?
- How to zoom a network view?
- How to load attribute data?
- How to remove attributes?
- How to use a web service client?
- How to write a web service client?
- How to use the VizMapper programmatically?
- How to apply a continuous color gradient to nodes according to their degree?
- How to load a visual properties file?
- How to write a layout algorithm?
- How to write a Group Viewer?
- How to add components to the node view, edge view, and attribute browser context menus?
- How to save/restore plugin states?
- How to use the Cytoscape task monitor to show the progress of my job?
- How to add new attribute functions via a Cytoscape plug-in?
- How to add plug-in specific help to the Cytoscape main help system?
- Trouble shooting
- Recommendations
- App Porting Hints
- Questions, suggestions
About the cookbook
To help app developers to develop their own app, the Cytoscape developer team developed the cookbook, a collection of small apps. The cookbook could be used to
- get your feet wet
- find a template project to extend
- find out how to do something in Cytoscape.
How to use the cookbook?
SVN repository: http://chianti.ucsd.edu/svn/core3/support/trunk/samples/
Steps:
- Check out sample project from SVN repository with the above URL
- Compile with “mvn clean install”
- Copy the jar in the project target directory to Cytoscape installation: bundles/apps
- Start Cytoscape 3.0
The list of app examples in the cookbook
The list of sample apps is basically the same as in the cookbook for Cytoscape 2.X. They are mostly Cytoscape Bundle apps, but also include a few Simple apps. Some of them are,
Introduction
This tutorial will show some code snippets about how to use Cytoscape APIs on plugin development. Each feature is included in a sample plugin, which can serve as a starting point or template for new plugin developers. The code snippets can also be used as reference for experienced developers.
Cytoscape plugin is usually packaged in a jar file and deployed to the plugins directory of Cytoscape. When Cytoscape starts up and initializes, its plugin manager will look up all the plugins in plugins directory. A plugin should have following three components.
A class, which extends CytoscapePlugin. This is the entry point to Cytoscape.
A manifest file, explicitly list the class, which extended CytoscapePlugin class
A plugin.props file, which list the information about the plugin, such as plugin name, author, release date and more. Although this file is not absolutely required, it is recommended to have one, since plugin manager will need the information to handle the plugin properly. See the page at http://www.cytoscape.org/cgi-bin/moin.cgi/Cytoscape_Plugin_Tutorial for detail about the definition of a plugin.props.
If plugin developer will share and publish their plugins, they are encouraged to submit their plugins to Cytoscape plugin website at http://cytoscape.org/plugins/index.php .
How to add a tabbed Panel to Control panel?
It takes three steps to add a tabbed panel to the control panel.
1 //1. Define a CytoPanel class
2 public class MyCytoPanel extends JPanel implements CytoPanelComponent {
3
4 ...
5 @Override
6 public CytoPanelName getCytoPanelName() {
7 return CytoPanelName.WEST;
8 }
9 ...
10 }
11
12 // 2. Create an instance of MyCytoPanel
13 MyCytoPanel myPanel = new MyPanel();
14
15 //3. Register myPanel as a service
16 registerService(bc,myCytoPanel,CytoPanelComponent.class, new Properties());
17
Download a sample plugin, here.
How to add an image icon (menu item) to the toolbar?
1 // Define a CyAction class
2 public class AddImageIconAction extends AbstractCyAction {
3
4 public AddImageIconAction(CySwingApplication desktopApp){
5 ...
6 ImageIcon icon = new ImageIcon(getClass().getResource("/images/tiger.jpg"));
7
8 putValue(LARGE_ICON_KEY, icon);
9 ...
10 }
11
12 public boolean isInToolBar() {
13 return true;
14 }
15 ...
16 }
17
1 // Register the CyAction as service
2 AddImageIconAction addImageIconAction = new AddImageIconAction(cytoscapeDesktopService);
3 registerService(bc,addImageIconAction,CyAction.class, new Properties());
4
How to create a submenu?
1 // Define a CyAction class
2 public class Sample04 extends AbstractCyAction {
3 ...
4 public Sample04(CySwingApplication desktopApp){
5 // Add a sub-menu item -- Apps->Sample04->sample04
6 super("sample04...");
7 setPreferredMenu("Apps.Sample04");
8 //Specify the menuGravity value to put the menuItem in the desired place
9 setMenuGravity(2.0f);
10 ...
11 }
12
1 // Register the CyAction as service
2 Sample04 Sample04Action = new Sample04(cytoscapeDesktopService);
3 registerService(bc,Sample04Action,CyAction.class, new Properties());
4
How to create, modify, and destroy a network, nodes, and edges?
1
2
How to create, modify, and destroy a network view?
1
2
How to save/restore app states?
1
2
How to determine which nodes are currently selected on a network?
1
2
How to handle events from a network (and discuss each event type)?
1
2
How to change the background color of a view?
1
2
How to zoom a network view?
1 // Define a task
2 public class ZoomTask extends AbstractNetworkViewTask {
3 ...
4 ZoomTask(CyNetworkView v) {
5 super(v);
6 ...
7 }
8
9 public void run(TaskMonitor tm) {
10 ...
11 // Get the scale and adjust it
12 double newScale = view.getVisualProperty(NETWORK_SCALE_FACTOR).doubleValue() * scale;
13 view.setVisualProperty(NETWORK_SCALE_FACTOR, newScale);
14
15 view.updateView();
16 }
17 }
18 ...
19 }
20
1 // Define taskFactory and pass in the view as parameter to the task
2 public class Sample10TaskFactory extends AbstractNetworkViewTaskFactory {
3 ....
4 public TaskIterator createTaskIterator() {
5 ...
6 return new TaskIterator(new ZoomTask(this.view));
7 ....
8 }
9 }
10
1 // Register the task factory as service
2 registerService(bc,sample10TaskFactory,TaskFactory.class, sample10TaskFactoryProps);
3
How to load attribute data?
1
2
How to remove attributes?
1
2
How to use a web service client?
1
2
How to write a web service client?
1
2
How to use the VizMapper programmatically?
1
2
How to apply a continuous color gradient to nodes according to their degree?
1
2
How to load a visual properties file?
1
2
How to write a layout algorithm?
1
2
How to write a Group Viewer?
1
2
How to add components to the node view, edge view, and attribute browser context menus?
1
2
How to save/restore plugin states?
1
2
How to use the Cytoscape task monitor to show the progress of my job?
1
2
How to add new attribute functions via a Cytoscape plug-in?
1
2
How to add plug-in specific help to the Cytoscape main help system?
1
2
Trouble shooting
If you get compile error,
Check the version number of parent POM, the latest is at Cytoscape repository
If this is a dependency problem, check the version number of depended bundle at Cytoscape repository
Recommendations
- If you’re a beginner you probably want to use the Simple app type. see example02a, example03a
- If you want to port as quickly as possible, again, go with the Simple app type.
- If you want to publish an API you must use the Bundle app type
- If you experience version conflicts or anticipate future version conflicts, again you must use the Bundle app type.
- If you are in doubt, you should probably use the Simple app type. You can always port it to the Bundle app type later should that become necessary. Both styles are supported and will be until (at least) version 4.0.
App Porting Hints
How to
- get current network --- see sample app 5
- get attributes --- see sample app 11
- add a menu item --- see sample app 3
Questions, suggestions
Please send e-mail to cytoscape help desk or discussion group