mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-05-28 17:16:29 +03:00
Fixed minor bug in UISplitter that caused to incorrectly calculate its size after being dragged.
Code clean up regarding the status bar (WIP).
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 12.0.1, 2024-01-30T00:00:55. -->
|
||||
<!-- Written by QtCreator 12.0.1, 2024-01-31T01:11:26. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
@@ -114,7 +114,7 @@
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{388e5431-b31b-42b3-b9ad-9002d279d75d}</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">11</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">10</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">19</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
|
||||
@@ -279,17 +279,19 @@ void UISplitter::updateFromDrag() {
|
||||
|
||||
if ( UIOrientation::Horizontal == mOrientation ) {
|
||||
mSplitPartition = StyleSheetLength(
|
||||
eeclamp<Float>(
|
||||
( mSplitter->getPixelsPosition().x + mSplitter->getPixelsSize().getWidth() ) /
|
||||
( mSize.getWidth() - mPaddingPx.Left - mPaddingPx.Right ) * 100,
|
||||
0, 100 ),
|
||||
eeclamp<Float>( mSplitter->getPixelsPosition().x /
|
||||
( mSize.getWidth() - mPaddingPx.Left - mPaddingPx.Right -
|
||||
mSplitter->getPixelsSize().getWidth() ) *
|
||||
100,
|
||||
0, 100 ),
|
||||
StyleSheetLength::Percentage );
|
||||
} else {
|
||||
mSplitPartition = StyleSheetLength(
|
||||
eeclamp<Float>(
|
||||
( mSplitter->getPixelsPosition().y + mSplitter->getPixelsSize().getHeight() ) /
|
||||
( mSize.getHeight() - mPaddingPx.Top - mPaddingPx.Bottom ) * 100,
|
||||
0, 100 ),
|
||||
eeclamp<Float>( mSplitter->getPixelsPosition().y /
|
||||
( mSize.getHeight() - mPaddingPx.Top - mPaddingPx.Bottom -
|
||||
mSplitter->getPixelsSize().getHeight() ) *
|
||||
100,
|
||||
0, 100 ),
|
||||
StyleSheetLength::Percentage );
|
||||
}
|
||||
|
||||
|
||||
@@ -3655,6 +3655,7 @@ void App::init( const LogLevel& logLevel, std::string file, const Float& pidelDe
|
||||
mMainSplitter->setSplitPartition(
|
||||
StyleSheetLength( mConfig.windowState.statusBarPartition ) );
|
||||
mStatusBar = mUISceneNode->find<UIStatusBar>( "status_bar" );
|
||||
mPluginManager->setMainSplitter( mMainSplitter );
|
||||
|
||||
#if EE_PLATFORM != EE_PLATFORM_EMSCRIPTEN
|
||||
mFileWatcher = new efsw::FileWatcher();
|
||||
|
||||
@@ -241,7 +241,7 @@ void GitPlugin::updateStatusBarSync() {
|
||||
mStatusButton = UIPushButton::New();
|
||||
mStatusButton->setLayoutSizePolicy( SizePolicy::WrapContent, SizePolicy::MatchParent );
|
||||
mStatusButton->setParent( mStatusBar );
|
||||
mStatusButton->setId( "status_git" );
|
||||
mStatusButton->setId( "git_status" );
|
||||
mStatusButton->setClass( "status_but" );
|
||||
mStatusButton->setIcon( iconDrawable( "source-control", 10 ) );
|
||||
mStatusButton->reloadStyle( true, true );
|
||||
@@ -250,12 +250,14 @@ void GitPlugin::updateStatusBarSync() {
|
||||
if ( childCount > 2 )
|
||||
mStatusButton->toPosition( mStatusBar->getChildCount() - 2 );
|
||||
|
||||
mStatusButton->onClick( [this]( const Event* ) {
|
||||
if ( mTab ) {
|
||||
mTab->setTabSelected();
|
||||
if ( mGitStatus.totalInserts || mGitStatus.totalDeletions )
|
||||
mPanelSwicher->getListBox()->setSelected( 1 );
|
||||
}
|
||||
mStatusButton->on( Event::MouseClick, [this]( const Event* event ) {
|
||||
if ( nullptr == mTab )
|
||||
return;
|
||||
mTab->setTabSelected();
|
||||
if ( event->asMouseEvent()->getFlags() & EE_BUTTON_RMASK )
|
||||
mPanelSwicher->getListBox()->setSelected( 0 );
|
||||
else if ( mGitStatus.totalInserts || mGitStatus.totalDeletions )
|
||||
mPanelSwicher->getListBox()->setSelected( 1 );
|
||||
} );
|
||||
}
|
||||
|
||||
|
||||
@@ -139,6 +139,10 @@ UICodeEditorSplitter* PluginManager::getSplitter() const {
|
||||
return mSplitter;
|
||||
}
|
||||
|
||||
UISplitter* PluginManager::getMainSplitter() const {
|
||||
return mMainSplitter;
|
||||
}
|
||||
|
||||
UISceneNode* PluginManager::getUISceneNode() const {
|
||||
return mSplitter ? mSplitter->getUISceneNode() : nullptr;
|
||||
}
|
||||
@@ -263,6 +267,10 @@ void PluginManager::setSplitter( UICodeEditorSplitter* splitter ) {
|
||||
mSplitter = splitter;
|
||||
}
|
||||
|
||||
void PluginManager::setMainSplitter( UISplitter* splitter ) {
|
||||
mMainSplitter = splitter;
|
||||
}
|
||||
|
||||
void PluginManager::setFileSystemListener( FileSystemListener* listener ) {
|
||||
if ( listener == mFileSystemListener )
|
||||
return;
|
||||
|
||||
@@ -297,8 +297,12 @@ class PluginManager {
|
||||
|
||||
const PluginDefinition* getDefinitionIndex( const Int64& index ) const;
|
||||
|
||||
/** This is the code editor splitter. Where documents/terminals/etc are opened */
|
||||
UICodeEditorSplitter* getSplitter() const;
|
||||
|
||||
/** This is the splitter between the code editor splitter and the bottom panel. */
|
||||
UISplitter* getMainSplitter() const;
|
||||
|
||||
UISceneNode* getUISceneNode() const;
|
||||
|
||||
const std::string& getWorkspaceFolder() const;
|
||||
@@ -355,6 +359,7 @@ class PluginManager {
|
||||
std::map<std::string, PluginDefinition> mDefinitions;
|
||||
std::shared_ptr<ThreadPool> mThreadPool;
|
||||
UICodeEditorSplitter* mSplitter{ nullptr };
|
||||
UISplitter* mMainSplitter{ nullptr };
|
||||
FileSystemListener* mFileSystemListener{ nullptr };
|
||||
Mutex mSubscribedPluginsMutex;
|
||||
Mutex mPluginsFSSubsMutex;
|
||||
@@ -369,6 +374,8 @@ class PluginManager {
|
||||
|
||||
void setSplitter( UICodeEditorSplitter* splitter );
|
||||
|
||||
void setMainSplitter( UISplitter* splitter );
|
||||
|
||||
void setFileSystemListener( FileSystemListener* listener );
|
||||
|
||||
void subscribeFileSystemListener();
|
||||
|
||||
@@ -6,58 +6,7 @@ namespace ecode {
|
||||
|
||||
StatusBuildOutputController::StatusBuildOutputController( UISplitter* mainSplitter,
|
||||
UISceneNode* uiSceneNode, App* app ) :
|
||||
mMainSplitter( mainSplitter ),
|
||||
mUISceneNode( uiSceneNode ),
|
||||
mApp( app ),
|
||||
mSplitter( mApp->getSplitter() ) {}
|
||||
|
||||
void StatusBuildOutputController::toggle() {
|
||||
if ( nullptr == mContainer ) {
|
||||
show();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( mMainSplitter->getLastWidget() != nullptr ) {
|
||||
if ( mMainSplitter->getLastWidget() == mContainer ) {
|
||||
hide();
|
||||
} else {
|
||||
show();
|
||||
}
|
||||
} else {
|
||||
show();
|
||||
}
|
||||
}
|
||||
|
||||
void StatusBuildOutputController::hide() {
|
||||
if ( mContainer && mContainer->isVisible() ) {
|
||||
mContainer->setParent( mUISceneNode );
|
||||
mContainer->setVisible( false );
|
||||
mApp->getStatusBar()->updateState();
|
||||
if ( mSplitter->getCurWidget() )
|
||||
mSplitter->getCurWidget()->setFocus();
|
||||
}
|
||||
}
|
||||
|
||||
void StatusBuildOutputController::show() {
|
||||
if ( nullptr == mContainer ) {
|
||||
mMainSplitter->updateLayout();
|
||||
createContainer();
|
||||
}
|
||||
|
||||
if ( !mContainer->isVisible() ) {
|
||||
mApp->hideLocateBar();
|
||||
mApp->hideSearchBar();
|
||||
mApp->hideGlobalSearchBar();
|
||||
if ( mMainSplitter->getLastWidget() != nullptr ) {
|
||||
mMainSplitter->getLastWidget()->setVisible( false );
|
||||
mMainSplitter->getLastWidget()->setParent( mUISceneNode );
|
||||
}
|
||||
mContainer->setParent( mMainSplitter );
|
||||
mContainer->setVisible( true );
|
||||
mContainer->getFirstChild()->setFocus();
|
||||
mApp->getStatusBar()->updateState();
|
||||
}
|
||||
}
|
||||
StatusBarElement( mainSplitter, uiSceneNode, app ) {}
|
||||
|
||||
static std::string getProjectOutputParserTypeToString( const ProjectOutputParserTypes& type ) {
|
||||
switch ( type ) {
|
||||
@@ -369,6 +318,16 @@ void StatusBuildOutputController::runClean( const std::string& buildName,
|
||||
}
|
||||
}
|
||||
|
||||
UIWidget* StatusBuildOutputController::getWidget() {
|
||||
return mContainer;
|
||||
}
|
||||
|
||||
UIWidget* StatusBuildOutputController::createWidget() {
|
||||
if ( nullptr == mContainer )
|
||||
createContainer();
|
||||
return mContainer;
|
||||
}
|
||||
|
||||
UICodeEditor* StatusBuildOutputController::getContainer() {
|
||||
return mBuildOutput;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define ECODE_STATUSBUILDOUTPUTCONTROLLER_HPP
|
||||
|
||||
#include "projectbuild.hpp"
|
||||
#include "uistatusbar.hpp"
|
||||
#include "widgetcommandexecuter.hpp"
|
||||
#include <eepp/system/luapattern.hpp>
|
||||
#include <eepp/ui/tools/uicodeeditorsplitter.hpp>
|
||||
@@ -34,22 +35,20 @@ struct PatternHolder {
|
||||
ProjectBuildOutputParserConfig config;
|
||||
};
|
||||
|
||||
class StatusBuildOutputController {
|
||||
class StatusBuildOutputController : public StatusBarElement {
|
||||
public:
|
||||
StatusBuildOutputController( UISplitter* mainSplitter, UISceneNode* uiSceneNode, App* app );
|
||||
|
||||
void toggle();
|
||||
|
||||
void hide();
|
||||
|
||||
void show();
|
||||
|
||||
void runBuild( const std::string& buildName, const std::string& buildType,
|
||||
const ProjectBuildOutputParser& outputParser = {} );
|
||||
|
||||
void runClean( const std::string& buildName, const std::string& buildType,
|
||||
const ProjectBuildOutputParser& outputParser = {} );
|
||||
|
||||
UIWidget* getWidget();
|
||||
|
||||
UIWidget* createWidget();
|
||||
|
||||
UICodeEditor* getContainer();
|
||||
|
||||
void showIssues();
|
||||
@@ -57,11 +56,6 @@ class StatusBuildOutputController {
|
||||
void showBuildOutput();
|
||||
|
||||
protected:
|
||||
UISplitter* mMainSplitter{ nullptr };
|
||||
UISceneNode* mUISceneNode{ nullptr };
|
||||
App* mApp{ nullptr };
|
||||
UICodeEditorSplitter* mSplitter{ nullptr };
|
||||
|
||||
UIRelativeLayoutCommandExecuter* mContainer{ nullptr };
|
||||
UICodeEditor* mBuildOutput{ nullptr };
|
||||
UISelectButton* mButOutput{ nullptr };
|
||||
|
||||
@@ -5,61 +5,16 @@ namespace ecode {
|
||||
|
||||
StatusTerminalController::StatusTerminalController( UISplitter* mainSplitter,
|
||||
UISceneNode* uiSceneNode, App* app ) :
|
||||
mMainSplitter( mainSplitter ),
|
||||
mUISceneNode( uiSceneNode ),
|
||||
mApp( app ),
|
||||
mSplitter( mApp->getSplitter() ) {}
|
||||
StatusBarElement( mainSplitter, uiSceneNode, app ) {}
|
||||
|
||||
void StatusTerminalController::toggle() {
|
||||
if ( nullptr == mUITerminal ) {
|
||||
show();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( mMainSplitter->getLastWidget() != nullptr ) {
|
||||
if ( mMainSplitter->getLastWidget() == mUITerminal ) {
|
||||
hide();
|
||||
} else {
|
||||
show();
|
||||
}
|
||||
} else {
|
||||
show();
|
||||
}
|
||||
UIWidget* StatusTerminalController::getWidget() {
|
||||
return mUITerminal;
|
||||
}
|
||||
|
||||
void StatusTerminalController::hide() {
|
||||
if ( mUITerminal && mUITerminal->isVisible() ) {
|
||||
mUITerminal->setParent( mUISceneNode );
|
||||
mUITerminal->setVisible( false );
|
||||
mApp->getStatusBar()->updateState();
|
||||
if ( mSplitter->getCurWidget() )
|
||||
mSplitter->getCurWidget()->setFocus();
|
||||
}
|
||||
}
|
||||
|
||||
void StatusTerminalController::show() {
|
||||
if ( nullptr == mUITerminal ) {
|
||||
mMainSplitter->updateLayout();
|
||||
UIWidget* StatusTerminalController::createWidget() {
|
||||
if ( mUITerminal == nullptr )
|
||||
mUITerminal = createTerminal();
|
||||
if ( !mUITerminal )
|
||||
return;
|
||||
mUITerminal->setId( "terminal" );
|
||||
mUITerminal->setVisible( false );
|
||||
}
|
||||
|
||||
if ( !mUITerminal->isVisible() ) {
|
||||
mApp->hideLocateBar();
|
||||
mApp->hideSearchBar();
|
||||
mApp->hideGlobalSearchBar();
|
||||
if ( mMainSplitter->getLastWidget() != nullptr ) {
|
||||
mMainSplitter->getLastWidget()->setVisible( false );
|
||||
mMainSplitter->getLastWidget()->setParent( mUISceneNode );
|
||||
}
|
||||
mUITerminal->setParent( mMainSplitter );
|
||||
mUITerminal->setVisible( true );
|
||||
mUITerminal->setFocus();
|
||||
mApp->getStatusBar()->updateState();
|
||||
}
|
||||
return getWidget();
|
||||
}
|
||||
|
||||
UITerminal* StatusTerminalController::getUITerminal() {
|
||||
@@ -122,6 +77,7 @@ UITerminal* StatusTerminalController::createTerminal( const std::string& working
|
||||
mApp->registerUnlockedCommands( *term );
|
||||
mApp->getSplitter()->registerSplitterCommands( *term );
|
||||
term->setFocus();
|
||||
term->setId( "terminal" );
|
||||
return term;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef ECODE_STATUSTERMINALCONTROLLER_HPP
|
||||
#define ECODE_STATUSTERMINALCONTROLLER_HPP
|
||||
|
||||
#include "uistatusbar.hpp"
|
||||
|
||||
#include <eepp/ui/tools/uicodeeditorsplitter.hpp>
|
||||
#include <eepp/ui/uiscenenode.hpp>
|
||||
#include <eepp/ui/uisplitter.hpp>
|
||||
@@ -15,24 +17,18 @@ namespace ecode {
|
||||
|
||||
class App;
|
||||
|
||||
class StatusTerminalController {
|
||||
class StatusTerminalController : public StatusBarElement {
|
||||
public:
|
||||
StatusTerminalController( UISplitter* mainSplitter, UISceneNode* uiSceneNode, App* app );
|
||||
|
||||
void toggle();
|
||||
UIWidget* getWidget();
|
||||
|
||||
void hide();
|
||||
|
||||
void show();
|
||||
UIWidget* createWidget();
|
||||
|
||||
UITerminal* getUITerminal();
|
||||
|
||||
protected:
|
||||
UISplitter* mMainSplitter{ nullptr };
|
||||
UISceneNode* mUISceneNode{ nullptr };
|
||||
App* mApp{ nullptr };
|
||||
UITerminal* mUITerminal{ nullptr };
|
||||
UICodeEditorSplitter* mSplitter{ nullptr };
|
||||
|
||||
UITerminal* createTerminal( const std::string& workingDir = "", std::string program = "",
|
||||
const std::vector<std::string>& args = {} );
|
||||
|
||||
@@ -1,10 +1,67 @@
|
||||
#include "uistatusbar.hpp"
|
||||
#include "ecode.hpp"
|
||||
#include "uistatusbar.hpp"
|
||||
#include <eepp/ui/uiscenenode.hpp>
|
||||
#include <eepp/window/window.hpp>
|
||||
|
||||
namespace ecode {
|
||||
|
||||
StatusBarElement::StatusBarElement( UISplitter* mainSplitter, UISceneNode* uiSceneNode, App* app ) :
|
||||
mMainSplitter( mainSplitter ),
|
||||
mUISceneNode( uiSceneNode ),
|
||||
mApp( app ),
|
||||
mSplitter( mApp->getSplitter() ) {}
|
||||
|
||||
void StatusBarElement::toggle() {
|
||||
if ( nullptr == getWidget() ) {
|
||||
show();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( mMainSplitter->getLastWidget() != nullptr ) {
|
||||
if ( mMainSplitter->getLastWidget() == getWidget() ) {
|
||||
hide();
|
||||
} else {
|
||||
show();
|
||||
}
|
||||
} else {
|
||||
show();
|
||||
}
|
||||
}
|
||||
|
||||
void StatusBarElement::hide() {
|
||||
if ( getWidget() && getWidget()->isVisible() ) {
|
||||
getWidget()->setParent( mUISceneNode );
|
||||
getWidget()->setVisible( false );
|
||||
mApp->getStatusBar()->updateState();
|
||||
if ( mSplitter->getCurWidget() )
|
||||
mSplitter->getCurWidget()->setFocus();
|
||||
}
|
||||
}
|
||||
|
||||
void StatusBarElement::show() {
|
||||
if ( nullptr == getWidget() ) {
|
||||
mMainSplitter->updateLayout();
|
||||
createWidget();
|
||||
if ( nullptr == getWidget() )
|
||||
return;
|
||||
getWidget()->setVisible( false );
|
||||
}
|
||||
|
||||
if ( !getWidget()->isVisible() ) {
|
||||
mApp->hideLocateBar();
|
||||
mApp->hideSearchBar();
|
||||
mApp->hideGlobalSearchBar();
|
||||
if ( mMainSplitter->getLastWidget() != nullptr ) {
|
||||
mMainSplitter->getLastWidget()->setVisible( false );
|
||||
mMainSplitter->getLastWidget()->setParent( mUISceneNode );
|
||||
}
|
||||
getWidget()->setParent( mMainSplitter );
|
||||
getWidget()->setVisible( true );
|
||||
getWidget()->setFocus();
|
||||
mApp->getStatusBar()->updateState();
|
||||
}
|
||||
}
|
||||
|
||||
UIStatusBar* UIStatusBar::New() {
|
||||
return eeNew( UIStatusBar, () );
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#ifndef ECODE_UISTATUSBAR_HPP
|
||||
#define ECODE_UISTATUSBAR_HPP
|
||||
|
||||
#include <eepp/ui/tools/uicodeeditorsplitter.hpp>
|
||||
#include <eepp/ui/uilinearlayout.hpp>
|
||||
#include <eepp/ui/uisplitter.hpp>
|
||||
#include <eepp/ui/widgetcommandexecuter.hpp>
|
||||
|
||||
using namespace EE;
|
||||
@@ -11,6 +13,27 @@ namespace ecode {
|
||||
|
||||
class App;
|
||||
|
||||
class StatusBarElement {
|
||||
public:
|
||||
StatusBarElement( UISplitter* mainSplitter, UISceneNode* uiSceneNode, App* app );
|
||||
|
||||
virtual void toggle();
|
||||
|
||||
virtual void hide();
|
||||
|
||||
virtual void show();
|
||||
|
||||
virtual UIWidget* getWidget() = 0;
|
||||
|
||||
virtual UIWidget* createWidget() = 0;
|
||||
|
||||
protected:
|
||||
UISplitter* mMainSplitter;
|
||||
UISceneNode* mUISceneNode;
|
||||
App* mApp;
|
||||
Tools::UICodeEditorSplitter* mSplitter;
|
||||
};
|
||||
|
||||
class UIStatusBar : public UILinearLayout, public WidgetCommandExecuter {
|
||||
public:
|
||||
static UIStatusBar* New();
|
||||
|
||||
Reference in New Issue
Block a user