{\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
}\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
[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
[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