clean-up the WindowManager source (#1064)
in one of the preceding refactorings, I've extracted most of the functionality from WindowManager, to make it more focussed
This commit is contained in:
parent
1cb2567557
commit
a6fb10b9e0
4 changed files with 34 additions and 32 deletions
|
|
@ -101,7 +101,7 @@
|
||||||
** This interaction also implies, that the element automatically detaches itself at end of life.
|
** This interaction also implies, that the element automatically detaches itself at end of life.
|
||||||
** - **act**: send a \ref GenNode representing the action
|
** - **act**: send a \ref GenNode representing the action
|
||||||
** - **note**: _send_ a GenNode representing the _state mark_
|
** - **note**: _send_ a GenNode representing the _state mark_
|
||||||
** - **mark**: _receive_ a GenNode representing the _feedback_ or a replayed _state mark_
|
** - **mark**: _receive_ a GenNode representing the _feedback,_ a replayed _state mark_ or _generic message._
|
||||||
** - **diff**: ask to retrieve a diff, which
|
** - **diff**: ask to retrieve a diff, which
|
||||||
** - either is an incremental status update
|
** - either is an incremental status update
|
||||||
** - or is a from-scratch reconfiguration
|
** - or is a from-scratch reconfiguration
|
||||||
|
|
|
||||||
|
|
@ -66,17 +66,21 @@
|
||||||
** directed towards individual elements. The interactions at the bus are closely interrelated
|
** directed towards individual elements. The interactions at the bus are closely interrelated
|
||||||
** with the [elementary UI-Element operations](tangible.hpp).
|
** with the [elementary UI-Element operations](tangible.hpp).
|
||||||
**
|
**
|
||||||
** - **act**: send a [GenNode] representing the action
|
** - *act*: send a [GenNode] representing the action
|
||||||
** - in a first step, a command prototype is [outfitted](\ref InvocationTrail::bind()) with actual
|
** - in a first step, a command prototype is [outfitted](\ref InvocationTrail::bind()) with actual
|
||||||
** parameter values. -> see [InvocationTrail]
|
** parameter values. -> see [InvocationTrail]
|
||||||
** - the actual command invocation is triggered by a ["bang" message](\ref InvocationTrail::bang())
|
** - the actual command invocation is triggered by a ["bang" message](\ref InvocationTrail::bang())
|
||||||
** - **note**: send a [GenNode] representing the _state mark;_
|
** - *note*: send a [GenNode] representing the _state mark;_
|
||||||
** some (abstracted) presentation state manager is expected to listen to these messages,
|
** some (abstracted) presentation state manager is expected to listen to these messages,
|
||||||
** possibly recording state to be restored later. The contents of the _state mark_ message
|
** possibly recording state to be restored later. The contents of the _state mark_ message
|
||||||
** are implementation defined; knowledge about these is shared between individual widget
|
** are implementation defined; knowledge about these is shared between individual widget
|
||||||
** implementations and (partially, to some degree) the presentation state manager.
|
** implementations and (partially, to some degree) the presentation state manager.
|
||||||
** - **mark**: down-link communication to _feed back_ state updates or
|
** - *mark*: down-link communication to _feed back_ state updates or
|
||||||
** to replay previously recorded _state marks_
|
** to replay previously recorded _state marks._
|
||||||
|
**
|
||||||
|
** @note The *mark* verb can also be used as an (future) extension point to send _generic messages_ --
|
||||||
|
** possibly even to broadcast them to interested subjects, which have been registered with the
|
||||||
|
** \ref Nexus as targeted receivers...
|
||||||
**
|
**
|
||||||
** @warning deliberately the UI-Bus is **not threadsafe**.
|
** @warning deliberately the UI-Bus is **not threadsafe**.
|
||||||
** Only [Tangible] elements performing in the UI-event thread are allowed to talk to the bus.
|
** Only [Tangible] elements performing in the UI-event thread are allowed to talk to the bus.
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
using util::cStr;
|
using util::cStr;
|
||||||
using std::list;
|
using std::list;
|
||||||
using std::shared_ptr;
|
|
||||||
|
|
||||||
|
|
||||||
namespace gui {
|
namespace gui {
|
||||||
|
|
@ -39,20 +38,21 @@ namespace workspace {
|
||||||
|
|
||||||
|
|
||||||
WindowManager::WindowManager (UiManager& uiManager)
|
WindowManager::WindowManager (UiManager& uiManager)
|
||||||
: uiManager_(uiManager)
|
: uiManager_{uiManager}
|
||||||
|
, windowList_{}
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WindowManager::newWindow (gui::model::Project& source_project, gui::controller::Controller& source_controller)
|
WindowManager::newWindow (gui::model::Project& source_project, gui::controller::Controller& source_controller)
|
||||||
{
|
{
|
||||||
shared_ptr<WorkspaceWindow> window (new WorkspaceWindow{uiManager_, source_project, source_controller});
|
PWindow window (new WorkspaceWindow{uiManager_, source_project, source_controller});
|
||||||
REQUIRE(window);
|
REQUIRE(window);
|
||||||
|
|
||||||
window->signal_delete_event().connect(sigc::mem_fun(
|
window->signal_delete_event().connect(sigc::mem_fun(
|
||||||
this, &WindowManager::on_window_closed));
|
this, &WindowManager::on_window_closed));
|
||||||
|
|
||||||
windowList.push_back(window);
|
windowList_.push_back(window);
|
||||||
|
|
||||||
window->show();
|
window->show();
|
||||||
|
|
||||||
|
|
@ -66,11 +66,11 @@ namespace workspace {
|
||||||
REQUIRE(event);
|
REQUIRE(event);
|
||||||
REQUIRE(event->window);
|
REQUIRE(event->window);
|
||||||
|
|
||||||
list<shared_ptr<WorkspaceWindow>>::iterator iterator{windowList.begin()};
|
list<PWindow>::iterator iterator{windowList_.begin()};
|
||||||
|
|
||||||
while (iterator != windowList.end())
|
while (iterator != windowList_.end())
|
||||||
{
|
{
|
||||||
shared_ptr<WorkspaceWindow> workspace_window(*iterator);
|
PWindow workspace_window(*iterator);
|
||||||
REQUIRE(workspace_window);
|
REQUIRE(workspace_window);
|
||||||
|
|
||||||
Glib::RefPtr<Gdk::Window> window = workspace_window->get_window();
|
Glib::RefPtr<Gdk::Window> window = workspace_window->get_window();
|
||||||
|
|
@ -78,13 +78,13 @@ namespace workspace {
|
||||||
if (window->gobj() == event->window)
|
if (window->gobj() == event->window)
|
||||||
{
|
{
|
||||||
// This window has been closed
|
// This window has been closed
|
||||||
iterator = windowList.erase(iterator);
|
iterator = windowList_.erase(iterator);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
iterator++;
|
iterator++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (windowList.empty())
|
if (windowList_.empty())
|
||||||
{
|
{
|
||||||
// All windows have been closed - we should exit
|
// All windows have been closed - we should exit
|
||||||
Gtk::Main *main = Gtk::Main::instance(); ////////////////////////////////////////////////TICKET #1032 : use gtk::Application instead of gtk::Main
|
Gtk::Main *main = Gtk::Main::instance(); ////////////////////////////////////////////////TICKET #1032 : use gtk::Application instead of gtk::Main
|
||||||
|
|
@ -102,7 +102,7 @@ namespace workspace {
|
||||||
void
|
void
|
||||||
WindowManager::updateCloseWindowInMenus()
|
WindowManager::updateCloseWindowInMenus()
|
||||||
{
|
{
|
||||||
uiManager_.allowCloseWindow ( 1 < windowList.size());
|
uiManager_.allowCloseWindow ( 1 < windowList_.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,14 +22,13 @@
|
||||||
|
|
||||||
|
|
||||||
/** @file window-manager.hpp
|
/** @file window-manager.hpp
|
||||||
** Manager for all application windows and resources.
|
** Manager for all top level application windows.
|
||||||
** This file defines the global UI Manager class. The central WindowManager
|
** The central WindowManager instance is owned by the GtkLumiera object and
|
||||||
** instance is owned by the GtkLumiera object and initialised in GTK-main.
|
** initialised in GTK-main. The WindowManager allows to create new windows
|
||||||
** The WindowManager has the ability to create new windows integrated with
|
** integrated with the application framework.
|
||||||
** the application framework, to provide Icons and other resources and
|
|
||||||
** to set and access a general UI theme.
|
|
||||||
**
|
**
|
||||||
** @see gtk-lumiera.hpp
|
** @see gtk-lumiera.hpp
|
||||||
|
** @see ui-manager.hpp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -39,9 +38,8 @@
|
||||||
#include "gui/gtk-base.hpp"
|
#include "gui/gtk-base.hpp"
|
||||||
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <cairomm/cairomm.h>
|
|
||||||
#include <string>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
|
||||||
namespace gui {
|
namespace gui {
|
||||||
|
|
@ -54,28 +52,30 @@ namespace workspace {
|
||||||
class UiManager;
|
class UiManager;
|
||||||
class WorkspaceWindow;
|
class WorkspaceWindow;
|
||||||
|
|
||||||
using std::shared_ptr;
|
using std::list;
|
||||||
using std::string;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The centralised manager of all the windows,
|
* A centralised manager of all top level application windows.
|
||||||
* icons and resources within Lumiera's GUI.
|
|
||||||
*/
|
*/
|
||||||
class WindowManager
|
class WindowManager
|
||||||
: boost::noncopyable
|
: boost::noncopyable
|
||||||
{
|
{
|
||||||
|
using PWindow = shared_ptr<WorkspaceWindow>;
|
||||||
|
|
||||||
UiManager& uiManager_;
|
UiManager& uiManager_;
|
||||||
|
list<PWindow> windowList_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WindowManager (UiManager&);
|
WindowManager (UiManager&);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new window connected to a specified project and controller
|
* Create a new window connected to a specified project and controller
|
||||||
* @param source_project The project to connect the window to.
|
* @param source_project The project to connect the window to.
|
||||||
* @param source_controller The controller to connect the window to.
|
* @param source_controller The controller to connect the window to.
|
||||||
|
* @todo better way to connect to the model ////////////////////////////////////////////////////TICKET #1048 : rectify UI lifecycle
|
||||||
*/
|
*/
|
||||||
void newWindow (gui::model::Project&, gui::controller::Controller&);
|
void newWindow (gui::model::Project&, gui::controller::Controller&);
|
||||||
|
|
||||||
|
|
@ -84,7 +84,7 @@ namespace workspace {
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/** Event handler for when a window has been closed */
|
/** Event handler for when a window has been closed */
|
||||||
bool on_window_closed(GdkEventAny* event);
|
bool on_window_closed (GdkEventAny* event);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -100,8 +100,6 @@ namespace workspace {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
std::list<shared_ptr<workspace::WorkspaceWindow>> windowList;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue