diff --git a/data/icons/svg/panel-play.svg b/data/icons/svg/panel-play.svg
new file mode 100644
index 000000000..626d11a80
--- /dev/null
+++ b/data/icons/svg/panel-play.svg
@@ -0,0 +1,517 @@
+
+
+
+
+ Icon: play control
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+ Icon: play control
+
+
+
+ Ichthyostega
+
+
+
+
+ Lumiera.org
+
+
+ Icon to identify a play-control in the GUI
+
+prepared for Lumiera build :: Icon rendering
+ icon:panel-play
+ 2025
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/stage/ctrl/actions.hpp b/src/stage/ctrl/actions.hpp
index 3057554f9..fe6efc136 100644
--- a/src/stage/ctrl/actions.hpp
+++ b/src/stage/ctrl/actions.hpp
@@ -22,7 +22,9 @@
** Recommendation is to rely on `Gtk::Builder` and `Gtk::SimpleAction` instead.
** As of 5/2017, it is not clear to what extent this might force us into additional
** "desktop integration" we do not need nor want (like automatically connecting to
- ** D-Bus). For that reason, we'll postpone this transition for the time being /////////////////////TICKET #1068
+ ** D-Bus). For that reason, we'll postpone this transition for the time being /////////////////////TICKET #1068
+ ** @todo 5/2025 generally speaking, we use way too much registration relying on
+ ** matching textual IDs; This is a "boilerplaty" approach, we can do better ///////////////////////TICKET #1405 : all this registration with matching IDs is way too much "boilerplaty"
**
** @see ui-manager.hpp
** @see gtk-lumiera.cpp
@@ -147,6 +149,10 @@ namespace ctrl {
viewerPanelAction->signal_toggled().connect( [&]() { onMenu_view_viewer(); });
actionGroup->add(viewerPanelAction);
+ playPanelAction = ToggleAction::create("ViewPlay", StockID("panel_play"));
+ playPanelAction->signal_toggled().connect( [&]() { onMenu_view_play(); });
+ actionGroup->add(playPanelAction);
+
uiManager.insert_action_group(actionGroup);
@@ -180,6 +186,7 @@ namespace ctrl {
+
@@ -250,6 +257,7 @@ namespace ctrl {
assetsPanelAction->set_active (currentWindow.assetsPanel->is_shown());
timelinePanelAction->set_active(currentWindow.timelinePanel->is_shown());
viewerPanelAction->set_active (currentWindow.viewerPanel->is_shown());
+ ///////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1403 now we also have a playPanel
// is_updating_action_state = false;
*/
}
@@ -340,6 +348,16 @@ namespace ctrl {
unimplemented ("view viewer");
}
+ void
+ onMenu_view_play()
+ {
+ ///////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1403 added for sake of consistency : we have now also a palyer panel
+ /////////////////////////////////////////////////////////////////////////////////////TODO defunct since GTK-3 transition
+ //if(!is_updating_action_state)
+ // workspaceWindow.playPanel->show(viewerPanelAction->get_active()); //////global -> InteractionDirector
+ unimplemented ("view player");
+ }
+
// Temporary Junk
void
@@ -358,6 +376,7 @@ namespace ctrl {
Glib::RefPtr infoboxPanelAction;
Glib::RefPtr timelinePanelAction;
Glib::RefPtr viewerPanelAction;
+ Glib::RefPtr playPanelAction;
private: /* ===== Internals ===== */
diff --git a/src/stage/panel/play-panel.cpp b/src/stage/panel/play-panel.cpp
new file mode 100644
index 000000000..5846c04ac
--- /dev/null
+++ b/src/stage/panel/play-panel.cpp
@@ -0,0 +1,57 @@
+/*
+ PlayPanel - Dockable panel to hold the video display widgets and controls
+
+ Copyright (C)
+ 2008, Joel Holdsworth
+
+ **Lumiera** 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. See the file COPYING for further details.
+
+* *****************************************************************/
+
+
+/** @file play-panel.cpp
+ ** Implementation of a dockable panel for player control and timecode display
+ */
+
+#include "stage/gtk-base.hpp"
+#include "stage/panel/play-panel.hpp"
+
+#include "stage/workspace/workspace-window.hpp"
+#include "stage/ui-bus.hpp" ///////////////////////////////////TODO why are we forced to include this after workspace-window.hpp ?? Ambiguity between std::ref and boost::reference_wrapper
+#include "stage/display-service.hpp"
+
+
+using namespace Gtk; ///////////////////////////////////////////////////////////////////////////////TICKET #1071 no wildcard includes please!
+using namespace stage::widget; ///////////////////////////////////////////////////////////////////////////////TICKET #1071 no wildcard includes please!
+using namespace stage::controller; ///////////////////////////////////////////////////////////////////////////////TICKET #1071 no wildcard includes please!
+
+namespace stage {
+namespace panel {
+
+ PlayPanel::PlayPanel (workspace::PanelManager& panelManager
+ ,Gdl::DockItem& dockItem)
+ : Panel{panelManager, dockItem, getTitle(), getStockID()}
+ , display_{}
+ , demoPlayback_{[this](void * const buffer){ display_.pushFrame(buffer); }}
+ {
+ //----- Pack in the Widgets -----//
+ pack_start(display_, PACK_EXPAND_WIDGET);
+ }
+
+ const char*
+ PlayPanel::getTitle()
+ {
+ return _("Play");
+ }
+
+ const gchar*
+ PlayPanel::getStockID()
+ {
+ return "panel_play";
+ }
+
+
+}}// namespace stage::panel
diff --git a/src/stage/panel/play-panel.hpp b/src/stage/panel/play-panel.hpp
new file mode 100644
index 000000000..35102d46b
--- /dev/null
+++ b/src/stage/panel/play-panel.hpp
@@ -0,0 +1,47 @@
+/*
+ VIEWER-PANEL.hpp - Dockable panel to hold the video display widgets and controls
+
+ Copyright (C)
+ 2008, Joel Holdsworth
+
+ **Lumiera** 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. See the file COPYING for further details.
+
+*/
+
+/** @file play-panel.hpp
+ ** Definition of a dockable panel for playback control //////////////////////////////////////////////TICKET #1097 : me can haz more play panelz? wanna chase teh rat
+ */
+
+
+#ifndef STAGE_PANEL_PLAY_PANEL_H
+#define STAGE_PANEL_PLAY_PANEL_H
+
+
+#include "stage/panel/panel.hpp"
+#include "stage/widget/video-display-widget.hpp"
+#include "stage/ctrl/demo-controller.hpp"
+
+namespace stage {
+namespace panel {
+
+ /**
+ * A panel to display the video output.
+ */
+ class PlayPanel
+ : public Panel
+ {
+ widget::VideoDisplayWidget display_;
+ ctrl::DemoController demoPlayback_;
+
+ public:
+ PlayPanel (workspace::PanelManager&, Gdl::DockItem&);
+
+ static const char* getTitle();
+ static const gchar* getStockID();
+ };
+
+}}// namespace stage::panel
+#endif /*STAGE_PANEL_PLAY_PANEL_H*/
diff --git a/src/stage/panel/viewer-panel.cpp b/src/stage/panel/viewer-panel.cpp
index 50e7c515b..48bda5fcd 100644
--- a/src/stage/panel/viewer-panel.cpp
+++ b/src/stage/panel/viewer-panel.cpp
@@ -13,7 +13,7 @@
/** @file viewer-panel.cpp
- ** Implementation of a dockable panel to hold the video viewers
+ ** Implementation of a dockable panel with a video display widget
*/
#include "stage/gtk-base.hpp"
diff --git a/src/stage/panel/viewer-panel.hpp b/src/stage/panel/viewer-panel.hpp
index cb734fd2e..02b1cadae 100644
--- a/src/stage/panel/viewer-panel.hpp
+++ b/src/stage/panel/viewer-panel.hpp
@@ -12,7 +12,7 @@
*/
/** @file viewer-panel.hpp
- ** Definition of a dockable panel to hold the video viewers
+ ** Definition of a dockable panel to hold a video viewer
*/
diff --git a/src/stage/workspace/panel-manager.cpp b/src/stage/workspace/panel-manager.cpp
index faa38dc6b..a60a80c8a 100644
--- a/src/stage/workspace/panel-manager.cpp
+++ b/src/stage/workspace/panel-manager.cpp
@@ -22,7 +22,8 @@
#include "stage/workspace/panel-manager.hpp"
#include "stage/panel/assets-panel.hpp"
-#include "stage/panel/viewer-panel.hpp"
+#include "stage/panel/play-panel.hpp" //////////////////////////////////////////////////////////TICKET #1097 : need multiple play controls
+#include "stage/panel/viewer-panel.hpp" ///////////////////////////////////////////////////////////TICKET #1097 : need multiple viewers
#include "stage/panel/infobox-panel.hpp"
#include "stage/panel/timeline-panel.hpp"
@@ -41,6 +42,7 @@ namespace workspace {
PanelManager::Panel(),
PanelManager::Panel(),
PanelManager::Panel(),
+ PanelManager::Panel(),
PanelManager::Panel()
};
@@ -183,13 +185,13 @@ namespace workspace {
void
- PanelManager::splitPanel (panel::Panel& panel, Gtk::Orientation split_direction)
+ PanelManager::splitPanel (panel::Panel& panel, Gtk::Orientation split_direction, panel::Panel* toAdd)
{
-
- // Create the new panel
- const int index = getPanelType(&panel);
- panel::Panel *new_panel = createPanel_by_index(index);
-
+ if (not toAdd)
+ {// then duplicate the panel to split...
+ int index = getPanelType(&panel);
+ toAdd = createPanel_by_index(index);
+ }
// Dock the panel
Gdl::DockPlacement placement = Gdl::DOCK_NONE;
switch(split_direction)
@@ -209,7 +211,7 @@ namespace workspace {
}
panel.getDockItem().dock(
- new_panel->getDockItem(),placement);
+ toAdd->getDockItem(),placement);
}
@@ -240,13 +242,15 @@ namespace workspace {
PanelManager::createPanels()
{
///////////////////////////////TICKET #1026 : code smell, use types directly instead
- panel::Panel* assetsPanel = createPanel_by_name("AssetsPanel");
- panel::Panel* viewerPanel = createPanel_by_name("InfoBoxPanel");
+ panel::Panel* playPanel = createPanel_by_name("PlayPanel");
+ panel::Panel* viewerPanel = createPanel_by_name("ViewerPanel");
+ panel::Panel* infoBoxPanel = createPanel_by_name("InfoBoxPanel");
panel::Panel* timelinePanel = createPanel_by_name("TimelinePanel");
- dock_.add_item(assetsPanel->getDockItem(),Gdl::DOCK_LEFT);
+ dock_.add_item(viewerPanel->getDockItem(),Gdl::DOCK_LEFT);
dock_.add_item(timelinePanel->getDockItem(),Gdl::DOCK_BOTTOM);
- dock_.add_item(viewerPanel->getDockItem(),Gdl::DOCK_RIGHT);
+ dock_.add_item(infoBoxPanel->getDockItem(),Gdl::DOCK_RIGHT);
+ splitPanel(*infoBoxPanel, ORIENTATION_VERTICAL, playPanel);
}
diff --git a/src/stage/workspace/panel-manager.hpp b/src/stage/workspace/panel-manager.hpp
index 90029632a..38cbcaa5b 100644
--- a/src/stage/workspace/panel-manager.hpp
+++ b/src/stage/workspace/panel-manager.hpp
@@ -126,7 +126,7 @@ namespace workspace {
* @param panel The panel to split.
* @param split_direction The direction to split the panel in.
*/
- void splitPanel (panel::Panel& panel, Gtk::Orientation split_direction);
+ void splitPanel (panel::Panel& panel, Gtk::Orientation split_direction, panel::Panel* toAdd =nullptr);
public:
diff --git a/src/stage/workspace/ui-style.cpp b/src/stage/workspace/ui-style.cpp
index 3ea13f26d..5b7c79660 100644
--- a/src/stage/workspace/ui-style.cpp
+++ b/src/stage/workspace/ui-style.cpp
@@ -190,10 +190,11 @@ namespace workspace {
*/
void
UiStyle::registerStockItems()
- {
+ { ////////////////////////////////////////////////////////////////////TICKET #1405 : all this registration with matching IDs is way too much "boilerplaty"
Glib::RefPtr factory = Gtk::IconFactory::create();
addStockIconSet(factory, "panel-assets", "panel_assets", _("_Assets"));
+ addStockIconSet(factory, "panel-play", "panel_play", _("_Play"));
addStockIconSet(factory, "panel-viewer", "panel_viewer", _("_Viewer"));
addStockIconSet(factory, "panel-infobox", "panel_infobox", _("_InfoBox"));
addStockIconSet(factory, "panel-timeline", "panel_timeline",_("_Timeline"));
@@ -246,7 +247,7 @@ namespace workspace {
// Add the icon set to the icon factory
const Gtk::StockID stock_id(id);
factory->add(stock_id, icon_set);
- Gtk::Stock::add(Gtk::StockItem(stock_id, uLabel)); //////////////////////TICKET #1030 : use "icon names" instead of Gtk::StockItem
+ Gtk::Stock::add(Gtk::StockItem(stock_id, uLabel)); //////////////////////////////////////////TICKET #1030 : use "icon names" instead of Gtk::StockItem
return true;
}
diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm
index 031df5396..139cbfcdc 100644
--- a/wiki/thinkPad.ichthyo.mm
+++ b/wiki/thinkPad.ichthyo.mm
@@ -129797,6 +129797,124 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mal bei den Standard-Icons vom XFCE-Desktop nachschauen
+
+
+ ... die Starter-Konfig-Box durchscrollen
+
+
+ .... mal bei Tango nachschauen...
+
+
+ ..... XFCE hat doch diesen sehr sauber-minimalistischen Icon-Satz von »Elementary-OS« übernommen (den man dort wegwerfen wollte)
+
+
+
+
+
+
+
+
+ Ausgangspunkt sind verschiedene Icons für Musik-Player, die eine stilisierte Compact-Kasette zeigen. Das bringt mich auf die Idee, auf die Steenbeck-Schneidemaschinen anzuspielen, mit den großen Rollen, bzw. auf eine Magnetton-Maschine ... und dann könnte man ein »Playhead« aus einem »Play/Pause«-Symbol erzeugen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tja ⟹ dann gibt's bloß Inspiration + Arbeit
+
+
+
+
+
+
+
+ Ideen sind immer noch frei (sofern sie nicht patentiert sind) — nur der konkrete gestalterische Ausruck steht unter Copyright...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -154542,8 +154660,7 @@ std::cout << tmpl.render({"what", "World"}) << s
es ging darum, an die unterliegenden X-Windows ranzukommen, um sie dann auf dem Bidschirm zu positionierenl
-
-
+
@@ -154575,8 +154692,7 @@ std::cout << tmpl.render({"what", "World"}) << s
dieser Code ist anscheinend nicht deprecated
-
-
+