Menu-Actions: relocate some further global operations
...which do not really belong into the Actions class, but can be delegated within the global context
This commit is contained in:
parent
790530bc2d
commit
e29a31a32a
5 changed files with 124 additions and 93 deletions
|
|
@ -35,21 +35,14 @@
|
||||||
#ifndef GUI_CTRL_ACTIONS_H
|
#ifndef GUI_CTRL_ACTIONS_H
|
||||||
#define GUI_CTRL_ACTIONS_H
|
#define GUI_CTRL_ACTIONS_H
|
||||||
|
|
||||||
#include "gui/gtk-lumiera.hpp"
|
#include "gui/gtk-base.hpp"
|
||||||
#include "gui/config-keys.hpp"
|
|
||||||
#include "gui/ctrl/global-ctx.hpp"
|
#include "gui/ctrl/global-ctx.hpp"
|
||||||
|
#include "gui/ctrl/window-list.hpp"
|
||||||
#include "gui/workspace/workspace-window.hpp"
|
#include "gui/workspace/workspace-window.hpp"
|
||||||
#include "gui/dialog/render.hpp"
|
#include "gui/workspace/panel-manager.hpp"
|
||||||
#include "gui/dialog/preferences-dialog.hpp"
|
|
||||||
#include "gui/dialog/name-chooser.hpp"
|
|
||||||
#include "lib/format-string.hpp"
|
#include "lib/format-string.hpp"
|
||||||
#include "include/logging.h"
|
|
||||||
|
|
||||||
#include <boost/algorithm/string/classification.hpp>
|
|
||||||
#include <boost/algorithm/string/split.hpp>
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <functional>
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -57,20 +50,14 @@ namespace gui {
|
||||||
namespace ctrl {
|
namespace ctrl {
|
||||||
namespace error = lumiera::error;
|
namespace error = lumiera::error;
|
||||||
|
|
||||||
using std::function;
|
|
||||||
using boost::algorithm::is_any_of;
|
|
||||||
using boost::algorithm::split;
|
|
||||||
using Gtk::Action;
|
using Gtk::Action;
|
||||||
using Gtk::ActionGroup;
|
using Gtk::ActionGroup;
|
||||||
using Gtk::ToggleAction;
|
using Gtk::ToggleAction;
|
||||||
using Gtk::AboutDialog;
|
|
||||||
using Gtk::AccelKey;
|
using Gtk::AccelKey;
|
||||||
using Gtk::StockID;
|
using Gtk::StockID;
|
||||||
using Gtk::Main; /////////////////////////////////////////////////////////////////////////////////////TICKET #1032 replace Main -> Application
|
using Gtk::Main; /////////////////////////////////////////////////////////////////////////////////////TICKET #1032 replace Main -> Application
|
||||||
using sigc::mem_fun;
|
|
||||||
using Glib::ustring;
|
using Glib::ustring;
|
||||||
using ::util::_Fmt;
|
using ::util::_Fmt;
|
||||||
using std::vector;
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
namespace Stock = Gtk::Stock;
|
namespace Stock = Gtk::Stock;
|
||||||
|
|
@ -115,7 +102,7 @@ namespace ctrl {
|
||||||
entry ([&]() { globalCtx_.director_.saveSnapshot(); } , "FileSave", Stock::SAVE, _("_Save Project"));
|
entry ([&]() { globalCtx_.director_.saveSnapshot(); } , "FileSave", Stock::SAVE, _("_Save Project"));
|
||||||
entry ([&]() { globalCtx_.director_.forkProject(); } , "FileSaveAs", Stock::SAVE_AS, _("_Save Project As..."));
|
entry ([&]() { globalCtx_.director_.forkProject(); } , "FileSaveAs", Stock::SAVE_AS, _("_Save Project As..."));
|
||||||
entry ([&]() { globalCtx_.director_.openFile(); } , "FileOpen", Stock::OPEN, _("_Open..."));
|
entry ([&]() { globalCtx_.director_.openFile(); } , "FileOpen", Stock::OPEN, _("_Open..."));
|
||||||
entry ([&]() { onMenu_file_render(); } , "FileRender", _("_Render...")), AccelKey("<shift>R");
|
entry ([&]() { globalCtx_.director_.render(); } , "FileRender", _("_Render...")), AccelKey("<shift>R");
|
||||||
entry ([&]() { globalCtx_.uiManager_.terminateUI(); } , "FileQuit", Stock::QUIT);
|
entry ([&]() { globalCtx_.uiManager_.terminateUI(); } , "FileQuit", Stock::QUIT);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -125,7 +112,7 @@ namespace ctrl {
|
||||||
entry ([&]() { onMenu_others(); } , "EditCut", Stock::CUT);
|
entry ([&]() { onMenu_others(); } , "EditCut", Stock::CUT);
|
||||||
entry ([&]() { onMenu_others(); } , "EditCopy", Stock::COPY);
|
entry ([&]() { onMenu_others(); } , "EditCopy", Stock::COPY);
|
||||||
entry ([&]() { onMenu_others(); } , "EditPaste", Stock::PASTE);
|
entry ([&]() { onMenu_others(); } , "EditPaste", Stock::PASTE);
|
||||||
entry ([&]() { onMenu_edit_preferences(); } , "EditPreferences", Stock::PREFERENCES);
|
entry ([&]() { globalCtx_.director_.editSetup(); } , "EditPreferences", Stock::PREFERENCES);
|
||||||
|
|
||||||
|
|
||||||
menu("SequenceMenu", _("_Sequence"));
|
menu("SequenceMenu", _("_Sequence"));
|
||||||
|
|
@ -137,7 +124,7 @@ namespace ctrl {
|
||||||
|
|
||||||
|
|
||||||
menu("HelpMenu", _("_Help"));
|
menu("HelpMenu", _("_Help"));
|
||||||
entry ([&]() { onMenu_help_about(); } , "HelpAbout", Stock::ABOUT);
|
entry ([&]() { globalCtx_.wizard_.show_HelpAbout(); } , "HelpAbout", Stock::ABOUT);
|
||||||
|
|
||||||
|
|
||||||
menu("WindowMenu", _("_Window"));
|
menu("WindowMenu", _("_Window"));
|
||||||
|
|
@ -238,15 +225,16 @@ namespace ctrl {
|
||||||
|
|
||||||
|
|
||||||
private: /* ===== Internals ===== */
|
private: /* ===== Internals ===== */
|
||||||
workspace::WorkspaceWindow&
|
|
||||||
getWorkspaceWindow()
|
|
||||||
{
|
|
||||||
return globalCtx_.windowList_.findActiveWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populates a uiManager with actions for the Show Panel menu.
|
* Populates the menu entries to show specific panels
|
||||||
|
* within the current window.
|
||||||
|
* @todo 4/2017 this can only be a preliminary solution.
|
||||||
|
* What we actually want is perspectives, and we want
|
||||||
|
* a specific UI to be anchored somewhere in UI space,
|
||||||
|
* so we'll be rather be navigating _towards it_, instead
|
||||||
|
* of "showing it here".
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
populateShowPanelActions (Gtk::UIManager& uiManager)
|
populateShowPanelActions (Gtk::UIManager& uiManager)
|
||||||
|
|
@ -257,9 +245,13 @@ namespace ctrl {
|
||||||
for (uint i = 0; i < count; i++)
|
for (uint i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
const gchar *stock_id = workspace::PanelManager::getPanelStockID(i);
|
const gchar *stock_id = workspace::PanelManager::getPanelStockID(i);
|
||||||
cuString name = ustring::compose("Panel%1", i);
|
cuString panelName = ustring::compose("Panel%1", i);
|
||||||
actionGroup->add(Action::create(name, StockID(stock_id)),
|
actionGroup->add(Action::create(panelName, StockID(stock_id)),
|
||||||
bind(mem_fun(*this, &Actions::onMenu_show_panel), i));
|
[i,this]() {
|
||||||
|
globalCtx_.windowList_.findActiveWindow()
|
||||||
|
.getPanelManager()
|
||||||
|
.showPanel (i);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
uiManager.insert_action_group (actionGroup);
|
uiManager.insert_action_group (actionGroup);
|
||||||
|
|
@ -301,31 +293,10 @@ namespace ctrl {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private: /* ====== Actions =========== */
|
private:
|
||||||
|
|
||||||
/* ============ File Menu ========== */
|
|
||||||
|
|
||||||
void
|
|
||||||
onMenu_file_render()
|
|
||||||
{
|
|
||||||
dialog::Render dialog(getWorkspaceWindow()); //////global -> InteractionDirector
|
|
||||||
dialog.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ============ View Actions ========== */
|
||||||
/* ============ Edit Menu ========== */
|
|
||||||
|
|
||||||
void
|
|
||||||
onMenu_edit_preferences()
|
|
||||||
{
|
|
||||||
dialog::PreferencesDialog dialog(getWorkspaceWindow()); //////global -> InteractionDirector
|
|
||||||
dialog.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ============ View Menu ========== */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
onMenu_view_assets()
|
onMenu_view_assets()
|
||||||
|
|
@ -353,45 +324,6 @@ namespace ctrl {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
onMenu_show_panel(int panel_index)
|
|
||||||
{
|
|
||||||
getWorkspaceWindow().getPanelManager().showPanel (panel_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
onMenu_help_about()
|
|
||||||
{
|
|
||||||
// Configure the about dialog
|
|
||||||
AboutDialog dialog;
|
|
||||||
|
|
||||||
cuString copyrightNotice {_Fmt(_("© %s the original Authors\n"
|
|
||||||
"-- Lumiera Team --\n"
|
|
||||||
"Lumiera is Free Software (GPL)"))
|
|
||||||
% Config::get (KEY_COPYRIGHT)};
|
|
||||||
|
|
||||||
string authors = Config::get (KEY_AUTHORS);
|
|
||||||
vector<uString> authorsList;
|
|
||||||
split (authorsList, authors, is_any_of (",|"));
|
|
||||||
|
|
||||||
|
|
||||||
dialog.set_program_name(Config::get (KEY_TITLE));
|
|
||||||
dialog.set_version(Config::get (KEY_VERSION));
|
|
||||||
dialog.set_copyright(copyrightNotice);
|
|
||||||
dialog.set_website(Config::get (KEY_WEBSITE));
|
|
||||||
dialog.set_authors(authorsList);
|
|
||||||
|
|
||||||
dialog.set_transient_for(getWorkspaceWindow());
|
|
||||||
|
|
||||||
// Show the about dialog
|
|
||||||
dialog.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Temporary Junk
|
// Temporary Junk
|
||||||
void
|
void
|
||||||
onMenu_others() /////////////////////////TICKET #1070 need a concept how to bind global actions
|
onMenu_others() /////////////////////////TICKET #1070 need a concept how to bind global actions
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,9 @@
|
||||||
#include "gui/interact/spot-locator.hpp"
|
#include "gui/interact/spot-locator.hpp"
|
||||||
#include "gui/interact/navigator.hpp"
|
#include "gui/interact/navigator.hpp"
|
||||||
#include "gui/interact/focus-tracker.hpp"
|
#include "gui/interact/focus-tracker.hpp"
|
||||||
|
#include "gui/dialog/preferences-dialog.hpp"
|
||||||
|
#include "gui/dialog/render.hpp"
|
||||||
|
#include "gui/workspace/workspace-window.hpp"
|
||||||
#include "gui/ctrl/ui-state.hpp"
|
#include "gui/ctrl/ui-state.hpp"
|
||||||
#include "gui/setting/asset-controller.hpp"
|
#include "gui/setting/asset-controller.hpp"
|
||||||
#include "gui/timeline/timeline-controller.hpp"
|
#include "gui/timeline/timeline-controller.hpp"
|
||||||
|
|
@ -151,6 +154,25 @@ namespace interact {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit global configuration and setup.
|
||||||
|
* This action will launch the project setup UI, which allows to adjust configuration
|
||||||
|
* - for this installation of Lumiera
|
||||||
|
* - for the current project
|
||||||
|
* - for this user's session in this project
|
||||||
|
* @todo 4/2017 not yet implemented, delegate to the AssetControler, which represents
|
||||||
|
* all global aspects of the application, session and project
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
InteractionDirector::editSetup()
|
||||||
|
{
|
||||||
|
dialog::PreferencesDialog dialog(getWorkspaceWindow());
|
||||||
|
dialog.run();
|
||||||
|
|
||||||
|
UNIMPLEMENTED ("edit global configuration");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Select and open a file to perform a suitable operation.
|
* Select and open a file to perform a suitable operation.
|
||||||
* This action will launch the fileOpen UI. Depending on the selected file's meaning,
|
* This action will launch the fileOpen UI. Depending on the selected file's meaning,
|
||||||
|
|
@ -165,6 +187,24 @@ namespace interact {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start a render process. This action will launch the render setup UI.
|
||||||
|
* Depending on the current Spot, a suitable object to render will be preselected,
|
||||||
|
* typically the current timeline.
|
||||||
|
* @todo 4/2017 not yet implemented, and it is not clear how to access the functionality.
|
||||||
|
* Do we send a command? Or do we access the Play-Out subsystem directly, to create
|
||||||
|
* some kind of dedicated player instance?
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
InteractionDirector::render()
|
||||||
|
{
|
||||||
|
dialog::Render dialog(getWorkspaceWindow()); //////global -> InteractionDirector
|
||||||
|
dialog.run();
|
||||||
|
|
||||||
|
UNIMPLEMENTED ("start render");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Establish a pristine new sequence within the session.
|
* Establish a pristine new sequence within the session.
|
||||||
* The goal is to create a new _playground_ for the user to add content.
|
* The goal is to create a new _playground_ for the user to add content.
|
||||||
|
|
@ -208,5 +248,12 @@ namespace interact {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
workspace::WorkspaceWindow&
|
||||||
|
InteractionDirector::getWorkspaceWindow()
|
||||||
|
{
|
||||||
|
return globalCtx_.windowList_.findActiveWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}}// namespace gui::interact
|
}}// namespace gui::interact
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,9 @@ namespace setting {
|
||||||
namespace timeline {
|
namespace timeline {
|
||||||
class TimelineController;
|
class TimelineController;
|
||||||
}
|
}
|
||||||
|
namespace workspace {
|
||||||
|
class WorkspaceWindow;
|
||||||
|
}
|
||||||
namespace interact {
|
namespace interact {
|
||||||
|
|
||||||
//using std::string;
|
//using std::string;
|
||||||
|
|
@ -126,13 +129,15 @@ namespace interact {
|
||||||
void newProject();
|
void newProject();
|
||||||
void saveSnapshot();
|
void saveSnapshot();
|
||||||
void forkProject();
|
void forkProject();
|
||||||
|
void editSetup();
|
||||||
void openFile();
|
void openFile();
|
||||||
|
void render();
|
||||||
|
|
||||||
void newSequence();
|
void newSequence();
|
||||||
void newTrack();
|
void newTrack();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
workspace::WorkspaceWindow& getWorkspaceWindow();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,20 +28,35 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
//#include "gui/gtk-lumiera.hpp"
|
#include "gui/gtk-base.hpp"
|
||||||
|
#include "gui/config-keys.hpp"
|
||||||
#include "gui/interact/wizard.hpp"
|
#include "gui/interact/wizard.hpp"
|
||||||
#include "gui/interact/spot-locator.hpp"
|
#include "gui/interact/spot-locator.hpp"
|
||||||
|
#include "gui/workspace/workspace-window.hpp"
|
||||||
#include "gui/ctrl/global-ctx.hpp"
|
#include "gui/ctrl/global-ctx.hpp"
|
||||||
|
#include "lib/format-string.hpp"
|
||||||
//#include "lib/util.hpp"
|
//#include "lib/util.hpp"
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/classification.hpp>
|
||||||
|
#include <boost/algorithm/string/split.hpp>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
//using util::cStr;
|
//using util::cStr;
|
||||||
//using util::isnil;
|
//using util::isnil;
|
||||||
|
using ::util::_Fmt;
|
||||||
|
using std::vector;
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
|
||||||
namespace gui {
|
namespace gui {
|
||||||
namespace interact {
|
namespace interact {
|
||||||
|
|
||||||
|
using boost::algorithm::is_any_of;
|
||||||
|
using boost::algorithm::split;
|
||||||
|
using workspace::WorkspaceWindow;
|
||||||
using ctrl::GlobalCtx;
|
using ctrl::GlobalCtx;
|
||||||
|
using Gtk::AboutDialog;
|
||||||
|
|
||||||
|
|
||||||
// dtors via smart-ptr invoked from here... (TODO any to come here?)
|
// dtors via smart-ptr invoked from here... (TODO any to come here?)
|
||||||
|
|
@ -54,8 +69,39 @@ namespace interact {
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
/** */
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* show the notorious "about Lumiera" dialog.
|
||||||
|
* Something every application has and no user really cares about.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
Wizard::show_HelpAbout()
|
||||||
|
{
|
||||||
|
// Configure the about dialog
|
||||||
|
AboutDialog dialog;
|
||||||
|
|
||||||
|
cuString copyrightNotice {_Fmt(_("© %s the original Authors\n"
|
||||||
|
"-- Lumiera Team --\n"
|
||||||
|
"Lumiera is Free Software (GPL)"))
|
||||||
|
% Config::get (KEY_COPYRIGHT)};
|
||||||
|
|
||||||
|
string authors = Config::get (KEY_AUTHORS);
|
||||||
|
vector<uString> authorsList;
|
||||||
|
split (authorsList, authors, is_any_of (",|"));
|
||||||
|
|
||||||
|
|
||||||
|
dialog.set_program_name(Config::get (KEY_TITLE));
|
||||||
|
dialog.set_version(Config::get (KEY_VERSION));
|
||||||
|
dialog.set_copyright(copyrightNotice);
|
||||||
|
dialog.set_website(Config::get (KEY_WEBSITE));
|
||||||
|
dialog.set_authors(authorsList);
|
||||||
|
|
||||||
|
WorkspaceWindow& currentWindow = globalCtx_.windowList_.findActiveWindow();
|
||||||
|
dialog.set_transient_for (currentWindow);
|
||||||
|
|
||||||
|
// Show the about dialog
|
||||||
|
dialog.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}}// namespace gui::interact
|
}}// namespace gui::interact
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@ namespace interact {
|
||||||
Wizard (ctrl::GlobalCtx&);
|
Wizard (ctrl::GlobalCtx&);
|
||||||
~Wizard ();
|
~Wizard ();
|
||||||
|
|
||||||
|
void show_HelpAbout();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue