// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.plugins.main.core;
import graphtea.graph.atributeset.GraphAttrSet;
import graphtea.graph.graph.Edge;
import graphtea.graph.graph.GraphModel;
import graphtea.graph.graph.SubGraph;
import graphtea.graph.graph.Vertex;
import graphtea.graph.ui.GHTMLPageComponent;
import graphtea.platform.core.BlackBoard;
import graphtea.platform.core.exception.ExceptionHandler;
import graphtea.platform.plugin.PluginMethods;
import graphtea.plugins.main.ccp.Copy;
import graphtea.plugins.main.ccp.Cut;
import graphtea.plugins.main.core.actions.AddTab;
import graphtea.plugins.main.core.actions.CloseTab;
import graphtea.plugins.main.core.actions.ResetGraph;
import graphtea.plugins.main.core.actions.StatusBarMessage;
import graphtea.plugins.main.core.actions.edge.AddEdge;
import graphtea.plugins.main.core.actions.graph.ClearGraph;
import graphtea.plugins.main.core.actions.vertex.AddVertex;
import graphtea.plugins.main.core.actions.vertex.DeleteVertex;
import javax.swing.*;
import java.net.MalformedURLException;
import java.net.URL;
/**
* @author azin azadi
*/
public class CorePluginMethods implements PluginMethods {
BlackBoard blackboard;
//************************ E D G E ********************************
public CorePluginMethods(BlackBoard blackboard) {
this.blackboard = blackboard;
}
/**
* adds e to g
*/
public void addEdge(GraphModel g, Edge e) {
AddEdge.doJob(g, e.source, e.target);
}
/**
* adds e to current editing graph
*/
public void addEdge(Edge e) {
AddEdge.doJob(getGraph(), e.source, e.target);
}
/**
* create and adds a new edge from v1, v2 to g
*/
public void addEdge(GraphModel g, Vertex v1, Vertex v2) {
AddEdge.doJob(g, v1, v2);
}
public void addEdge(Vertex v1, Vertex v2) {
AddEdge.doJob(getGraph(), v1, v2);
}
public void deleteEdge(GraphModel g, Edge e) {
g.removeEdge(e);
}
//***************** G R A P H *************************
/**
* removes all edges and vertices of g
*/
public void clearGraph(GraphModel g) {
ClearGraph.destroyGraph(g);
}
/**
* removes all edges and vertices of current graph
*/
public void clearGraph() {
ClearGraph.destroyGraph(getGraph());
}
//**************** V E R T E X ***************************
/**
* adds a new vertex to a random point of the graph and returns it
*/
public Vertex addVertex(GraphModel g) {
return AddVertex.addVertexToRandomPosition(g);
}
/**
* add a new vertex to a random position of the current graph and returns it
*/
public Vertex addVertex() {
return AddVertex.addVertexToRandomPosition(getGraph());
}
/**
* adds a vertex to the given point of graph
*/
public Vertex addVertex(GraphModel g, int x, int y) {
return AddVertex.doJob(g, x, y);
}
/**
* adds a vertex to the given point of current graph
*/
public Vertex addVertex(int x, int y) {
return AddVertex.doJob(getGraph(), x, y);
}
/**
* deletes a vertex from it's coressponding graph
*/
public void deleteVertex(GraphModel g, Vertex v) {
DeleteVertex.doJob(g, v);
}
//********************* TABBED EDITING *******************************
/**
* @see graphtea.plugins.main.core.actions.AddTab#addTab(graphtea.platform.core.BlackBoard)
*/
public void addTab() {
AddTab.addTab(blackboard);
}
/**
* @see graphtea.plugins.main.core.actions.AddTab#addTabNoGUI(boolean, graphtea.platform.core.BlackBoard)
*/
public void addTabNoGUI(boolean isdirected , BlackBoard blackboard) {
AddTab.addTabNoGUI(isdirected, blackboard);
}
/**
* @see graphtea.plugins.main.core.actions.AddTab#displayGraph(graphtea.graph.graph.GraphModel,graphtea.platform.core.BlackBoard)
*/
public void showGraph(GraphModel g) {
AddTab.displayGraph(g, blackboard);
}
/**
* @see graphtea.plugins.main.core.actions.CloseTab#dojob(graphtea.platform.core.BlackBoard)
*/
public void closeTab() {
CloseTab.dojob(blackboard);
}
//*****************************
/**
* @see graphtea.plugins.main.core.actions.ResetGraph#ResetGraph(graphtea.platform.core.BlackBoard)
*/
public void resetGraph() {
ResetGraph.resetGraph(getGraph());
}
/**
* @see graphtea.plugins.main.core.actions.ResetGraph#ResetGraph(graphtea.platform.core.BlackBoard)
*/
public void resetGraph(GraphModel g) {
ResetGraph.resetGraph(g);
}
/**
* @see graphtea.plugins.main.core.actions.StatusBarMessage#setMessage(graphtea.platform.core.BlackBoard,String)
*/
public void showStatusBarMessage(String s) {
StatusBarMessage.setMessage(blackboard, s);
}
/**
* @see graphtea.plugins.main.core.actions.StatusBarMessage#showQuickMessage(graphtea.platform.core.BlackBoard,String)
*/
public void showQuickMessageInStatusbar(String message) {
StatusBarMessage.showQuickMessage(blackboard, message);
}
//****************** Cut Copy Paste ************************
/**
* @see graphtea.plugins.main.ccp.Copy#copy(graphtea.graph.graph.SubGraph)
*/
public void copyToClipboard(SubGraph selection) {
Copy.copy(selection);
}
public void pasteFromClipboard() {
//Todo:Azin jaan een ye giri daare ke behet migam hala:D (rouzbeh)
}
public void cutToClipboard(SubGraph selection) {
Cut.cut(selection, getGraph(), blackboard);
}
private GraphModel getGraph() {
return blackboard.getData(GraphAttrSet.name);
}
public static GraphModel getGraph(BlackBoard blackboard) {
return blackboard.getData(GraphAttrSet.name);
}
//***************************
/**
* shows the givve page in a new dialog,
* Note that the used html viewer is GHTMLPageComponent, which is internally
* uses a JEditorPane, but the blackboard in dialog will be a new blackboard,
* (in the case of you want to use "bsh:" feature of GHTMLPageComponent,
* for this use showPageInDialog(URL, blackboard).
*/
public static void showPageInDialog(String pageUrl, String title) {
BlackBoard blackboard = new BlackBoard();
URL page = null;
try {
page = new URL(pageUrl);
} catch (MalformedURLException e) {
ExceptionHandler.catchException(e);
}
if (page != null)
showPageInDialog(title, blackboard, page);
// f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* shows the given page in a new dialog,
* Note that the used html viewer is GHTMLPageComponent, which is internally
* uses a JEditorPane,
*/
private static void showPageInDialog(String title, BlackBoard blackboard, URL page) {
JFrame f = new JFrame(title);
GHTMLPageComponent browserPane = new GHTMLPageComponent(blackboard);
browserPane.setPage(page);
f.add(new JScrollPane(browserPane));
f.setVisible(true);
f.setSize(500, 500);
f.validate();
f.setResizable(false);
}
}