DemoGuiRoundtrip: add new dock for UI experiments (#1099)
...after investigating problems related to the management of docking pane contents
This commit is contained in:
parent
29246621df
commit
45b3a990f2
10 changed files with 355 additions and 24 deletions
BIN
data/icons/prerendered/16x16/panel-infobox.png
Normal file
BIN
data/icons/prerendered/16x16/panel-infobox.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.3 KiB |
|
|
@ -143,6 +143,10 @@ namespace ctrl {
|
|||
assetsPanelAction->signal_toggled().connect ( [&]() { onMenu_view_assets(); });
|
||||
actionGroup->add(assetsPanelAction);
|
||||
|
||||
infoboxPanelAction = ToggleAction::create("ViewInfoBox", StockID("panel_infobox"));
|
||||
infoboxPanelAction->signal_toggled().connect ( [&]() { onMenu_view_infobox(); });
|
||||
actionGroup->add(infoboxPanelAction);
|
||||
|
||||
timelinePanelAction = ToggleAction::create("ViewTimeline", StockID("panel_timeline"));
|
||||
timelinePanelAction->signal_toggled().connect( [&]() { onMenu_view_timeline(); });
|
||||
actionGroup->add(timelinePanelAction);
|
||||
|
|
@ -181,6 +185,7 @@ namespace ctrl {
|
|||
</menu>
|
||||
<menu action='ViewMenu'>
|
||||
<menuitem action='ViewAssets'/>
|
||||
<menuitem action='ViewInfoBox'/>
|
||||
<menuitem action='ViewTimeline'/>
|
||||
<menuitem action='ViewViewer'/>
|
||||
</menu>
|
||||
|
|
@ -314,6 +319,16 @@ namespace ctrl {
|
|||
unimplemented ("view assets");
|
||||
}
|
||||
|
||||
void
|
||||
onMenu_view_infobox()
|
||||
{
|
||||
/////////////////////////////////////////////////////////////////////////////////////TODO defunct since GTK-3 transition
|
||||
//if(!is_updating_action_state)
|
||||
// workspaceWindow.infoboxPanel->show(
|
||||
// infoboxPanelAction->get_active()); //////global -> InteractionDirector
|
||||
unimplemented ("view infobox");
|
||||
}
|
||||
|
||||
void
|
||||
onMenu_view_timeline()
|
||||
{
|
||||
|
|
@ -347,6 +362,7 @@ namespace ctrl {
|
|||
Glib::RefPtr<Gtk::ActionGroup> actionGroup;
|
||||
|
||||
Glib::RefPtr<Gtk::ToggleAction> assetsPanelAction;
|
||||
Glib::RefPtr<Gtk::ToggleAction> infoboxPanelAction;
|
||||
Glib::RefPtr<Gtk::ToggleAction> timelinePanelAction;
|
||||
Glib::RefPtr<Gtk::ToggleAction> viewerPanelAction;
|
||||
|
||||
|
|
|
|||
88
src/gui/panel/infobox-panel.cpp
Normal file
88
src/gui/panel/infobox-panel.cpp
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
InfoBoxPanel - A dockable panel to expose information and parameters
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2017, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
* *****************************************************/
|
||||
|
||||
|
||||
/** @file infobox-panel.cpp
|
||||
** Implementation of a (dockable) panel to display and manipulate parameters.
|
||||
*/
|
||||
|
||||
#include "gui/gtk-base.hpp"
|
||||
#include "gui/panel/infobox-panel.hpp"
|
||||
|
||||
namespace gui {
|
||||
namespace panel{
|
||||
|
||||
InfoBoxPanel::InfoBoxPanel (workspace::PanelManager& panelManager, Gdl::DockItem& dockItem)
|
||||
: Panel(panelManager, dockItem, getTitle(), getStockID())
|
||||
, twoParts_(Gtk::ORIENTATION_VERTICAL)
|
||||
, buttons_()
|
||||
, frame_("UI Integration Experiments")
|
||||
, scroller_()
|
||||
{
|
||||
twoParts_.pack_start(frame_);
|
||||
twoParts_.pack_start(buttons_, Gtk::PACK_SHRINK);
|
||||
|
||||
buttons_.set_layout(Gtk::BUTTONBOX_START);
|
||||
|
||||
// buttons to trigger experiments
|
||||
button_1_.set_label("_bang");
|
||||
button_1_.set_use_underline();
|
||||
button_1_.set_tooltip_markup("<b>Experiment 1</b>:\ntrigger Proc-GUI roundtrip");
|
||||
button_1_.signal_clicked().connect(
|
||||
mem_fun(*this, &InfoBoxPanel::experiment_1));
|
||||
buttons_.add(button_1_);
|
||||
//(End)buttons...
|
||||
|
||||
frame_.add(scroller_);
|
||||
frame_.set_border_width(5);
|
||||
|
||||
scroller_.set_shadow_type(Gtk::SHADOW_NONE);
|
||||
scroller_.set_border_width(10);
|
||||
// scroller_.add(canvas_);///////////////////////////TODO add text display box here...
|
||||
|
||||
// show everything....
|
||||
this->add(twoParts_);
|
||||
this->show_all();
|
||||
}
|
||||
|
||||
const char*
|
||||
InfoBoxPanel::getTitle()
|
||||
{
|
||||
return _("InfoBox");
|
||||
}
|
||||
|
||||
const gchar*
|
||||
InfoBoxPanel::getStockID()
|
||||
{
|
||||
return "panel_infobox";
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
InfoBoxPanel::experiment_1()
|
||||
{
|
||||
frame_.set_label("Experiment 1... BANG");
|
||||
}
|
||||
|
||||
|
||||
}}// namespace gui::panel
|
||||
71
src/gui/panel/infobox-panel.hpp
Normal file
71
src/gui/panel/infobox-panel.hpp
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
infobox-panel.hpp - A dockable panel to expose information and parameters
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2017, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** @file infobox-panel.hpp
|
||||
** A (dockable) panel to display and manage information and parameters.
|
||||
** Such an »Info Box« typically exposes detail settings from some other component
|
||||
** currently selected, and allows to access those in a non modal fashion.
|
||||
**
|
||||
** @todo as of 8/2017 this is (ab)used as space for UI / Proc-Layer integration experiments
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef GUI_PANEL_INFOBOX_PANEL_H
|
||||
#define GUI_PANEL_INFOBOX_PANEL_H
|
||||
|
||||
|
||||
#include "gui/panel/panel.hpp"
|
||||
|
||||
namespace gui {
|
||||
namespace panel{
|
||||
|
||||
class InfoBoxPanel
|
||||
: public Panel
|
||||
{
|
||||
public:
|
||||
/** Build a new InfoBox-Panel
|
||||
* @param PanelManager The owner panel manager widget.
|
||||
* @param DockItem The GdlDockItem that will host this panel.
|
||||
*
|
||||
* @todo as of 8/2017 this is placeholder code for UI experiments...
|
||||
*/
|
||||
InfoBoxPanel (workspace::PanelManager&, Gdl::DockItem&);
|
||||
|
||||
|
||||
static const char* getTitle(); ///< @deprecated need better design of the PanelManager /////TICKET #1026
|
||||
static const gchar* getStockID();
|
||||
|
||||
private:
|
||||
Gtk::Box twoParts_;
|
||||
Gtk::ButtonBox buttons_;
|
||||
Gtk::Button button_1_;
|
||||
Gtk::Frame frame_;
|
||||
Gtk::ScrolledWindow scroller_;
|
||||
|
||||
void experiment_1();
|
||||
};
|
||||
|
||||
|
||||
}}// namespace gui::panel
|
||||
#endif /*GUI_PANEL_INFOBOX_PANEL_H*/
|
||||
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
/** @file video-display-widget.cpp
|
||||
** Implementation of video display, embedded into the UI.
|
||||
** @deprecated defunct since the transition to GTK-3
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
/** @file video-display-widget.hpp
|
||||
** Widget to create a video display embedded into the UI
|
||||
** @deprecated defunct since the transition to GTK-3
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -39,7 +40,13 @@ using namespace gui::output; //////////////////////////////////////////////////
|
|||
|
||||
namespace gui {
|
||||
namespace widget {
|
||||
|
||||
|
||||
/**
|
||||
* @todo the first UI draft included a video displayer widget library implementation,
|
||||
* Unfortunately, this became defunct with the switch to GTK-3. And a fun fact is,
|
||||
* even while Lumiera is a video editing application, we did not yet reach the state
|
||||
* as to care for video display ourselves. Someone (TM) need to care for this!
|
||||
*/
|
||||
class VideoDisplayWidget
|
||||
: public Gtk::DrawingArea
|
||||
{
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include "gui/panel/assets-panel.hpp"
|
||||
#include "gui/panel/viewer-panel.hpp"
|
||||
#include "gui/panel/infobox-panel.hpp"
|
||||
#include "gui/panel/timeline-panel.hpp"
|
||||
#include "gui/panel/timeline-panel-obsolete.hpp"
|
||||
|
||||
|
|
@ -47,6 +48,7 @@ namespace workspace {
|
|||
PanelManager::panelDescriptionList[] = {
|
||||
PanelManager::Panel<TimelinePanel>(),
|
||||
PanelManager::Panel<TimelinePanelObsolete>(),
|
||||
PanelManager::Panel<InfoBoxPanel>(),
|
||||
PanelManager::Panel<ViewerPanel>(),
|
||||
PanelManager::Panel<AssetsPanel>()
|
||||
};
|
||||
|
|
@ -236,7 +238,7 @@ namespace workspace {
|
|||
{
|
||||
///////////////////////////////TICKET #1026 : code smell, use types directly instead
|
||||
panel::Panel* assetsPanel = createPanel_by_name("AssetsPanel");
|
||||
panel::Panel* viewerPanel = createPanel_by_name("ViewerPanel");
|
||||
panel::Panel* viewerPanel = createPanel_by_name("InfoBoxPanel");
|
||||
panel::Panel* timelinePanel = createPanel_by_name("TimelinePanel");
|
||||
|
||||
dock_.add_item(assetsPanel->getDockItem(),Gdl::DOCK_LEFT);
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ namespace workspace {
|
|||
|
||||
addStockIconSet(factory, "panel-assets", "panel_assets", _("_Assets"));
|
||||
addStockIconSet(factory, "panel-viewer", "panel_viewer", _("_Viewer"));
|
||||
addStockIconSet(factory, "panel-infobox", "panel_infobox", _("_InfoBox"));
|
||||
addStockIconSet(factory, "panel-timeline", "panel_timeline",_("_Timeline"));
|
||||
addStockIconSet(factory, "panel-timeline", "panel_timeline_obsolete",_("_ZombieTimeline"));
|
||||
|
||||
|
|
|
|||
|
|
@ -2522,7 +2522,7 @@ we need a test setup for this investigation.
|
|||
* realistic: shall reflect the situation in our actual UI
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiClipWidget" creator="Ichthyostega" modifier="Ichthyostega" created="201611180114" modified="201612012311" tags="GuiPattern design draft" changecount="22">
|
||||
<div title="GuiClipWidget" creator="Ichthyostega" modifier="Ichthyostega" created="201611180114" modified="201708311414" tags="GuiPattern design draft" changecount="25">
|
||||
<pre>//The representation of a [[media clip|Clip]] for manipulation by the user within the UI.//
|
||||
Within Lumiera, a clip is conceived as a //chunk of media,// which can be handled in compound. Clip as such is an abstract concept, which is treated with minimal assumptions...
|
||||
* we know that a clip has //media content,// which need not be uniform and can be inherently structured (e.g. several media, several channels)
|
||||
|
|
@ -2535,7 +2535,7 @@ To start with, a clip can be rendered in ''abridged form'', which means that the
|
|||
|
||||
The next step in a series of progressively more detailed clip representations is the ''compact form'', which still focuses on handling the clip as an unit, while at least indicating some of the inherent structuring. Essentially, the clip here is represented as a //strip of rendered preview content,// decorated with some overlays. One of these overlays is the //ID pane,// which resembles the arrangement known from the abridged form: The icon here is always the [[Placement]] icon, followed by the expand widget and the ID label. Again, this pane is aligned such as to remain in sight. Then, there is a pair of overlays, termed the //boundary panes,// which indicate the begin and the end of the clip respectively. Graphically, these overlays should be rendered in a more subtle way, just enough to be recognisable. The boundary panes are the attachment areas for //trimming gestures,// as opposed to moving and dragging the whole clip or shuffle editing of the content. Moreover, these boundary panes compensate for the alignment of the ID pane, which mostly keeps the latter in sight. As this might counterfeit the visual perception of scrolling, the boundary panes serve to give a clear visual clue when reaching the boundary of an extended clip. Optionally, another overlay is rendered at the upper side of the clip's area, to indicate attached effect(s). It is quite possible for these effect decorations not to cover the whole temporal span of the clip.
|
||||
|
||||
A yet more detailed display of the clip's internals is exposed in the ''expanded form.'' Here, the clip is displayed as an window pane holding nested clip displays, which in turn might again be abridged, compact or ({{red{maybe 11/16}}}) even expanded. This enclosing clip window pane should be rendered semi transparent, just to indicate the enclosing whole. The individual clip displays embedded therein serve to represent individual media parts or channels, or individual attached effects. Due to the recursive nature of Lumiera's HighLevelModel, each of these parts exposes essentially the same controls, allowing to control the respective aspects of the part in question. We may even consider {{red{unclear as of 11/16}}} to allow accessing the parts of a VirtualClip, this way turning the enclosing clip into a lightweight container ({{red{11/2016 give proper credit for this concept! Who proposed this initially in 2008? was this Thosten Wilms?}}}
|
||||
A yet more detailed display of the clip's internals is exposed in the ''expanded form.'' Here, the clip is displayed as a window pane holding nested clip displays, which in turn might again be abridged, compact or ({{red{maybe 11/16}}}) even expanded. This enclosing clip window pane should be rendered semi transparent, just to indicate the enclosing whole. The individual clip displays embedded therein serve to represent individual media parts or channels, or individual attached effects. Due to the recursive nature of Lumiera's HighLevelModel, each of these parts exposes essentially the same controls, allowing to control the respective aspects of the part in question. We may even consider ({{red{unclear as of 11/16}}}) to allow accessing the parts of a VirtualClip, this way turning the enclosing clip into a lightweight container ({{red{11/2016 give proper credit for this concept! Who proposed this initially in 2008? was this Thosten Wilms?}}}
|
||||
|
||||
Finally, there can be a situation where it is just not possible to render any of the aforementioned display styles properly, due to size constraints. Especially, this happens when zooming out such as to show a whole sequence or even timeline in overview. We need to come up with a scheme of ''graceful display degradation'' to deal with this situation -- just naively attempting to render any form might easily send our UI thread into a minute long blocking render state, for no good reason. Instead, in such cases display should fall back to a ''degraded form''
|
||||
* showing just a placeholder rectangle, when the clip (or any other media element) will cover a temporal span relating to at least 1 pixel width (configurable trigger condition)
|
||||
|
|
@ -2561,7 +2561,7 @@ A prime consideration regarding this whole clip presentation strategy is the per
|
|||
!clip content rendering
|
||||
In a typical editing application, the user can expect to get some visual clue regarding the media content of a clip. For example, sound clips can be visualised as waveform, while movie clips might feature a sequence of images taken from the video. Our intention is to ''use our own rendering engine'' to produce these thumbnails. In fact, our engine is perfectly suited for this task: it has precisely the necessary media decoding and rendering abilities, plus it offers an elaborate system of priorities and deadlines, allowing to throttle the load produced by thumbnail generation. In addition to all those qualities, our engine is planned to be complemented by an "intelligent" frame cache, which, given proper parametrisation, ensures the frequently requested thumbnails will be available for quick display. For this approach to work, we need to provide some infrastructure
|
||||
* we need to configure and maintain a //preview rendering strategy.//
|
||||
* the request for rendering has to be cast "just somewhere" as message, obviously via the UI-Bus
|
||||
* the request for rendering has to be cast "just somewhere" as message, possibly via the UI-Bus
|
||||
* actually rendered content will likewise arrive asynchronously as message via UI-Bus.
|
||||
* we still need to work out how buffer management for this task will be handled; it should be a derivative of typical buffer management for display rendering.
|
||||
* the clip widget needs to provide a simple placeholder drawing to mark the respective space in the interface, until the actual preview arrives.
|
||||
|
|
@ -2873,6 +2873,20 @@ In order to build a sensible plan for our timeline structure, we need to investi
|
|||
}}}
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiDockingPanel" creator="Ichthyostega" modifier="Ichthyostega" created="201708311617" modified="201708311619" changecount="2">
|
||||
<pre>//Management of dockable content panes//
|
||||
Within each top level application window, the usable screen real estate can be split and arranged into a number of standard view building blocks. Each of this //panels// follows a specific preconfigured basic layout -- these are hard coded, yet customisable in detail. There is a finite list of such panel types available:
|
||||
* the [[timeline display|GuiTimelineView]]
|
||||
* the media viewer
|
||||
* asset management
|
||||
* information box
|
||||
|
||||
!Instantiation
|
||||
!Placing and addressing of embedded contents
|
||||
A specific problem arises insofar other parts of the UI need to create, address and control some UI entities, which at the same time exist as part of a docking panel. This is a problem of crosscutting concerns: UI control and interaction structure should not be mingled with the generic concern to maintain a component as part of a screen layout. Unfortunately, standard UI toolkit sets are designed incredibly naive ways when it comes to interaction design, and the only available alternative is to rely on a framework, which come with a hard-wired philosophy.
|
||||
As a result, we're forced to build our UI from components lacking the decision between //ownership and control.//
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiFacade" modifier="Ichthyostega" created="200902080719" modified="201708041501" tags="def spec" changecount="1">
|
||||
<pre>special LayerSeparationInterface which serves the main purpose to load the GuiStarterPlugin, thus bringing up the Lumiera GTK UI at application start.
|
||||
|
||||
|
|
@ -3133,7 +3147,7 @@ Applying a diff changes the structure, that is, the structure of the local model
|
|||
Together this means we get a fix up stage after model changes, where the display is re-adjusted to fit the new situation. This works in concert with the [[display manager|TimelineDisplayManager]] representing only those elements as actual widgets, which get a real chance to become visible. This way we can build on the assumption that the actual number of widgets to be managed any time remains so small as to get away with simple linear list processing. It remains to be seen how far this assumption can be pushed -- the problem is that the GTK container components don't support anything beyond such simple linear list processing; there isn't even a call to remove all child widgets of a container in a single pass.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="GuiTopLevel" creator="Ichthyostega" modifier="YourName" created="201701261944" modified="201705192326" tags="GuiPattern spec draft" changecount="11">
|
||||
<div title="GuiTopLevel" creator="Ichthyostega" modifier="Ichthyostega" created="201701261944" modified="201708311555" tags="GuiPattern spec draft" changecount="12">
|
||||
<pre>To a large extent, the Lumiera user interface is built around a //backbone structure,// known as the UI-Bus.
|
||||
But there are some dedicated top-level entities, collaborating to maintain a consistent application lifecycle
|
||||
;Application
|
||||
|
|
@ -3150,6 +3164,7 @@ But there are some dedicated top-level entities, collaborating to maintain a con
|
|||
:the InteractionDirector is the root controller and corresponds to the [[root object in session|ModelRootMO]].
|
||||
;Window List
|
||||
:organise and maintain the top level workspace windows
|
||||
:which involves the interplay with [[docking panels|GuiDockingPanel]]
|
||||
;Notification Façade
|
||||
:attachment point for lower layers and anyone in need to "talk to the UI"
|
||||
:the GuiNotificationFacade is a LayerSeparationInterface and integrated with Lumiera's interface system
|
||||
|
|
@ -3476,20 +3491,20 @@ The concept of a //focus goal// has several ramifications: for one it implies th
|
|||
To create such a system is an ambitious goal. We can not reach it in a single step, since it entails the formation of a whole intermediary layer, on top of the //usual UI mechanics,// yet below the concrete UI interactions. Especially, we'd need to clarify the meaning of //perspective,// we need to decide on the relation of top level frame, individual view, layout, focus and //current location within the UI.// On a second thought, building such a system implies we'll have to live with an intermediary state of evolution, where parts of the new framework are already in place without interfering with common conventional usage of the interface as-is.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="InteractionDirector" creator="Ichthyostega" modifier="Ichthyostega" created="201702102146" modified="201703021658" tags="def draft" changecount="9">
|
||||
<div title="InteractionDirector" creator="Ichthyostega" modifier="Ichthyostega" created="201702102146" modified="201708311600" tags="def draft" changecount="21">
|
||||
<pre>//the top-level controller within the UI.//
|
||||
In Lumiera, the structures of the model within the [[Session]] (the so called HighLevelModel) are mapped onto corresponding [[tangible UI entities|UI-Element]], which serve as a front-end to represent those entities towards the user. Within the model, there is a //conceptual root node// -- which logically corresponds to the session itself. This [[root element in model|ModelRootMO]] links together the actual top-level entities, which are the (multiple) timelines, with the asset management and defaults and rules configuration within the session.
|
||||
In Lumiera, the structures of the model within the [[Session]] (the so called HighLevelModel) are mapped onto corresponding [[tangible UI entities|UI-Element]], which serve as a front-end to represent those entities towards the user. Within this model, there is a //conceptual root node// -- which logically corresponds to the session itself. This [[root element in model|ModelRootMO]] links together the actual top-level entities, which are the (multiple) timelines, together with the asset management and defaults and rules configuration within the session.
|
||||
|
||||
And the counterpart of this root element within the UI is the {{{InteractionDirector}}}, a top-level controller. As a controller, it responds to actions like opening a specific timeline, entering the asset management section, opening and closing of the session as a whole, and even shutdown of the application as a whole. Beyond that, the Interaction Director is the connection joint to that part of the UI which deals with global interaction state: this relates to questions about "the current element", "the focus", "where we are right now" (in what "location" or "room" within the UI) and also what tangible interface controller we're actually using (mouse, keyboard, graphics pen, hardware controller, touch screen).
|
||||
And the counterpart of this root element within the UI is the {{{InteractionDirector}}}, a top-level controller. As a controller, it responds to actions like opening a specific timeline, entering the asset management section, the request for help, and actions like saving, opening and closing of the session as a whole. Beyond that, the Interaction Director is the connection joint to that part of the UI which deals with global interaction state: this topic relates to questions about "the current element", "the focus", "where we are right now" (in what "location" or "room" within the UI) and also what tangible interface controller we're actually using (mouse, keyboard, graphics pen, hardware controller, touch screen).
|
||||
|
||||
Why do we need a connection joint between those parts?
|
||||
Because issuing any actions on the model within the session -- i.e. any editing operation -- is like forming a sentence: we need to spell out //what we want to do// and we need to spell out the subject and the object of our activity. And any one of these can, and will in fact, be sometimes derived //from the context of the interaction.// Because, given the right context, it is almost clear what you want to do -- you just need to fill in that tiny little bit of information to actually make it happen. In Lumiera we want to build a good UI, which is an UI well suited to this very human way of interacting with one's environment within a given context.
|
||||
Because issuing any actions on the model within the session -- i.e. any editing operation -- is like forming a sentence: we need to spell out //what we want to do// and we need to spell out the subject and the object of our activity. And any one of these can, and will in fact, be sometimes derived //from the context of the interaction.// Because, given the right context, it is almost clear what you want to do -- you just need to fill in that tiny little bit of information to actually make it happen. In Lumiera we strive at building a good UI, which is an UI well suited to this very human way of interacting with one's environment within a given context.
|
||||
> to understand this, it is best &rarr; to [[look at some examples|CommandInvocationAnalysis]]
|
||||
|
||||
!Children
|
||||
The InteractionDirector is part of the model, and thus we have to distinguish between model children and other UI components held as children.
|
||||
;model
|
||||
:anything related to global structures falls into that category
|
||||
:anything related to //core concerns// and session global structures falls into that category
|
||||
:* some parts might be related to ''Asset management''
|
||||
:* some concerns might touch questions of ''configuration''
|
||||
:* and interaction state is closely related to ''persistent UI state''
|
||||
|
|
@ -3500,6 +3515,8 @@ The InteractionDirector is part of the model, and thus we have to distinguish be
|
|||
:* the [[Navigator]] is a special controller to handle moving the SpotLocator
|
||||
|
||||
!Collaborations
|
||||
* several global actions are exposed here, like opening the session and creating a new timeline.<br/>Such operations are typically bound into menu and action buttons, and in turn invoke [[commands|CommandHandling]] into the Session
|
||||
* some further actions involve the interplay with the [[docking panel manager|GuiDockingPanel]], like e.g. instantiating a new [[timeline display|GuiTimelineView]] into a timeline pane.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="InteractionState" creator="Ichthyostega" modifier="Ichthyostega" created="201511280402" modified="201704171824" tags="def design GuiIntegration draft" changecount="9">
|
||||
|
|
|
|||
|
|
@ -1345,7 +1345,15 @@
|
|||
<node CREATED="1501939235834" ID="ID_1160414548" MODIFIED="1501939239653" TEXT="Menü-Eintrag"/>
|
||||
<node CREATED="1501939240217" ID="ID_325602880" MODIFIED="1501939252187" TEXT="triggert Proc-Command"/>
|
||||
<node CREATED="1501939252991" ID="ID_31140909" MODIFIED="1501939261802" TEXT="dieses sendet Mark zurück"/>
|
||||
<node CREATED="1501939263030" ID="ID_381890207" MODIFIED="1501939271161" TEXT="ein Widget im UI reagiert"/>
|
||||
<node CREATED="1501939263030" ID="ID_381890207" MODIFIED="1501939271161" TEXT="ein Widget im UI reagiert">
|
||||
<node CREATED="1504200793444" ID="ID_340215113" MODIFIED="1504200869294" TEXT="mißbrauche InfoBox">
|
||||
<arrowlink COLOR="#f5dd67" DESTINATION="ID_19179662" ENDARROW="Default" ENDINCLINATION="743;-1563;" ID="Arrow_ID_1195014928" STARTARROW="None" STARTINCLINATION="-452;605;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504200974955" ID="ID_1182589184" MODIFIED="1504200979244" TEXT="neues Dock">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -2636,7 +2644,7 @@
|
|||
<node CREATED="1493752899224" ID="ID_83018735" MODIFIED="1493752906171" TEXT="WindowManager war gar nicht so wichtig"/>
|
||||
<node CREATED="1493752906736" ID="ID_1191055389" MODIFIED="1493752913019" TEXT="er ist jetzt nur noch eine WindowList"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485550950793" FOLDED="true" ID="ID_50100583" MODIFIED="1501776606450" TEXT="#1048 rectify UI Lifecycle">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485550950793" FOLDED="true" ID="ID_50100583" MODIFIED="1504191390388" TEXT="#1048 rectify UI Lifecycle">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node COLOR="#338800" CREATED="1485550968230" ID="ID_164246989" MODIFIED="1493846257532" TEXT="GtkLumiera darf kein Singleton mehr sein">
|
||||
<linktarget COLOR="#80b3ef" DESTINATION="ID_164246989" ENDARROW="Default" ENDINCLINATION="-42;-74;" ID="Arrow_ID_401425747" SOURCE="ID_1145950660" STARTARROW="None" STARTINCLINATION="387;0;"/>
|
||||
|
|
@ -2699,6 +2707,14 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504191345606" ID="ID_1249897876" MODIFIED="1504200661963" TEXT="#1026 cleanup PanelManager">
|
||||
<linktarget COLOR="#e1a169" DESTINATION="ID_1249897876" ENDARROW="Default" ENDINCLINATION="-636;0;" ID="Arrow_ID_446871395" SOURCE="ID_125942292" STARTARROW="None" STARTINCLINATION="-311;562;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193029907" ID="ID_1020871440" MODIFIED="1504193240635" TEXT="#1104 how to instruct actions through panels">
|
||||
<linktarget COLOR="#806893" DESTINATION="ID_1020871440" ENDARROW="Default" ENDINCLINATION="-3;460;" ID="Arrow_ID_412107208" SOURCE="ID_1943521361" STARTARROW="Default" STARTINCLINATION="-618;-18;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1485551018975" FOLDED="true" ID="ID_1865473127" MODIFIED="1495207303040" TEXT="obsoletes Project & Controller">
|
||||
<node CREATED="1485551030086" ID="ID_1052165402" MODIFIED="1485551034969" TEXT="in GtkLumiera definiert"/>
|
||||
<node CREATED="1485551035413" ID="ID_1861899005" MODIFIED="1485551056342" TEXT="tatsächlich im Panel (Basisklasse) gespeichert"/>
|
||||
|
|
@ -2863,7 +2879,7 @@
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1485902684454" ID="ID_1435239012" MODIFIED="1485902691584" TEXT="Eventgetriebene Oberfläche"/>
|
||||
<node CREATED="1485902692556" ID="ID_1729615218" MODIFIED="1485902698503" TEXT="wird einmal Verdrahtet"/>
|
||||
<node CREATED="1485902692556" ID="ID_1729615218" MODIFIED="1504190891319" TEXT="wird einmal verdrahtet"/>
|
||||
<node CREATED="1485902722360" ID="ID_1003456982" MODIFIED="1485902735679">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
|
@ -3319,8 +3335,8 @@
|
|||
<linktarget COLOR="#8e2a4d" DESTINATION="ID_1909730752" ENDARROW="Default" ENDINCLINATION="190;-96;" ID="Arrow_ID_1543429248" SOURCE="ID_1507239589" STARTARROW="None" STARTINCLINATION="-103;109;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485549081728" ID="ID_1122969153" MODIFIED="1501859685960" TEXT="globale Aktionen">
|
||||
<arrowlink COLOR="#824f68" DESTINATION="ID_826011549" ENDARROW="Default" ENDINCLINATION="-906;-1187;" ID="Arrow_ID_1373278707" STARTARROW="Default" STARTINCLINATION="870;255;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485549081728" ID="ID_1122969153" MODIFIED="1504193591717" TEXT="globale Aktionen">
|
||||
<arrowlink COLOR="#824f68" DESTINATION="ID_826011549" ENDARROW="Default" ENDINCLINATION="-906;-1187;" ID="Arrow_ID_1373278707" STARTARROW="Default" STARTINCLINATION="873;259;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1488419973349" ID="ID_1855791702" MODIFIED="1488419978923" TEXT="brauche ein Konzept">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -3341,8 +3357,8 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1485909456513" HGAP="55" ID="ID_576215675" MODIFIED="1488494847859" TEXT="top-level-Verdrahtung" VSHIFT="1">
|
||||
<arrowlink COLOR="#8c95b2" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="129;-562;" ID="Arrow_ID_1284182756" STARTARROW="None" STARTINCLINATION="948;154;"/>
|
||||
<node CREATED="1485909456513" HGAP="55" ID="ID_576215675" MODIFIED="1504193318475" TEXT="top-level-Verdrahtung" VSHIFT="1">
|
||||
<arrowlink COLOR="#8c95b2" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="129;-562;" ID="Arrow_ID_1284182756" STARTARROW="None" STARTINCLINATION="883;143;"/>
|
||||
<node CREATED="1485909560027" ID="ID_1949656657" MODIFIED="1487039010986" TEXT="baut den UI-Rahen auf"/>
|
||||
<node CREATED="1485909491412" ID="ID_1205077540" MODIFIED="1487039041806" TEXT="macht die Applikation betriebsbereit">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -3537,6 +3553,38 @@
|
|||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1504193112577" ID="ID_1851236797" MODIFIED="1504193156816">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Problem: Zusammenarbeit
|
||||
</p>
|
||||
<p>
|
||||
mit docking panels
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193163264" ID="ID_1943521361" MODIFIED="1504200729866" TEXT="#1104 how to instruct actions through panels">
|
||||
<arrowlink COLOR="#806893" DESTINATION="ID_1020871440" ENDARROW="Default" ENDINCLINATION="-3;460;" ID="Arrow_ID_412107208" STARTARROW="Default" STARTINCLINATION="-618;-18;"/>
|
||||
<arrowlink COLOR="#b37033" DESTINATION="ID_945788817" ENDARROW="None" ENDINCLINATION="-67;-71;" ID="Arrow_ID_61914" STARTARROW="Default" STARTINCLINATION="-618;-18;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193392483" ID="ID_912677550" MODIFIED="1504193412602" TEXT="PanelManager muß umgeschrieben werden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193400426" ID="ID_1575758873" MODIFIED="1504193413641" TEXT="PanelManager muß umgezogen werden">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193443636" ID="ID_1002171467" MODIFIED="1504193590886" TEXT="Abstraktion herausdestilieren">
|
||||
<arrowlink COLOR="#4f6595" DESTINATION="ID_385011645" ENDARROW="Default" ENDINCLINATION="377;-49;" ID="Arrow_ID_1185839720" STARTARROW="None" STARTINCLINATION="-267;66;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1488672665626" ID="ID_590886664" MODIFIED="1488672675810" TEXT="Grundlagen für Command-handling"/>
|
||||
<node CREATED="1487313769425" ID="ID_728232011" MODIFIED="1493847644509" TEXT="Grundlagen für InteractionControl">
|
||||
<node CREATED="1488419854029" ID="ID_932507511" MODIFIED="1488419868604" TEXT="erst mal: Konzept">
|
||||
|
|
@ -3733,14 +3781,23 @@
|
|||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1504193329508" ID="ID_629544763" MODIFIED="1504193337495" TEXT="Aufgabe: docking panels">
|
||||
<node CREATED="1504193340786" ID="ID_751993082" MODIFIED="1504194190741" TEXT="PanelManager hier integrieren">
|
||||
<linktarget COLOR="#667799" DESTINATION="ID_751993082" ENDARROW="Default" ENDINCLINATION="184;-4;" ID="Arrow_ID_520294875" SOURCE="ID_509456873" STARTARROW="None" STARTINCLINATION="184;-4;"/>
|
||||
</node>
|
||||
<node CREATED="1504193354056" ID="ID_385011645" MODIFIED="1504193590886" TEXT="Abstraktion zur Steuerung schaffen">
|
||||
<linktarget COLOR="#4f6595" DESTINATION="ID_385011645" ENDARROW="Default" ENDINCLINATION="377;-49;" ID="Arrow_ID_1185839720" SOURCE="ID_1002171467" STARTARROW="None" STARTINCLINATION="-267;66;"/>
|
||||
</node>
|
||||
<node CREATED="1504194145622" ID="ID_511626836" MODIFIED="1504194154361" TEXT="Addressieren einzelner Kind-Komponenten"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485555987832" ID="ID_313705636" MODIFIED="1485555992480" TEXT="Wiring">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1485555999110" ID="ID_376092703" MODIFIED="1485556008921" TEXT="top-level macht GtkLumiera im ctor"/>
|
||||
<node CREATED="1485556011260" ID="ID_1618308499" MODIFIED="1485556026758" TEXT="backlink zum Manager"/>
|
||||
<node CREATED="1486943522965" ID="ID_36527267" MODIFIED="1501859722646" TEXT="top-level-Kontext">
|
||||
<node CREATED="1486943522965" ID="ID_36527267" MODIFIED="1504193318475" TEXT="top-level-Kontext">
|
||||
<linktarget COLOR="#4f547b" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="-424;-2038;" ID="Arrow_ID_134552555" SOURCE="ID_984712012" STARTARROW="None" STARTINCLINATION="2623;0;"/>
|
||||
<linktarget COLOR="#8c95b2" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="129;-562;" ID="Arrow_ID_1284182756" SOURCE="ID_576215675" STARTARROW="None" STARTINCLINATION="948;154;"/>
|
||||
<linktarget COLOR="#8c95b2" DESTINATION="ID_36527267" ENDARROW="Default" ENDINCLINATION="129;-562;" ID="Arrow_ID_1284182756" SOURCE="ID_576215675" STARTARROW="None" STARTINCLINATION="883;143;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node CREATED="1488494592496" ID="ID_1586259377" MODIFIED="1488494596905" TEXT="UI-Bus"/>
|
||||
<node CREATED="1488494579346" ID="ID_1182508289" MODIFIED="1488494603368" TEXT="UiManager"/>
|
||||
|
|
@ -3776,7 +3833,8 @@
|
|||
<node CREATED="1485556046703" ID="ID_50463095" MODIFIED="1485556055302" TEXT="geht das über den Bus alleine?">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1485556056206" ID="ID_509456873" MODIFIED="1485556067214" TEXT="...sonst muß der PanelManager helfen">
|
||||
<node CREATED="1485556056206" ID="ID_509456873" MODIFIED="1504194198981" TEXT="...sonst muß der PanelManager helfen">
|
||||
<arrowlink COLOR="#667799" DESTINATION="ID_751993082" ENDARROW="Default" ENDINCLINATION="184;-4;" ID="Arrow_ID_520294875" STARTARROW="None" STARTINCLINATION="184;-4;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -5139,7 +5197,77 @@
|
|||
</node>
|
||||
<node CREATED="1476376943985" HGAP="52" ID="ID_1422206856" MODIFIED="1480639197111" TEXT="Viewer" VSHIFT="10"/>
|
||||
<node CREATED="1480639186172" HGAP="45" ID="ID_838667304" MODIFIED="1480639193064" TEXT="Mixer" VSHIFT="28"/>
|
||||
<node CREATED="1476376927660" HGAP="35" ID="ID_688318446" MODIFIED="1479434903774" TEXT="Docks" VSHIFT="12"/>
|
||||
<node CREATED="1476376927660" HGAP="35" ID="ID_688318446" MODIFIED="1479434903774" TEXT="Docks" VSHIFT="12">
|
||||
<node CREATED="1504200504235" ID="ID_125942292" MODIFIED="1504200942450" TEXT="PanelManager muß umgebaut werden">
|
||||
<arrowlink COLOR="#e1a169" DESTINATION="ID_1249897876" ENDARROW="Default" ENDINCLINATION="-636;0;" ID="Arrow_ID_446871395" STARTARROW="None" STARTINCLINATION="-311;562;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504193029907" ID="ID_945788817" MODIFIED="1504200718235" TEXT="#1104 how to instruct actions through panels">
|
||||
<linktarget COLOR="#b37033" DESTINATION="ID_945788817" ENDARROW="None" ENDINCLINATION="-67;-71;" ID="Arrow_ID_61914" SOURCE="ID_1943521361" STARTARROW="Default" STARTINCLINATION="-618;-18;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504200512737" ID="ID_320931452" MODIFIED="1504200533688" TEXT="Müllhaufen">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node CREATED="1504200743610" ID="ID_1973994759" MODIFIED="1504200749701" TEXT="vorläufig....">
|
||||
<node CREATED="1504200750905" ID="ID_1728645080" MODIFIED="1504200758236" TEXT="gibt es noch eine ZombieTimeline"/>
|
||||
<node CREATED="1504200758920" ID="ID_19179662" MODIFIED="1504200869294" TEXT="hab ich schon mal eine InfoBox dazugebaut">
|
||||
<linktarget COLOR="#f5dd67" DESTINATION="ID_19179662" ENDARROW="Default" ENDINCLINATION="743;-1563;" ID="Arrow_ID_1195014928" SOURCE="ID_340215113" STARTARROW="None" STARTINCLINATION="-452;605;"/>
|
||||
<node CREATED="1504200878312" ID="ID_1934842950" MODIFIED="1504201022642" TEXT="...für #1099 DemoGuiRoundtrip">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...um mal was im UI anzeigen zu können
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1504200907356" ID="ID_1939871955" MODIFIED="1504201013274" TEXT="neues Dock">
|
||||
<node CREATED="1504201024836" ID="ID_541911572" MODIFIED="1504201028272" TEXT="brauche Icon"/>
|
||||
<node CREATED="1504201506172" ID="ID_739793394" MODIFIED="1504201515984" TEXT="nimm vorerst Asset-Icon">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1504201029004" ID="ID_1898190659" MODIFIED="1504201035659" TEXT="als SVG machen...">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1504201038435" ID="ID_1569870904" MODIFIED="1504201040142" TEXT="Anleitung">
|
||||
<node CREATED="1504201044122" ID="ID_612955500" MODIFIED="1504201053741" TEXT="SVG in data/icons/svg"/>
|
||||
<node CREATED="1504201192870" ID="ID_823572488" MODIFIED="1504201229080" TEXT="Dokument-Gröe anscheinend egal">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...wird zwar vom Skript ausgelesen,
|
||||
</p>
|
||||
<p>
|
||||
aber nicht weiterverwendet.
|
||||
</p>
|
||||
<p>
|
||||
Die Icon-Größen ergeben sich aus den Boxes auf 'plate'
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1504201055449" ID="ID_1652674635" MODIFIED="1504201072930" TEXT="braucht 'artwork:'-Layer"/>
|
||||
<node CREATED="1504201074566" ID="ID_1803123712" MODIFIED="1504201083665" TEXT="braucht Sub-Layer 'plate'">
|
||||
<node CREATED="1504201085348" ID="ID_971103885" MODIFIED="1504201089023" TEXT="dort bounding-boxes"/>
|
||||
<node CREATED="1504201089491" ID="ID_1411697919" MODIFIED="1504201100534" TEXT="deren Größe in PX ist die Icon-Größe"/>
|
||||
<node CREATED="1504201101314" ID="ID_813225733" MODIFIED="1504201139201" TEXT="brauche 16, 22, 32"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1504200915915" ID="ID_335470074" MODIFIED="1504200935868" TEXT="später wird das ein nichtmodaler Parameter-Editor"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1477342616175" HGAP="37" ID="ID_954058801" MODIFIED="1477342623660" TEXT="Workspace" VSHIFT="33">
|
||||
<node CREATED="1477342624942" ID="ID_56920104" MODIFIED="1477342628449" TEXT="ist-Zustand">
|
||||
<node CREATED="1477342634181" ID="ID_930340610" MODIFIED="1477342640272" TEXT="ein globaler WindowManager">
|
||||
|
|
@ -12001,7 +12129,7 @@
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485548830035" HGAP="5" ID="ID_1295711115" MODIFIED="1485548844056" TEXT="Nutzen" VSHIFT="17">
|
||||
<icon BUILTIN="bell"/>
|
||||
<node CREATED="1485548856639" ID="ID_1677281474" MODIFIED="1485548861522" TEXT="spezifische Aktionen">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485548894522" FOLDED="true" ID="ID_826011549" MODIFIED="1502452702879" TEXT="Problem: globale Aktionen">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1485548894522" FOLDED="true" ID="ID_826011549" MODIFIED="1504193591717" TEXT="Problem: globale Aktionen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -12026,7 +12154,7 @@
|
|||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#824f68" DESTINATION="ID_826011549" ENDARROW="Default" ENDINCLINATION="-906;-1187;" ID="Arrow_ID_1373278707" SOURCE="ID_1122969153" STARTARROW="Default" STARTINCLINATION="870;255;"/>
|
||||
<linktarget COLOR="#824f68" DESTINATION="ID_826011549" ENDARROW="Default" ENDINCLINATION="-906;-1187;" ID="Arrow_ID_1373278707" SOURCE="ID_1122969153" STARTARROW="Default" STARTINCLINATION="873;259;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node COLOR="#338800" CREATED="1485555902731" FOLDED="true" ID="ID_1913236669" MODIFIED="1492444338102" TEXT="#1070 how to bind session commands into UI actions">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue