mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-05-28 17:16:29 +03:00
Added option to force opening documents in main split (Settings -> Window -> Open Documents in Main Split).
This commit is contained in:
@@ -278,7 +278,7 @@ class EE_API UICodeEditorSplitter {
|
||||
tryCloseTabsToDirection( mCurWidget, UITabWidget::FocusTabBehavior::Default, true );
|
||||
} );
|
||||
t.setCommand( "create-new", [this] {
|
||||
auto d = createCodeEditorInTabWidget( tabWidgetFromWidget( mCurWidget ) );
|
||||
auto d = createCodeEditorInTabWidget( getPreferredTabWidget() );
|
||||
if ( d.first != nullptr && d.second != nullptr ) {
|
||||
d.first->getTabWidget()->setTabSelected( d.first );
|
||||
} else if ( !mTabWidgets.empty() ) {
|
||||
@@ -381,6 +381,14 @@ class EE_API UICodeEditorSplitter {
|
||||
|
||||
bool isWidgetInAnyWidget( UIWidget* ) const;
|
||||
|
||||
void setOpenDocumentsInMainSplit( bool open ) { mOpenDocumentsInMainSplit = open; }
|
||||
|
||||
bool openDocumentsInMainSplit() const { return mOpenDocumentsInMainSplit; }
|
||||
|
||||
UITabWidget* getFirstTabWidget() const;
|
||||
|
||||
UITabWidget* getPreferredTabWidget() const;
|
||||
|
||||
protected:
|
||||
UISceneNode* mUISceneNode{ nullptr };
|
||||
std::shared_ptr<ThreadPool> mThreadPool;
|
||||
@@ -395,6 +403,7 @@ class EE_API UICodeEditorSplitter {
|
||||
bool mHideTabBarOnSingleTab{ true };
|
||||
bool mFirstCodeEditor{ true };
|
||||
bool mVisualSplitting{ true };
|
||||
bool mOpenDocumentsInMainSplit{ false };
|
||||
UICodeEditor* mAboutToAddEditor{ nullptr };
|
||||
UIMessageBox* mTryCloseMsgBox{ nullptr };
|
||||
Mutex mTabWidgetMutex;
|
||||
|
||||
@@ -1381,7 +1381,7 @@ const SyntaxDefinition& SyntaxDefinitionManager::getByHeader( std::string_view h
|
||||
for ( const auto& hdr : preDefinition->getHeaders() ) {
|
||||
LuaPattern words( hdr );
|
||||
int start, end;
|
||||
if ( words.find( header.data(), start, end ) ) {
|
||||
if ( words.find( header.data(), start, end, 0, header.size() ) ) {
|
||||
return preDefinition->load();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,8 +329,17 @@ bool UICodeEditorSplitter::loadDocument( std::shared_ptr<TextDocument> doc,
|
||||
return true;
|
||||
}
|
||||
|
||||
UITabWidget* UICodeEditorSplitter::getFirstTabWidget() const {
|
||||
eeASSERT( !mTabWidgets.empty() );
|
||||
return mTabWidgets[0];
|
||||
}
|
||||
|
||||
UITabWidget* UICodeEditorSplitter::getPreferredTabWidget() const {
|
||||
return mOpenDocumentsInMainSplit ? getFirstTabWidget() : tabWidgetFromWidget( mCurWidget );
|
||||
}
|
||||
|
||||
std::pair<UITab*, UICodeEditor*> UICodeEditorSplitter::createEditorInNewTab() {
|
||||
auto d = createCodeEditorInTabWidget( tabWidgetFromWidget( mCurWidget ) );
|
||||
auto d = createCodeEditorInTabWidget( getPreferredTabWidget() );
|
||||
if ( d.first == nullptr || d.second == nullptr ) {
|
||||
if ( !mTabWidgets.empty() && mTabWidgets[0]->getTabCount() > 0 ) {
|
||||
d = createCodeEditorInTabWidget( mTabWidgets[0] );
|
||||
@@ -347,7 +356,7 @@ std::pair<UITab*, UICodeEditor*> UICodeEditorSplitter::createEditorInNewTab() {
|
||||
|
||||
std::pair<UITab*, UICodeEditor*>
|
||||
UICodeEditorSplitter::loadDocumentInNewTab( std::shared_ptr<TextDocument> doc ) {
|
||||
auto d = createCodeEditorInTabWidget( tabWidgetFromWidget( mCurWidget ) );
|
||||
auto d = createCodeEditorInTabWidget( getPreferredTabWidget() );
|
||||
if ( d.first == nullptr || d.second == nullptr ) {
|
||||
if ( !mTabWidgets.empty() && mTabWidgets[0]->getTabCount() > 0 ) {
|
||||
d = createCodeEditorInTabWidget( mTabWidgets[0] );
|
||||
@@ -421,7 +430,7 @@ void UICodeEditorSplitter::loadAsyncFileFromPath(
|
||||
|
||||
std::pair<UITab*, UICodeEditor*>
|
||||
UICodeEditorSplitter::loadFileFromPathInNewTab( const std::string& path ) {
|
||||
auto d = createCodeEditorInTabWidget( tabWidgetFromWidget( mCurWidget ) );
|
||||
auto d = createCodeEditorInTabWidget( getPreferredTabWidget() );
|
||||
if ( d.first == nullptr || d.second == nullptr ) {
|
||||
if ( !mTabWidgets.empty() && mTabWidgets[0]->getTabCount() > 0 ) {
|
||||
d = createCodeEditorInTabWidget( mTabWidgets[0] );
|
||||
@@ -469,7 +478,7 @@ void UICodeEditorSplitter::loadAsyncFileFromPathInNewTab(
|
||||
loadFileFromPathInNewTab( path );
|
||||
return;
|
||||
}
|
||||
auto d = createCodeEditorInTabWidget( tabWidgetFromWidget( mCurWidget ) );
|
||||
auto d = createCodeEditorInTabWidget( getPreferredTabWidget() );
|
||||
if ( d.first == nullptr || d.second == nullptr ) {
|
||||
if ( !mTabWidgets.empty() && mTabWidgets[0]->getTabCount() > 0 ) {
|
||||
d = createCodeEditorInTabWidget( mTabWidgets[0] );
|
||||
|
||||
@@ -118,6 +118,8 @@ void AppConfig::load( const std::string& confPath, std::string& keybindingsPath,
|
||||
editor.highlightCurrentLine = ini.getValueB( "editor", "highlight_current_line", true );
|
||||
editor.verticalScrollbar = ini.getValueB( "editor", "vertical_scrollbar", true );
|
||||
editor.horizontalScrollbar = ini.getValueB( "editor", "horizontal_scrollbar", true );
|
||||
editor.openDocumentsInMainSplit =
|
||||
ini.getValueB( "editor", "open_documents_in_main_split", false );
|
||||
ui.fontSize = ini.getValue( "ui", "font_size", "11dp" );
|
||||
ui.panelFontSize = ini.getValue( "ui", "panel_font_size", "11dp" );
|
||||
ui.showSidePanel = ini.getValueB( "ui", "show_side_panel", true );
|
||||
@@ -304,9 +306,8 @@ void AppConfig::save( const std::vector<std::string>& recentFiles,
|
||||
iniState.setValue( "files", "recentfiles", String::join( urlEncode( recentFiles ), ';' ) );
|
||||
iniState.setValue( "folders", "recentfolders",
|
||||
String::join( urlEncode( recentFolders ), ';' ) );
|
||||
|
||||
iniState.setValueU( "editor", "last_run_version", ecode::Version::getVersionNum() );
|
||||
iniState.setValue( "ui", "side_panel_tabs_order",
|
||||
String::join( windowState.sidePanelTabsOrder, ',' ) );
|
||||
ini.setValueB( "editor", "show_line_numbers", editor.showLineNumbers );
|
||||
ini.setValueB( "editor", "show_white_spaces", editor.showWhiteSpaces );
|
||||
ini.setValueB( "editor", "show_indentation_guides", editor.showIndentationGuides );
|
||||
@@ -315,7 +316,9 @@ void AppConfig::save( const std::vector<std::string>& recentFiles,
|
||||
ini.setValueB( "editor", "highlight_current_line", editor.highlightCurrentLine );
|
||||
ini.setValueB( "editor", "vertical_scrollbar", editor.verticalScrollbar );
|
||||
ini.setValueB( "editor", "horizontal_scrollbar", editor.horizontalScrollbar );
|
||||
ini.setValueB( "editor", "open_documents_in_main_split", editor.openDocumentsInMainSplit );
|
||||
ini.setValue( "editor", "font_size", editor.fontSize.toString() );
|
||||
|
||||
ini.setValue( "ui", "font_size", ui.fontSize.toString() );
|
||||
ini.setValue( "ui", "panel_font_size", ui.panelFontSize.toString() );
|
||||
if ( !terminalMode )
|
||||
@@ -339,6 +342,8 @@ void AppConfig::save( const std::vector<std::string>& recentFiles,
|
||||
ini.setValue( "ui", "font_antialiasing",
|
||||
FontTrueType::fontAntialiasingToString( ui.fontAntialiasing ) );
|
||||
ini.setValueB( "ui", "editor_font_in_input_fields", ui.editorFontInInputFields );
|
||||
iniState.setValue( "ui", "side_panel_tabs_order",
|
||||
String::join( windowState.sidePanelTabsOrder, ',' ) );
|
||||
|
||||
ini.setValueB( "document", "trim_trailing_whitespaces", doc.trimTrailingWhitespaces );
|
||||
ini.setValueB( "document", "force_new_line_at_end_of_file", doc.forceNewLineAtEndOfFile );
|
||||
|
||||
@@ -87,6 +87,7 @@ struct CodeEditorConfig {
|
||||
bool hideTabBarOnSingleTab{ true };
|
||||
bool hideTabBar{ false };
|
||||
bool tabSwitcher{ false };
|
||||
bool openDocumentsInMainSplit{ false };
|
||||
UITabWidget::TabJumpMode tabJumpMode{ UITabWidget::TabJumpMode::Linear };
|
||||
|
||||
bool singleClickNavigation{ false };
|
||||
|
||||
@@ -921,7 +921,9 @@ void App::onFileDropped( std::string file, bool openBinaryAsDocument ) {
|
||||
!codeEditor->getDocument().isEmpty() ) &&
|
||||
!doesntNeedEmptyEditor ) {
|
||||
auto d = mSplitter->createCodeEditorInTabWidget(
|
||||
mSplitter->tabWidgetFromEditor( codeEditor ) );
|
||||
mConfig.editor.openDocumentsInMainSplit
|
||||
? mSplitter->getPreferredTabWidget()
|
||||
: mSplitter->tabWidgetFromEditor( codeEditor ) );
|
||||
codeEditor = d.second;
|
||||
tab = d.first;
|
||||
}
|
||||
@@ -2675,8 +2677,9 @@ void App::onCodeEditorCreated( UICodeEditor* editor, TextDocument& doc ) {
|
||||
doc.setCommand( "clone-document-buffer", [this] {
|
||||
if ( mSplitter->curEditorExistsAndFocused() && mSplitter->getCurEditor() ) {
|
||||
UICodeEditor* editor = mSplitter->getCurEditor();
|
||||
auto d =
|
||||
mSplitter->createCodeEditorInTabWidget( mSplitter->tabWidgetFromWidget( editor ) );
|
||||
auto d = mSplitter->createCodeEditorInTabWidget(
|
||||
mConfig.editor.openDocumentsInMainSplit ? mSplitter->getPreferredTabWidget()
|
||||
: mSplitter->tabWidgetFromWidget( editor ) );
|
||||
if ( d.first == nullptr && d.second == nullptr && !mSplitter->getTabWidgets().empty() )
|
||||
d = mSplitter->createCodeEditorInTabWidget( mSplitter->getTabWidgets()[0] );
|
||||
if ( d.first != nullptr || d.second != nullptr ) {
|
||||
@@ -4331,6 +4334,7 @@ void App::init( InitParameters& params ) {
|
||||
mInitColorScheme );
|
||||
mSplitter->setHideTabBarOnSingleTab( mConfig.editor.hideTabBarOnSingleTab );
|
||||
mSplitter->setHideTabBar( mConfig.editor.hideTabBar );
|
||||
mSplitter->setOpenDocumentsInMainSplit( mConfig.editor.openDocumentsInMainSplit );
|
||||
mSplitter->setOnTabWidgetCreateCb( [this]( UITabWidget* tabWidget ) {
|
||||
tabWidget->getTabBar()->onDoubleClick(
|
||||
[this]( const MouseEvent* ) { mSplitter->createEditorInNewTab(); } );
|
||||
|
||||
@@ -1320,42 +1320,22 @@ UIMenu* SettingsMenu::createWindowMenu() {
|
||||
auto colorSchemeExt = ColorSchemePreferences::fromStringExt( item->getId() );
|
||||
mApp->setUIColorSchemeFromUserInteraction( colorSchemeExt );
|
||||
} );
|
||||
mWindowMenu->addSubMenu( i18n( "ui_language", "UI Language" ), findIcon( "globe" ),
|
||||
createLanguagesMenu() );
|
||||
mWindowMenu->addSubMenu( i18n( "fonts_configuration", "Fonts Configuration" ),
|
||||
findIcon( "font-size" ), createFontsMenu() );
|
||||
mWindowMenu->addSubMenu( i18n( "ui_prefes_color_scheme", "UI Prefers Color Scheme" ),
|
||||
findIcon( "color-scheme" ), colorsMenu );
|
||||
mWindowMenu->addSubMenu( i18n( "ui_thene", "UI Theme" ), findIcon( "palette" ),
|
||||
createThemesMenu() );
|
||||
mWindowMenu->addSubMenu( i18n( "ui_language", "UI Language" ), findIcon( "globe" ),
|
||||
createLanguagesMenu() );
|
||||
mWindowMenu->addSubMenu( i18n( "ui_renderer", "Renderer" ), findIcon( "package" ),
|
||||
createRendererMenu() );
|
||||
mWindowMenu->addSubMenu( i18n( "ui_font_hint", "Font Hint" ), findIcon( "font-size" ),
|
||||
createFontHintMenu() );
|
||||
mWindowMenu->addSubMenu( i18n( "ui_font_antialiasing", "Font Anti-Aliasing" ),
|
||||
findIcon( "font-size" ), createFontAntiAliasingMenu() );
|
||||
|
||||
mWindowMenu
|
||||
->add( i18n( "ui_scale_factor", "UI Scale Factor (Pixel Density)" ),
|
||||
findIcon( "pixel-density" ) )
|
||||
->setId( "ui-scale-factor" );
|
||||
mWindowMenu->add( i18n( "ui_font_size", "UI Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "ui-font-size" );
|
||||
mWindowMenu->add( i18n( "ui_panel_font_size", "UI Panel Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "ui-panel-font-size" );
|
||||
mWindowMenu->add( i18n( "editor_font_size", "Editor Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "editor-font-size" );
|
||||
mWindowMenu->add( i18n( "terminal_font_size", "Terminal Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "terminal-font-size" );
|
||||
mWindowMenu
|
||||
->add( i18n( "sans-serif_font_ellipsis", "Sans-Serif Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "sans-serif-font" );
|
||||
mWindowMenu
|
||||
->add( i18n( "monospace_font_ellipsis", "Monospace Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "monospace-font" );
|
||||
mWindowMenu
|
||||
->add( i18n( "terminal_font_ellipsis", "Terminal Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "terminal-font" );
|
||||
mWindowMenu
|
||||
->add( i18n( "fallback_font_ellipsis", "Fallback Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "fallback-font" );
|
||||
|
||||
mWindowMenu->addSeparator();
|
||||
mWindowMenu
|
||||
->add( i18n( "key_bindings", "Key Bindings" ), findIcon( "keybindings" ),
|
||||
@@ -1458,6 +1438,14 @@ UIMenu* SettingsMenu::createWindowMenu() {
|
||||
"of the current window unless no project is currently loaded." ) )
|
||||
->setId( "open-project-in-new-window" );
|
||||
|
||||
mWindowMenu
|
||||
->addCheckBox( i18n( "open_documents_in_main_split", "Open Documents in Main Split" ),
|
||||
mApp->getConfig().editor.openDocumentsInMainSplit )
|
||||
->setTooltipText( i18n( "open_documents_in_main_split_tooltip",
|
||||
"Always open new documents in the main split (top-left), "
|
||||
"instead of the last active split." ) )
|
||||
->setId( "open-documents-in-main-split" );
|
||||
|
||||
mWindowMenu
|
||||
->addCheckBox( i18n( "use_native_file_dialogs", "Enable Native File Dialogs" ),
|
||||
mApp->getConfig().ui.nativeFileDialogs )
|
||||
@@ -1502,6 +1490,11 @@ UIMenu* SettingsMenu::createWindowMenu() {
|
||||
bool active = item->asType<UIMenuCheckBox>()->isActive();
|
||||
mApp->getConfig().ui.openProjectInNewWindow = active;
|
||||
mApp->saveConfig();
|
||||
} else if ( "open-documents-in-main-split" == item->getId() ) {
|
||||
bool active = item->asType<UIMenuCheckBox>()->isActive();
|
||||
mApp->getConfig().editor.openDocumentsInMainSplit = active;
|
||||
mApp->saveConfig();
|
||||
mApp->getSplitter()->setOpenDocumentsInMainSplit( active );
|
||||
} else if ( "native-file-dialogs" == item->getId() ) {
|
||||
bool active = item->asType<UIMenuCheckBox>()->isActive();
|
||||
mApp->getConfig().ui.nativeFileDialogs = active;
|
||||
@@ -2938,6 +2931,41 @@ UIMenu* SettingsMenu::createFontAntiAliasingMenu() {
|
||||
return mFontAntiAliasingMenu;
|
||||
}
|
||||
|
||||
UIMenu* SettingsMenu::createFontsMenu() {
|
||||
mFontsMenu = UIPopUpMenu::New();
|
||||
mFontsMenu->addSubMenu( i18n( "ui_font_hint", "Font Hint" ), findIcon( "font-size" ),
|
||||
createFontHintMenu() );
|
||||
mFontsMenu->addSubMenu( i18n( "ui_font_antialiasing", "Font Anti-Aliasing" ),
|
||||
findIcon( "font-size" ), createFontAntiAliasingMenu() );
|
||||
mFontsMenu->add( i18n( "ui_font_size", "UI Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "ui-font-size" );
|
||||
mFontsMenu->add( i18n( "ui_panel_font_size", "UI Panel Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "ui-panel-font-size" );
|
||||
mFontsMenu->add( i18n( "editor_font_size", "Editor Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "editor-font-size" );
|
||||
mFontsMenu->add( i18n( "terminal_font_size", "Terminal Font Size" ), findIcon( "font-size" ) )
|
||||
->setId( "terminal-font-size" );
|
||||
mFontsMenu
|
||||
->add( i18n( "sans-serif_font_ellipsis", "Sans-Serif Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "sans-serif-font" );
|
||||
mFontsMenu
|
||||
->add( i18n( "monospace_font_ellipsis", "Monospace Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "monospace-font" );
|
||||
mFontsMenu->add( i18n( "terminal_font_ellipsis", "Terminal Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "terminal-font" );
|
||||
mFontsMenu->add( i18n( "fallback_font_ellipsis", "Fallback Font..." ), findIcon( "font-size" ) )
|
||||
->setId( "fallback-font" );
|
||||
mFontsMenu->on( Event::OnItemClicked, [this]( const Event* event ) {
|
||||
if ( !event->getNode()->isType( UI_TYPE_MENUITEM ) )
|
||||
return;
|
||||
String text = String( event->getNode()->asType<UIMenuItem>()->getId() ).toLower();
|
||||
String::replaceAll( text, " ", "-" );
|
||||
String::replaceAll( text, "/", "-" );
|
||||
runCommand( text );
|
||||
} );
|
||||
return mFontsMenu;
|
||||
}
|
||||
|
||||
void SettingsMenu::updateMenu() {
|
||||
bool showMenuBar = mApp->getConfig().ui.showMenuBar;
|
||||
mSettingsButton->setVisible( !showMenuBar );
|
||||
|
||||
@@ -46,6 +46,8 @@ class SettingsMenu {
|
||||
|
||||
UIMenu* createFontAntiAliasingMenu();
|
||||
|
||||
UIMenu* createFontsMenu();
|
||||
|
||||
void updateTerminalMenu();
|
||||
|
||||
void updateProjectSettingsMenu();
|
||||
@@ -122,6 +124,7 @@ class SettingsMenu {
|
||||
UIMenuBar* mMenuBar{ nullptr };
|
||||
UIPopUpMenu* mFontHintMenu{ nullptr };
|
||||
UIPopUpMenu* mFontAntiAliasingMenu{ nullptr };
|
||||
UIPopUpMenu* mFontsMenu{ nullptr };
|
||||
std::vector<UIPopUpMenu*> mFileTypeMenus;
|
||||
Float mFileTypeMenusCreatedWithHeight{ 0 };
|
||||
std::vector<UIPopUpMenu*> mColorSchemeMenus;
|
||||
|
||||
Reference in New Issue
Block a user