/[svn]/gigedit/trunk/src/gigedit/scripteditor.h
ViewVC logotype

Contents of /gigedit/trunk/src/gigedit/scripteditor.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3736 - (show annotations) (download) (as text)
Sat Feb 1 19:39:06 2020 UTC (8 months, 4 weeks ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 5359 byte(s)
* Script Editor: highlight new NKSP 'patch' keyword in pink color.

* Bumped version (1.1.1.svn13).

1 /*
2 Copyright (c) 2014-2020 Christian Schoenebeck
3
4 This file is part of "gigedit" and released under the terms of the
5 GNU General Public License version 2.
6 */
7
8 #ifndef GIGEDIT_SCRIPTEDITOR_H
9 #define GIGEDIT_SCRIPTEDITOR_H
10
11 #ifdef LIBGIG_HEADER_FILE
12 # include LIBGIG_HEADER_FILE(gig.h)
13 #else
14 # include <gig.h>
15 #endif
16
17 #ifdef GTKMM_HEADER_FILE
18 # include GTKMM_HEADER_FILE(gtkmm.h)
19 #else
20 # include <gtkmm.h>
21 #endif
22 #if HAVE_CONFIG_H
23 # include <config.h>
24 #endif
25 #include "compat.h"
26
27 #if USE_GTKMM_BUILDER
28 # include <gtkmm/builder.h>
29 #else
30 # include <gtkmm/uimanager.h> // deprecated in gtkmm >= 3.21.4
31 #endif
32
33 #if USE_GLIB_ACTION
34 # include <giomm/simpleactiongroup.h>
35 #else
36 # include <gtkmm/actiongroup.h>
37 #endif
38
39 #include "ManagedWindow.h"
40
41 // Should we use a very simple (and buggy) local NKSP syntax parser, or should
42 // we rather use the full featured NKSP syntax highlighting backend from
43 // liblinuxsampler for syntax highlighting of this text editor?
44 #if HAVE_LINUXSAMPLER
45 # define USE_LS_SCRIPTVM 1
46 #endif
47
48 #if USE_LS_SCRIPTVM
49 # ifdef LIBLINUXSAMPLER_HEADER_FILE
50 # include LIBLINUXSAMPLER_HEADER_FILE(scriptvm/ScriptVM.h)
51 # include LIBLINUXSAMPLER_HEADER_FILE(scriptvm/ScriptVMFactory.h)
52 # else
53 # include <linuxsampler/scriptvm/ScriptVM.h>
54 # include <linuxsampler/scriptvm/ScriptVMFactory.h>
55 # endif
56 #endif
57
58 class ScriptEditor : public ManagedWindow {
59 public:
60 ScriptEditor();
61 ~ScriptEditor();
62 void setScript(gig::Script* script);
63
64 sigc::signal<void, gig::Script*> signal_script_to_be_changed;
65 sigc::signal<void, gig::Script*> signal_script_changed;
66
67 // implementation for abstract methods of interface class "ManagedWindow"
68 virtual Settings::Property<int>* windowSettingX() { return &Settings::singleton()->scriptEditorWindowX; }
69 virtual Settings::Property<int>* windowSettingY() { return &Settings::singleton()->scriptEditorWindowY; }
70 virtual Settings::Property<int>* windowSettingWidth() { return &Settings::singleton()->scriptEditorWindowW; }
71 virtual Settings::Property<int>* windowSettingHeight() { return &Settings::singleton()->scriptEditorWindowH; }
72
73 protected:
74 VBox m_vbox;
75 HBox m_footerHBox;
76 HBox m_statusHBox;
77 HButtonBox m_buttonBox;
78 Gtk::ScrolledWindow m_scrolledWindow;
79 HBox m_textViewHBox;
80 Glib::RefPtr<Gtk::TextBuffer> m_lineNrBuffer;
81 Glib::RefPtr<Gtk::TextBuffer> m_textBuffer;
82 Glib::RefPtr<Gtk::TextBuffer::TagTable> m_tagTable;
83 Glib::RefPtr<Gtk::TextBuffer::Tag> m_keywordTag;
84 Glib::RefPtr<Gtk::TextBuffer::Tag> m_eventTag;
85 Glib::RefPtr<Gtk::TextBuffer::Tag> m_variableTag;
86 Glib::RefPtr<Gtk::TextBuffer::Tag> m_functionTag;
87 Glib::RefPtr<Gtk::TextBuffer::Tag> m_numberTag;
88 Glib::RefPtr<Gtk::TextBuffer::Tag> m_stringTag;
89 Glib::RefPtr<Gtk::TextBuffer::Tag> m_patchTag;
90 Glib::RefPtr<Gtk::TextBuffer::Tag> m_commentTag;
91 Glib::RefPtr<Gtk::TextBuffer::Tag> m_preprocTag;
92 Glib::RefPtr<Gtk::TextBuffer::Tag> m_errorTag;
93 Glib::RefPtr<Gtk::TextBuffer::Tag> m_warningTag;
94 Glib::RefPtr<Gtk::TextBuffer::Tag> m_preprocCommentTag;
95 Glib::RefPtr<Gtk::TextBuffer::Tag> m_lineNrTag;
96 Glib::RefPtr<Gtk::TextBuffer::Tag> m_metricTag;
97 Glib::RefPtr<Gtk::TextBuffer::Tag> m_stdUnitTag;
98 Gtk::TextView m_lineNrView;
99 Gtk::TextView m_lineNrTextViewSpacer;
100 Gtk::TextView m_textView;
101 Gtk::Image m_statusImage;
102 Gtk::Label m_statusLabel;
103 Gtk::Button m_applyButton;
104 Gtk::Button m_cancelButton;
105
106 #if GTKMM_MAJOR_VERSION > 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION >= 20)
107 Glib::RefPtr<Gtk::CssProvider> m_css;
108 #endif
109
110 Glib::RefPtr<Gdk::Pixbuf> m_warningIcon;
111 Glib::RefPtr<Gdk::Pixbuf> m_errorIcon;
112 Glib::RefPtr<Gdk::Pixbuf> m_successIcon;
113
114 #if USE_GLIB_ACTION
115 Glib::RefPtr<Gio::SimpleActionGroup> m_actionGroup;
116 #else
117 Glib::RefPtr<Gtk::ActionGroup> m_actionGroup;
118 #endif
119 #if USE_GTKMM_BUILDER
120 Glib::RefPtr<Gtk::Builder> m_uiManager;
121 #else
122 Glib::RefPtr<Gtk::UIManager> m_uiManager;
123 #endif
124
125 gig::Script* m_script;
126 #if USE_LS_SCRIPTVM
127 LinuxSampler::ScriptVM* m_vm;
128 std::vector<LinuxSampler::ParserIssue> m_issues;
129 std::vector<LinuxSampler::ParserIssue> m_errors;
130 std::vector<LinuxSampler::ParserIssue> m_warnings;
131 std::vector<LinuxSampler::CodeBlock> m_preprocComments;
132 #endif
133
134 bool isModified() const;
135 void onButtonCancel();
136 void onButtonApply();
137 void onWindowHide();
138 void onTextInserted(const Gtk::TextBuffer::iterator& it, const Glib::ustring& txt, int length);
139 void onTextErased(const Gtk::TextBuffer::iterator& itStart, const Gtk::TextBuffer::iterator& itEnd);
140 void onModifiedChanged();
141 #if USE_LS_SCRIPTVM
142 void updateSyntaxHighlightingByVM();
143 void updateParserIssuesByVM();
144 LinuxSampler::ScriptVM* GetScriptVM();
145 void updateIssueTooltip(GdkEventMotion* e);
146 void updateStatusBar();
147 #endif
148 bool on_motion_notify_event(GdkEventMotion* e);
149 #if GTKMM_MAJOR_VERSION > 3 || (GTKMM_MAJOR_VERSION == 3 && (GTKMM_MINOR_VERSION > 91 || (GTKMM_MINOR_VERSION == 91 && GTKMM_MICRO_VERSION >= 2))) // GTKMM >= 3.91.2
150 bool onWindowDelete(Gdk::Event& e);
151 #endif
152 bool onWindowDeleteP(GdkEventAny* e);
153 void onMenuChangeFontSize();
154 int currentFontSize() const;
155 void setFontSize(int size, bool save);
156 void updateLineNumbers();
157 };
158
159 #endif // GIGEDIT_SCRIPTEDITOR_H

  ViewVC Help
Powered by ViewVC