Minor refactor and UISplitter improvements.

Improved dragging.
UITab now supports close button and proper close control (user can deny the close request).
UITabWidget now allows to rearrange the tabs in the tab bar.
This commit is contained in:
Martín Lucas Golini
2020-06-05 01:33:41 -03:00
parent 951d7b2e7e
commit c408491633
26 changed files with 356 additions and 204 deletions

View File

@@ -24,13 +24,13 @@ bool App::onCloseRequestCallback( EE::Window::Window* ) {
}
}
bool App::onTabCloseRequestCallback( EE::Window::Window* ) {
if ( NULL != mCurEditor && mCurEditor->isDirty() ) {
bool App::tryTabClose( UICodeEditor* editor ) {
if ( NULL != editor && editor->isDirty() ) {
mMsgBox =
UIMessageBox::New( UIMessageBox::OK_CANCEL,
"Do you really want to close this tab?\nAll changes will be lost." );
mMsgBox->addEventListener( Event::MsgBoxConfirmClick,
[&]( const Event* ) { closeCurrrentTab(); } );
[&, editor]( const Event* ) { closeEditorTab( editor ); } );
mMsgBox->addEventListener( Event::OnClose, [&]( const Event* ) {
mMsgBox = NULL;
if ( mCurEditor )
@@ -41,17 +41,19 @@ bool App::onTabCloseRequestCallback( EE::Window::Window* ) {
mMsgBox->show();
return false;
} else {
closeEditorTab( editor );
return true;
}
}
void App::closeCurrrentTab() {
if ( mCurEditor ) {
UITabWidget* tabWidget = tabWidgetFromEditor( mCurEditor );
void App::closeEditorTab( UICodeEditor* editor ) {
if ( editor ) {
UITabWidget* tabWidget = tabWidgetFromEditor( editor );
if ( tabWidget ) {
if ( !( mCurEditor->getDocument().isEmpty() &&
!tabWidget->getParent()->isType( UI_TYPE_SPLITTER ) ) ) {
tabWidget->removeTab( (UITab*)mCurEditor->getData() );
if ( !( editor->getDocument().isEmpty() &&
!tabWidget->getParent()->isType( UI_TYPE_SPLITTER ) &&
tabWidget->getTabCount() == 1 ) ) {
tabWidget->removeTab( (UITab*)editor->getData() );
}
}
}
@@ -117,11 +119,7 @@ UICodeEditor* App::createCodeEditor() {
[&]() { mWindow->toggleFullscreen(); } );
codeEditor->getDocument().setCommand( "open-file", [&] { openFileDialog(); } );
codeEditor->getDocument().setCommand( "console-toggle", [&] { mConsole->toggle(); } );
codeEditor->getDocument().setCommand( "close-doc", [&] {
if ( onTabCloseRequestCallback( mWindow ) ) {
closeCurrrentTab();
}
} );
codeEditor->getDocument().setCommand( "close-doc", [&] { tryTabClose( mCurEditor ); } );
codeEditor->getDocument().setCommand( "create-new", [&] {
auto d = createCodeEditorInTabWidget( tabWidgetFromEditor( mCurEditor ) );
d.first->getTabWidget()->setTabSelected( d.first );
@@ -303,13 +301,18 @@ UITabWidget* App::createEditorWithTabWidget( Node* parent ) {
tabWidget->setLayoutSizePolicy( SizePolicy::MatchParent, SizePolicy::MatchParent );
tabWidget->setParent( parent );
tabWidget->setTabsClosable( true );
tabWidget->setHideWhenNotNeeded( true );
tabWidget->setHideTabBarOnSingleTab( true );
tabWidget->setAllowRearrangeTabs( true );
tabWidget->addEventListener( Event::OnTabSelected, [&]( const Event* event ) {
UITabWidget* tabWidget = event->getNode()->asType<UITabWidget>();
mCurEditor = tabWidget->getSelectedTab()->getOwnedWidget()->asType<UICodeEditor>();
updateEditorTitle( mCurEditor );
mCurEditor->setFocus();
} );
tabWidget->setTabTryCloseCallback( [&]( UITab* tab ) -> bool {
tryTabClose( tab->getOwnedWidget()->asType<UICodeEditor>() );
return false;
} );
createCodeEditorInTabWidget( tabWidget );
return tabWidget;
}
@@ -502,12 +505,14 @@ void App::init( const std::string& file ) {
mUISceneNode = UISceneNode::New();
mUISceneNode->getUIThemeManager()->setDefaultFont( FontTrueType::New(
"NotoSans-Regular", resPath + "assets/fonts/NotoSans-Regular.ttf" ) );
Font* font =
FontTrueType::New( "NotoSans-Regular", resPath + "assets/fonts/NotoSans-Regular.ttf" );
Font* fontMono =
FontTrueType::New( "monospace", resPath + "assets/fonts/DejaVuSansMono.ttf" );
mUISceneNode->getUIThemeManager()->setDefaultFont( font );
SceneManager::instance()->add( mUISceneNode );
StyleSheetParser cssParser;