1 module app;
2 
3 import dlangui;
4 import std.stdio;
5 import std.conv;
6 import dlangide.ui.frame;
7 import dlangide.ui.commands;
8 import dlangide.workspace.workspace;
9 
10 
11 mixin APP_ENTRY_POINT;
12 
13 /// entry point for dlangui based application
14 extern (C) int UIAppMain(string[] args) {
15 
16 
17     // embed non-standard resources listed in views/resources.list into executable
18     embeddedResourceList.addResources(embedResourcesFromList!("resources.list")());
19 
20  	Platform.instance.uiTheme = "ide_theme_default";
21 
22     // you can override default hinting mode here
23     //FontManager.hintingMode = HintingMode.Light;
24     //FontManager.hintingMode = HintingMode.AutoHint;
25     FontManager.hintingMode = HintingMode.Normal;
26     //FontManager.hintingMode = HintingMode.Disabled;
27     // you can override antialiasing setting here
28     FontManager.minAnitialiasedFontSize = 0;
29     /// set font gamma (1.0 is neutral, < 1.0 makes glyphs lighter, >1.0 makes glyphs bolder)
30     FontManager.fontGamma = 0.8;
31 	version (USE_OPENGL) {
32 		// you can turn on subpixel font rendering (ClearType) here
33 		FontManager.subpixelRenderingMode = SubpixelRenderingMode.None; //
34 		FontManager.fontGamma = 0.8;
35 		FontManager.hintingMode = HintingMode.AutoHint;
36 	} else {
37         version (USE_FREETYPE) {
38             // you can turn on subpixel font rendering (ClearType) here
39             FontManager.fontGamma = 0.8;
40 		    //FontManager.subpixelRenderingMode = SubpixelRenderingMode.BGR; //SubpixelRenderingMode.None; //
41             FontManager.hintingMode = HintingMode.AutoHint;
42         }
43 	}
44 
45     //import ddc.lexer.tokenizer;
46     //runTokenizerTest();
47     debug(DebugInfo) {
48         version(USE_MAGO) {
49             import ddebug.windows.mago;
50             testMago();
51         }
52         version(Windows) {
53             import ddebug.windows.debuginfo;
54             import std.file;
55             //debugInfoTest(thisExePath);
56         }
57     }
58 
59     version(USE_WIN_DEBUG) {
60         debuggerTest();
61     }
62 	version(USE_GDB_DEBUG) {
63 		debuggerTestGDB();
64 	}
65 
66     // create window
67     Window window = Platform.instance.createWindow("Dlang IDE", null, WindowFlag.Resizable, 800, 600);
68     // set window icon
69     window.windowIcon = drawableCache.getImage("dlangui-logo1");
70 	
71     //Widget w = new Widget();
72     //pragma(msg, w.click.return_t, "", w.click.params_t);
73 
74     IDEFrame frame = new IDEFrame(window);
75 
76 
77     // open home screen tab
78     frame.showHomeScreen();
79     // for testing: load workspace at startup
80     //frame.openFileOrWorkspace(appendPath(exePath, "../workspaces/sample1/sample1.dlangidews"));
81 
82     // show window
83     window.show();
84 
85     //jsonTest();
86 
87     // run message loop
88     return Platform.instance.enterMessageLoop();
89 }
90 
91 version(USE_WIN_DEBUG) {
92     void debuggerTest() {
93         import ddebug.windows.windebug;
94         WinDebugger debugger = new WinDebugger("test\\dmledit.exe", "");
95         debugger.start();
96     }
97 }
98 
99 version(USE_GDB_DEBUG) {
100 	void debuggerTestGDB() {
101 		import ddebug.gdb.gdbinterface;
102 		import core.thread;
103 		Log.d("Testing GDB debugger");
104 		DebuggerBase debugger = new DebuggerBase();
105 		debugger.startDebugging("gdb", "test", [], "", delegate(ResponseCode code, string msg) {
106 				Log.d("startDebugging result: ", code, " : ", msg);
107 				//assert(code == ResponseCode.NotImplemented);
108 			});
109 		debugger.stop();
110 		destroy(debugger);
111 
112 		// async
113 
114 		debugger = new GDBInterface();
115 		DebuggerProxy proxy = new DebuggerProxy(debugger, delegate(Runnable runnable) {
116 				runnable();
117 			});
118 		Log.d("calling debugger.start()");
119 		debugger.start();
120 		Log.d("calling proxy.startDebugging()");
121 		proxy.startDebugging("gdb", "/home/lve/src/d/dlangide/test/gdbtest", ["param1", "param2"], "/home/lve/src/d/dlangide/test", delegate(ResponseCode code, string msg) {
122 				Log.d("startDebugging result: ", code, " : ", msg);
123 				//assert(code == ResponseCode.NotImplemented);
124 			});
125 		Thread.sleep(dur!"msecs"(200000));
126 		debugger.stop();
127 		Thread.sleep(dur!"msecs"(200000));
128 		destroy(debugger);
129 		Log.d("Testing of GDB debugger is finished");
130 	}
131 }
132 
133 unittest {
134     void jsonTest() {
135         import dlangui.core.settings;
136         Setting s = new Setting();
137         s["param1_ulong"] = cast(ulong)1543453u;
138         s["param2_long"] = cast(long)-22934;
139         s["param3_double"] = -39.123e-10;
140         s["param4_string"] = "some string value";
141         s["param5_bool_true"] = true;
142         s["param6_bool_false"] = false;
143         s["param7_null"] = new Setting();
144         Setting a = new Setting();
145         a[0] = cast(ulong)1u;
146         a[1] = cast(long)-2;
147         a[2] = 3.3;
148         a[3] = "some string value";
149         a[4] = true;
150         a[5] = false;
151         a[6] = new Setting();
152         Setting mm = new Setting();
153         mm["n"] = cast(ulong)5u;
154         mm["name"] = "test";
155         a[7] = mm;
156         s["param8_array"] = a;
157         Setting m = new Setting();
158         m["aaa"] = "bbb";
159         m["aaa2"] = cast(ulong)5u;
160         m["aaa3"] = false;
161         s["param9_object"] = m;
162         string json = s.toJSON(true);
163         s.save("test_file.json");
164 
165         Setting loaded = new Setting();
166         loaded.load("test_file.json");
167         string json2 = loaded.toJSON(true);
168         loaded.save("test_file2.json");
169     }
170 
171 }