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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2604 by schoenebeck, Sat Jun 7 22:34:31 2014 UTC revision 3566 by schoenebeck, Sat Aug 24 13:42:17 2019 UTC
# Line 1  Line 1 
1  /*  /*
2      Copyright (c) 2014 Christian Schoenebeck      Copyright (c) 2014-2019 Christian Schoenebeck
3            
4      This file is part of "gigedit" and released under the terms of the      This file is part of "gigedit" and released under the terms of the
5      GNU General Public License version 2.      GNU General Public License version 2.
# Line 8  Line 8 
8  #ifndef GIGEDIT_SCRIPTEDITOR_H  #ifndef GIGEDIT_SCRIPTEDITOR_H
9  #define GIGEDIT_SCRIPTEDITOR_H  #define GIGEDIT_SCRIPTEDITOR_H
10    
11  #include <gig.h>  #ifdef LIBGIG_HEADER_FILE
12  #include <gtkmm.h>  # 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"  #include "compat.h"
26    
27  class ScriptEditor : public Gtk::Window {  #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:  public:
60      ScriptEditor();      ScriptEditor();
61     ~ScriptEditor();     ~ScriptEditor();
62      void setScript(gig::Script* script);      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:  protected:
74      Gtk::VBox m_vbox;      VBox m_vbox;
75      Gtk::HButtonBox m_buttonBox;      HBox m_footerHBox;
76        HBox m_statusHBox;
77        HButtonBox m_buttonBox;
78      Gtk::ScrolledWindow m_scrolledWindow;      Gtk::ScrolledWindow m_scrolledWindow;
79        HBox m_textViewHBox;
80        Glib::RefPtr<Gtk::TextBuffer> m_lineNrBuffer;
81      Glib::RefPtr<Gtk::TextBuffer> m_textBuffer;      Glib::RefPtr<Gtk::TextBuffer> m_textBuffer;
82      Glib::RefPtr<Gtk::TextBuffer::TagTable> m_tagTable;      Glib::RefPtr<Gtk::TextBuffer::TagTable> m_tagTable;
83      Glib::RefPtr<Gtk::TextBuffer::Tag> m_keywordTag;      Glib::RefPtr<Gtk::TextBuffer::Tag> m_keywordTag;
84      Glib::RefPtr<Gtk::TextBuffer::Tag> m_eventTag;      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_commentTag;
90        Glib::RefPtr<Gtk::TextBuffer::Tag> m_preprocTag;
91        Glib::RefPtr<Gtk::TextBuffer::Tag> m_errorTag;
92        Glib::RefPtr<Gtk::TextBuffer::Tag> m_warningTag;
93        Glib::RefPtr<Gtk::TextBuffer::Tag> m_preprocCommentTag;
94        Glib::RefPtr<Gtk::TextBuffer::Tag> m_lineNrTag;
95        Glib::RefPtr<Gtk::TextBuffer::Tag> m_metricTag;
96        Glib::RefPtr<Gtk::TextBuffer::Tag> m_stdUnitTag;
97        Gtk::TextView m_lineNrView;
98        Gtk::TextView m_lineNrTextViewSpacer;
99      Gtk::TextView m_textView;      Gtk::TextView m_textView;
100        Gtk::Image m_statusImage;
101        Gtk::Label m_statusLabel;
102      Gtk::Button m_applyButton;      Gtk::Button m_applyButton;
103      Gtk::Button m_cancelButton;      Gtk::Button m_cancelButton;
104    
105    #if GTKMM_MAJOR_VERSION > 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION >= 20)
106        Glib::RefPtr<Gtk::CssProvider> m_css;
107    #endif
108    
109        Glib::RefPtr<Gdk::Pixbuf> m_warningIcon;
110        Glib::RefPtr<Gdk::Pixbuf> m_errorIcon;
111        Glib::RefPtr<Gdk::Pixbuf> m_successIcon;
112    
113    #if USE_GLIB_ACTION
114        Glib::RefPtr<Gio::SimpleActionGroup> m_actionGroup;
115    #else
116        Glib::RefPtr<Gtk::ActionGroup> m_actionGroup;
117    #endif
118    #if USE_GTKMM_BUILDER
119        Glib::RefPtr<Gtk::Builder> m_uiManager;
120    #else
121        Glib::RefPtr<Gtk::UIManager> m_uiManager;
122    #endif
123    
124      gig::Script* m_script;      gig::Script* m_script;
125        #if USE_LS_SCRIPTVM
126        LinuxSampler::ScriptVM* m_vm;
127        std::vector<LinuxSampler::ParserIssue> m_issues;
128        std::vector<LinuxSampler::ParserIssue> m_errors;
129        std::vector<LinuxSampler::ParserIssue> m_warnings;
130        std::vector<LinuxSampler::CodeBlock> m_preprocComments;
131    #endif
132    
133        bool isModified() const;
134      void onButtonCancel();      void onButtonCancel();
135      void onButtonApply();      void onButtonApply();
136      void onWindowHide();      void onWindowHide();
137      void onTextInserted(const Gtk::TextBuffer::iterator& it, const Glib::ustring& txt, int length);      void onTextInserted(const Gtk::TextBuffer::iterator& it, const Glib::ustring& txt, int length);
138      void onTextErased(const Gtk::TextBuffer::iterator& itStart, const Gtk::TextBuffer::iterator& itEnd);      void onTextErased(const Gtk::TextBuffer::iterator& itStart, const Gtk::TextBuffer::iterator& itEnd);
139      void onModifiedChanged();      void onModifiedChanged();
140    #if USE_LS_SCRIPTVM
141        void updateSyntaxHighlightingByVM();
142        void updateParserIssuesByVM();
143        LinuxSampler::ScriptVM* GetScriptVM();
144        void updateIssueTooltip(GdkEventMotion* e);
145        void updateStatusBar();
146    #endif
147        bool on_motion_notify_event(GdkEventMotion* e);
148    #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
149        bool onWindowDelete(Gdk::Event& e);
150    #endif
151        bool onWindowDeleteP(GdkEventAny* e);
152        void onMenuChangeFontSize();
153        int  currentFontSize() const;
154        void setFontSize(int size, bool save);
155        void updateLineNumbers();
156  };  };
157    
158  #endif // GIGEDIT_SCRIPTEDITOR_H  #endif // GIGEDIT_SCRIPTEDITOR_H

Legend:
Removed from v.2604  
changed lines
  Added in v.3566

  ViewVC Help
Powered by ViewVC