[vlmc-devel] [PATCH 07/14] Core: Mark WITH_GUI on Widget-related code

yikei lu luyikei.qmltu at gmail.com
Tue Apr 12 14:11:53 CEST 2016


I think we can have a code like QUndoStack version of

Core::instance()
{
    static Core core;
    return &core;
}


2016-04-12 21:09 GMT+09:00 Hugo Beauzée-Luyssen <hugo at beauzee.fr>:
> On 04/12/2016 02:04 PM, yikei lu wrote:
>>
>> How about singleton in Command:: ?
>>
>> 2016-04-12 20:55 GMT+09:00 Hugo Beauzée-Luyssen <hugo at beauzee.fr>:
>>>
>>> On 04/11/2016 08:09 AM, Yikai Lu wrote:
>>>>
>>>>
>>>> ---
>>>>    src/Main/Core.cpp | 10 ++++++++--
>>>>    src/Main/Core.h   |  8 ++++++--
>>>>    2 files changed, 14 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/src/Main/Core.cpp b/src/Main/Core.cpp
>>>> index 2d496e1..6e20128 100644
>>>> --- a/src/Main/Core.cpp
>>>> +++ b/src/Main/Core.cpp
>>>> @@ -25,7 +25,9 @@
>>>>    #include <QCoreApplication>
>>>>    #include <QDir>
>>>>    #include <QtGlobal>
>>>> +#ifdef WITH_GUI
>>>>    #include <QUndoStack>
>>>> +#endif
>>>>    #include <QStandardPaths>
>>>>
>>>>
>>>> @@ -52,10 +54,12 @@ Core::Core()
>>>>        m_workspace = new Workspace( m_settings );
>>>>        m_workflow = new MainWorkflow( m_currentProject->settings() );
>>>>        m_workflowRenderer = new WorkflowRenderer( Backend::getBackend(),
>>>> m_workflow );
>>>> +#ifdef WITH_GUI
>>>>        m_undoStack = new QUndoStack;
>>>>
>>>>        connect( m_undoStack, &QUndoStack::cleanChanged,
>>>> m_currentProject,
>>>> &Project::cleanChanged );
>>>>        connect( m_currentProject, &Project::projectSaved, m_undoStack,
>>>> &QUndoStack::setClean );
>>>> +#endif
>>>>        connect( m_library, &Library::cleanStateChanged,
>>>> m_currentProject,
>>>> &Project::libraryCleanChanged );
>>>>        connect( m_currentProject, SIGNAL( projectLoaded( QString,
>>>> QString )
>>>> ),
>>>>                 m_recentProjects, SLOT( projectLoaded( QString, QString
>>>> ) )
>>>> );
>>>> @@ -69,7 +73,9 @@ Core::~Core()
>>>>    {
>>>>        m_settings->save();
>>>>        delete m_library;
>>>> +#ifdef WITH_GUI
>>>>        delete m_undoStack;
>>>> +#endif
>>>>        delete m_workflowRenderer;
>>>>        delete m_workflow;
>>>>        delete m_currentProject;
>>>> @@ -165,13 +171,13 @@ Core::workflow()
>>>>    {
>>>>        return m_workflow;
>>>>    }
>>>> -
>>>> +#ifdef WITH_GUI
>>>>    QUndoStack*
>>>>    Core::undoStack()
>>>>    {
>>>>        return m_undoStack;
>>>>    }
>>>> -
>>>> +#endif
>>>>    Library*
>>>>    Core::library()
>>>>    {
>>>> diff --git a/src/Main/Core.h b/src/Main/Core.h
>>>> index 72a36db..1ce1993 100644
>>>> --- a/src/Main/Core.h
>>>> +++ b/src/Main/Core.h
>>>> @@ -34,9 +34,9 @@ class Settings;
>>>>    class VlmcLogger;
>>>>    class Workspace;
>>>>    class WorkflowRenderer;
>>>> -
>>>> +#ifdef WITH_GUI
>>>>    class QUndoStack;
>>>> -
>>>> +#endif
>>>>    namespace Backend
>>>>    {
>>>>        class IBackend;
>>>> @@ -59,7 +59,9 @@ class Core : public QObject
>>>>            Project*                project();
>>>>            WorkflowRenderer*       workflowRenderer();
>>>>            MainWorkflow*           workflow();
>>>> +#ifdef WITH_GUI
>>>>            QUndoStack*             undoStack();
>>>> +#endif
>>>>            Library*                library();
>>>>            /**
>>>>             * @brief runtime returns the application runtime
>>>> @@ -88,7 +90,9 @@ class Core : public QObject
>>>>            Project*                m_currentProject;
>>>>            MainWorkflow*           m_workflow;
>>>>            WorkflowRenderer*       m_workflowRenderer;
>>>> +#ifdef WITH_GUI
>>>>            QUndoStack*             m_undoStack;
>>>> +#endif
>>>>            Library*                m_library;
>>>>            QElapsedTimer           m_timer;
>>>>    };
>>>>
>>>
>>> No, this should simply be moved out of the Core class. Where to is
>>> another
>>> question, but it this is a GUI component, it should be moved out of Core.
>>> The thing is, we will probably need something similar for the remote
>>> view,
>>> which needs to be built without UI (as in, without QtGui) support. I'm
>>> afraid we need to abstract the QUndoStack behind an interface, that will
>>> either be implemented by a plain QUndoStack, or our own implementation.
>>> We could also simply use our own implementation, but I'm not sure how
>>> this
>>> flies with QUndoView.
>>>
>>> Regards,
>>>
>>> _______________________________________________
>>> Vlmc-devel mailing list
>>> Vlmc-devel at videolan.org
>>> https://mailman.videolan.org/listinfo/vlmc-devel
>>
>> _______________________________________________
>> Vlmc-devel mailing list
>> Vlmc-devel at videolan.org
>> https://mailman.videolan.org/listinfo/vlmc-devel
>>
> I'll need you to elaborate :)
>
> _______________________________________________
> Vlmc-devel mailing list
> Vlmc-devel at videolan.org
> https://mailman.videolan.org/listinfo/vlmc-devel


More information about the Vlmc-devel mailing list