[vlmc-devel] [PATCH 07/14] Core: Mark WITH_GUI on Widget-related code
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Tue Apr 12 14:22:15 CEST 2016
On 04/12/2016 02:12 PM, yikei lu wrote:
> in Command:: namespace
>
> 2016-04-12 21:11 GMT+09:00 yikei lu <luyikei.qmltu at gmail.com>:
>> 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
> _______________________________________________
> Vlmc-devel mailing list
> Vlmc-devel at videolan.org
> https://mailman.videolan.org/listinfo/vlmc-devel
>
Oh ok I think I got it.
Indeed that solves the "where" question, now the "what should we do for
non GUI build which could still need an undo/redo feature" question
remains :)
More information about the Vlmc-devel
mailing list