You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.3 KiB
125 lines
3.3 KiB
2 months ago
|
//
|
||
|
// Copyright (c) 2010-2011 Matthew Jack and Doug Binks
|
||
|
//
|
||
|
// This software is provided 'as-is', without any express or implied
|
||
|
// warranty. In no event will the authors be held liable for any damages
|
||
|
// arising from the use of this software.
|
||
|
// Permission is granted to anyone to use this software for any purpose,
|
||
|
// including commercial applications, and to alter it and redistribute it
|
||
|
// freely, subject to the following restrictions:
|
||
|
// 1. The origin of this software must not be misrepresented; you must not
|
||
|
// claim that you wrote the original software. If you use this software
|
||
|
// in a product, an acknowledgment in the product documentation would be
|
||
|
// appreciated but is not required.
|
||
|
// 2. Altered source versions must be plainly marked as such, and must not be
|
||
|
// misrepresented as being the original software.
|
||
|
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#ifndef CONSOLE_INCLUDED
|
||
|
#define CONSOLE_INCLUDED
|
||
|
|
||
|
#include "../../RuntimeCompiler/FileSystemUtils.h"
|
||
|
|
||
|
#include "../../RuntimeCompiler/IFileChangeNotifier.h"
|
||
|
#include "../../RuntimeObjectSystem/ObjectInterface.h"
|
||
|
|
||
|
#include <Rocket/Core.h>
|
||
|
#include <Rocket/Controls.h>
|
||
|
|
||
|
class Environment;
|
||
|
|
||
|
|
||
|
class Console : public IFileChangeListener, public Rocket::Core::EventListener
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
Console(Environment* pEnv, Rocket::Core::Context* pRocketContext);
|
||
|
~Console();
|
||
|
|
||
|
// IFileChangeListener
|
||
|
|
||
|
void OnFileChange(const IAUDynArray<const char*>& filelist);
|
||
|
|
||
|
// ~IFileChangeListener
|
||
|
|
||
|
// EventListener
|
||
|
|
||
|
virtual void ProcessEvent(Rocket::Core::Event& event);
|
||
|
|
||
|
// ~EventListener
|
||
|
|
||
|
|
||
|
void OnCompileDone(bool bSuccess);
|
||
|
|
||
|
void ToggleGUI();
|
||
|
|
||
|
void DestroyContext();
|
||
|
|
||
|
private:
|
||
|
|
||
|
void InitFileChangeNotifier();
|
||
|
bool CreateConsoleContextFile();
|
||
|
void CreateConsoleContext();
|
||
|
void WriteConsoleContext();
|
||
|
void WriteConsoleContext(const std::string& text);
|
||
|
void ExecuteConsoleContext();
|
||
|
|
||
|
void InitGUI();
|
||
|
void ReloadGUI();
|
||
|
void InitGUIReferences();
|
||
|
void InitGUIEvents();
|
||
|
void ApplyCurrentGUIState();
|
||
|
void StoreGUITextInHistory();
|
||
|
void FocusOnTextArea();
|
||
|
void ApplyGUIView();
|
||
|
void ApplyGUIViewType();
|
||
|
void ApplyGUIClear();
|
||
|
void ApplyGUIHistoryPosition();
|
||
|
void ApplyGUIExecute();
|
||
|
void ApplyGUIFinishExecute();
|
||
|
|
||
|
// Private Members
|
||
|
|
||
|
enum ETextAreaType
|
||
|
{
|
||
|
ETAT_SINGLE = 0,
|
||
|
ETAT_MULTI,
|
||
|
ETAT_COUNT
|
||
|
};
|
||
|
|
||
|
typedef std::vector<std::string> THistory;
|
||
|
struct STextAreaParams
|
||
|
{
|
||
|
THistory history;
|
||
|
int position;
|
||
|
Rocket::Controls::ElementFormControl* pElement;
|
||
|
};
|
||
|
|
||
|
STextAreaParams m_textAreaParams[ETAT_COUNT];
|
||
|
|
||
|
Environment* m_pEnv;
|
||
|
Rocket::Core::Context* m_pRocketContext;
|
||
|
ObjectId m_contextId;
|
||
|
FileSystemUtils::Path m_inputFile;
|
||
|
FileSystemUtils::Path m_contextFile;
|
||
|
|
||
|
bool m_bWaitingForCompile;
|
||
|
bool m_bCurrentContextFromGUI;
|
||
|
bool m_bGUIVisible;
|
||
|
bool m_bGUIViewMulti;
|
||
|
|
||
|
Rocket::Core::ElementDocument* m_pDocument;
|
||
|
Rocket::Controls::ElementFormControl* m_pViewButton;
|
||
|
Rocket::Controls::ElementFormControl* m_pClearButton;
|
||
|
Rocket::Controls::ElementFormControl* m_pBackButton;
|
||
|
Rocket::Controls::ElementFormControl* m_pForwardButton;
|
||
|
Rocket::Controls::ElementFormControl* m_pCloseButton;
|
||
|
Rocket::Controls::ElementFormControl* m_pExecuteButton;
|
||
|
Rocket::Controls::ElementFormControl* m_pSingleLineArea;
|
||
|
Rocket::Controls::ElementFormControl* m_pMultiLineArea;
|
||
|
};
|
||
|
|
||
|
#endif // CONSOLE_INCLUDED
|