// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved // Please see LICENSE.md in repository root for license information // https://github.com/AtomicGameEngine/AtomicGameEngine #pragma once #include "ResourceEditor.h" #include #include #include using namespace Atomic; using namespace tb; #ifdef ATOMIC_PLATFORM_WINDOWS #undef FindText #endif namespace AtomicEditor { class JSAutocomplete; class JSResourceEditor: public ResourceEditor, public TBStyleEditTextChangeListener { OBJECT(JSResourceEditor); public: JSResourceEditor(Context* context, const String& fullpath, UITabContainer* container); virtual ~JSResourceEditor(); bool OnEvent(const TBWidgetEvent &ev); bool FindText(const String& findText, unsigned flags); void FindTextClose(); void OnChange(TBStyleEdit* styleEdit); void HandleUpdate(StringHash eventType, VariantMap& eventData); void GotoTokenPos(int tokenPos); void GotoLineNumber(int lineNumber); void SetFocus(); bool HasUnsavedModifications(); private: bool ParseJavascriptToJSON(const char* source, String& json, bool loose = true); bool BeautifyJavascript(const char* source, String& output); void UpdateLineNumbers(); tb::TBStyleEdit* styleEdit_; tb::TBSelectList* lineNumberList_; TBEditField* editField_; JSAutocomplete* autocomplete_; float textDelta_; bool textDirty_; bool modified_; int currentFindPos_; }; }