]> granicus.if.org Git - graphviz/commitdiff
export dialog with selectable format
authorglenlow <devnull@localhost>
Sat, 28 Jun 2008 07:19:08 +0000 (07:19 +0000)
committerglenlow <devnull@localhost>
Sat, 28 Jun 2008 07:19:08 +0000 (07:19 +0000)
windows/Graph.cs

index 07f440b1b73a6064ede4abc8486ea8af47d6c2f2..dd46d3093969ac389bbb21b9a9e643e698d28f17 100755 (executable)
@@ -24,12 +24,36 @@ namespace Graphviz
 {\r
        public class Graph : IDisposable\r
        {\r
+               public enum API\r
+               {\r
+                       Render = 0,\r
+                       Layout = 1,\r
+                       TextLayout = 2,\r
+                       Device = 3,\r
+                       LoadImage = 4\r
+               }\r
+               \r
                public class Exception : ApplicationException\r
                {\r
                        public Exception(string message): base(message)\r
                        {\r
                        }\r
                }\r
+\r
+               public static IList<string> GetPlugins(API api, bool showFullPath)\r
+               {\r
+                       SortedList<string, string> plugins = new SortedList<string, string>();\r
+                       IntPtr pluginList = gvplugin_list(_context, api, showFullPath ? ":" : "");\r
+                       foreach (string nextPlugin in Marshal.PtrToStringAnsi(pluginList).Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries))\r
+                       {\r
+                               int lastColon = nextPlugin.LastIndexOf(':');\r
+                               string plugin = nextPlugin.Substring(0, lastColon == -1 ? nextPlugin.Length : lastColon);\r
+                               plugins[plugin] = plugin;\r
+                       }\r
+                       \r
+                       free(pluginList);\r
+                       return plugins.Keys;\r
+               }\r
                \r
                public event EventHandler Changed;\r
                \r
@@ -91,6 +115,12 @@ namespace Graphviz
                        }\r
                }\r
                \r
+               public void Render(string format, string filename)\r
+               {\r
+                       if (gvRenderFilename(_context, _graph, format, filename) != 0)\r
+                               throw new Exception("bad render");\r
+               }\r
+               \r
                public void NoteChanged(bool relayout)\r
                {\r
                        if (relayout) {\r
@@ -157,6 +187,9 @@ namespace Graphviz
                [DllImport("libgvc-4.dll")]\r
                private static extern int gvLayout(IntPtr context, IntPtr graph, string engine);\r
 \r
+               [DllImport("libgvc-4.dll")]\r
+               private static extern IntPtr gvplugin_list(IntPtr context, API api, string str);\r
+\r
                [DllImport("libgvc-4.dll")]\r
                private static extern int gvRenderFilename(IntPtr context, IntPtr graph, string format, string filename);\r
                \r
@@ -172,6 +205,9 @@ namespace Graphviz
                [DllImport("msvcrt.dll", SetLastError = true)]\r
                private static extern unsafe void free(byte* pointer);\r
 \r
+               [DllImport("msvcrt.dll", SetLastError = true)]\r
+               private static extern void free(IntPtr pointer);\r
+\r
                private static readonly IntPtr _context = gvContext();\r
                \r
                private readonly IntPtr _graph;\r