mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-06-01 02:56:28 +03:00
217 lines
5.3 KiB
C++
217 lines
5.3 KiB
C++
#ifndef EE_TOOLS_CODEEDITOR_HPP
|
|
#define EE_TOOLS_CODEEDITOR_HPP
|
|
|
|
#include <eepp/ee.hpp>
|
|
|
|
class UISearchBar : public UILinearLayout {
|
|
public:
|
|
typedef std::function<void()> CommandCallback;
|
|
static UISearchBar* New() { return eeNew( UISearchBar, () ); }
|
|
UISearchBar() :
|
|
UILinearLayout( "searchbar", UIOrientation::Horizontal ),
|
|
mKeyBindings( getUISceneNode()->getWindow()->getInput() ) {}
|
|
void addCommand( const std::string& name, const CommandCallback& cb ) { mCommands[name] = cb; }
|
|
void execute( const std::string& command ) {
|
|
auto cmdIt = mCommands.find( command );
|
|
if ( cmdIt != mCommands.end() )
|
|
cmdIt->second();
|
|
}
|
|
KeyBindings& getKeyBindings() { return mKeyBindings; }
|
|
|
|
protected:
|
|
KeyBindings mKeyBindings;
|
|
std::unordered_map<std::string, std::function<void()>> mCommands;
|
|
Uint32 onKeyDown( const KeyEvent& event ) {
|
|
std::string cmd =
|
|
mKeyBindings.getCommandFromKeyBind( {event.getKeyCode(), event.getMod()} );
|
|
if ( !cmd.empty() ) {
|
|
auto cmdIt = mCommands.find( cmd );
|
|
if ( cmdIt != mCommands.end() ) {
|
|
cmdIt->second();
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
};
|
|
|
|
class App {
|
|
public:
|
|
struct Config {
|
|
struct {
|
|
Float pixelDensity{0};
|
|
Sizei size{1280, 720};
|
|
bool maximized{false};
|
|
} window;
|
|
struct {
|
|
std::string colorScheme{"lite"};
|
|
Float fontSize{11};
|
|
bool showLineNumbers{true};
|
|
bool showWhiteSpaces{true};
|
|
bool highlightMatchingBracket{true};
|
|
bool horizontalScrollbar{false};
|
|
bool highlightCurrentLine{true};
|
|
bool trimTrailingWhitespaces{false};
|
|
bool forceNewLineAtEndOfFile{false};
|
|
bool autoDetectIndentType{true};
|
|
bool writeUnicodeBOM{false};
|
|
bool indentSpaces{false};
|
|
bool windowsLineEndings{false};
|
|
int indentWidth{4};
|
|
int tabWidth{4};
|
|
int lineBreakingColumn{100};
|
|
} editor;
|
|
struct {
|
|
Float fontSize{11};
|
|
} ui;
|
|
};
|
|
|
|
enum class SplitDirection { Left, Right, Top, Bottom };
|
|
|
|
~App();
|
|
|
|
void init( const std::string& file, const Float& pidelDensity );
|
|
|
|
bool loadFileFromPath( const std::string& path, UICodeEditor* codeEditor = nullptr );
|
|
|
|
void setAppTitle( const std::string& title );
|
|
|
|
void openFileDialog();
|
|
|
|
void saveFileDialog();
|
|
|
|
void findPrevText( String text = "", const bool& caseSensitive = true );
|
|
|
|
void findNextText( String text = "", const bool& caseSensitive = true );
|
|
|
|
void closeApp();
|
|
|
|
void mainLoop();
|
|
|
|
void showFindView();
|
|
|
|
UICodeEditor* createCodeEditor();
|
|
|
|
UITabWidget* tabWidgetFromEditor( UICodeEditor* editor );
|
|
|
|
UISplitter* splitterFromEditor( UICodeEditor* editor );
|
|
|
|
std::pair<UITab*, UICodeEditor*> createCodeEditorInTabWidget( UITabWidget* tabWidget );
|
|
|
|
UITabWidget* createEditorWithTabWidget( Node* parent );
|
|
|
|
void splitEditor( const SplitDirection& direction, UICodeEditor* editor );
|
|
|
|
void focusSomeEditor( Node* searchFrom = nullptr );
|
|
|
|
void switchToTab( Int32 index );
|
|
|
|
UITabWidget* findPreviousSplit( UICodeEditor* editor );
|
|
|
|
void switchPreviousSplit( UICodeEditor* editor );
|
|
|
|
UITabWidget* findNextSplit( UICodeEditor* editor );
|
|
|
|
void switchNextSplit( UICodeEditor* editor );
|
|
|
|
void applyColorScheme( const SyntaxColorScheme& colorScheme );
|
|
|
|
void replaceSelection( const String& replacement );
|
|
|
|
void replaceAll( String find, const String& replace, const bool& caseSensitive );
|
|
|
|
void findAndReplace( String find, String replace, const bool& caseSensitive );
|
|
|
|
void runCommand( const std::string& command );
|
|
|
|
void loadConfig();
|
|
|
|
void saveConfig();
|
|
|
|
void loadFileFromPathInNewTab( const std::string& path );
|
|
|
|
void setCurrentEditor( UICodeEditor* editor );
|
|
|
|
protected:
|
|
EE::Window::Window* mWindow{nullptr};
|
|
UISceneNode* mUISceneNode{nullptr};
|
|
UICodeEditor* mCurEditor{nullptr};
|
|
Console* mConsole{nullptr};
|
|
std::string mWindowTitle{"ecode"};
|
|
UIMessageBox* mMsgBox{nullptr};
|
|
String mLastSearch;
|
|
UILayout* mBaseLayout{nullptr};
|
|
UISearchBar* mSearchBarLayout{nullptr};
|
|
std::vector<UITabWidget*> mTabWidgets;
|
|
std::map<std::string, SyntaxColorScheme> mColorSchemes;
|
|
std::string mCurrentColorScheme;
|
|
UIPopUpMenu* mSettingsMenu;
|
|
UITextView* mSettingsButton;
|
|
UIPopUpMenu* mColorSchemeMenu;
|
|
UIPopUpMenu* mFiletypeMenu;
|
|
UITheme* mTheme;
|
|
IniFile mIni;
|
|
IniFile mIniState;
|
|
std::vector<std::string> mRecentFiles;
|
|
Config mConfig;
|
|
UIPopUpMenu* mDocMenu;
|
|
|
|
void onFileDropped( String file );
|
|
|
|
void onTextDropped( String text );
|
|
|
|
void updateEditorTitle( UICodeEditor* editor );
|
|
|
|
std::string titleFromEditor( UICodeEditor* editor );
|
|
|
|
bool tryTabClose( UICodeEditor* editor );
|
|
|
|
bool onCloseRequestCallback( EE::Window::Window* );
|
|
|
|
void closeEditorTab( UICodeEditor* editor );
|
|
|
|
void onTabClosed( const TabEvent* tabEvent );
|
|
|
|
void closeSplitter( UISplitter* splitter );
|
|
|
|
void closeTabWidgets( UISplitter* splitter );
|
|
|
|
void initSearchBar();
|
|
|
|
void addRemainingTabWidgets( Node* widget );
|
|
|
|
void createSettingsMenu();
|
|
|
|
UIMenu* createColorSchemeMenu();
|
|
|
|
void updateColorSchemeMenu();
|
|
|
|
void setColorScheme( const std::string& name );
|
|
|
|
UIMenu* createFiletypeMenu();
|
|
|
|
void updateCurrentFiletype();
|
|
|
|
void updateEditorState();
|
|
|
|
void saveDoc();
|
|
|
|
void removeUnusedTab( UITabWidget* tabWidget );
|
|
|
|
void updateRecentFiles();
|
|
|
|
void forEachEditor( std::function<void( UICodeEditor* )> run );
|
|
|
|
UIMenu* createViewMenu();
|
|
|
|
UIMenu* createEditMenu();
|
|
|
|
Drawable* findIcon( const std::string& name );
|
|
|
|
UIMenu* createDocumentMenu();
|
|
|
|
void updateDocumentMenu();
|
|
};
|
|
|
|
#endif // EE_TOOLS_CODEEDITOR_HPP
|