1 // Written in the D programming language.
2 
3 /**
4 This module contains implementation of source code editor widget.
5 
6 SourceEdit - base class for source code editors, with line numbering, syntax highlight, etc.
7 
8 Synopsis:
9 
10 ----
11 import dlangui.widgets.srcedit;
12 
13 ----
14 
15 Copyright: Vadim Lopatin, 2014
16 License:   Boost License 1.0
17 Authors:   Vadim Lopatin, coolreader.org@gmail.com
18 */
19 module dlangui.widgets.srcedit;
20 
21 import dlangui.graphics.fonts;
22 import dlangui.widgets.editors;
23 import dlangui.widgets.styles;
24 
25 enum DEFAULT_SOURCE_EDIT_FONT_FACES = "Menlo,Consolas,DejaVuSansMono,DejaVu Sans Mono,Liberation Mono,Lucida Sans Typewriter,Courier New,Lucida Console";
26 
27 class SourceEdit : EditBox {
28     this(string ID) {
29         super(ID);
30         _extendRightScrollBound = true;
31         fontFace = DEFAULT_SOURCE_EDIT_FONT_FACES;
32         //fontFace = "Consolas,Lucida Console,Courier New";
33         fontFamily = FontFamily.MonoSpace;
34         fontSize = makePointSize(10);
35         layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT);
36         minFontSize(9).maxFontSize(75); // allow font zoom with Ctrl + MouseWheel
37         showModificationMarks = true;
38 
39         _showLineNumbers = true;
40 
41     }
42     this() {
43         this("SRCEDIT");
44     }
45     protected string _filename;
46     @property string filename() {
47         return _filename;
48     }
49     /// load from file
50     bool load(string fn) {
51         if (content.load(fn)) {
52             _filename = fn;
53             requestLayout();
54             return true;
55         }
56         // failed
57         _filename = null;
58         return false;
59     }
60 
61     bool save(string fn) {
62         if (content.save(fn)) {
63             _filename = fn;
64             requestLayout();
65             window.update();
66             return true;
67         }
68         // failed
69         requestLayout();
70         window.update();
71         _filename = null;
72         return false;
73     }
74 
75 }