[Summary] Progressing tools for waveform zooming

[git-p4: depot-paths = "//Abdaw/dev_main/tracks/": change = 463990]
This commit is contained in:
Valeriy Kamyshniy 2014-05-27 15:53:33 -05:00
parent 9241f7f871
commit d0f48e6c3d
5 changed files with 127 additions and 51 deletions

View file

@ -8,7 +8,7 @@
<EventBox bgnormal="#282828">
<HBox borderwidth="1" spacing ="1">
<iconbutton id="tracks_button"
width="52" height="51"
width="48" height="51"
normalicon="tracks"
activeicon="tracks_active"
prelighticon="tracks_prelight"/>

View file

@ -88,4 +88,10 @@
</Layout>
</Layout>
</Layout>
<!--HBox height="100">
<Adjustment id="zoom_fader"/>
<Fader facesource="zoom_fader_face"
handlesource="zoom_fader_handle"
adjustment="oom_fader"/>
</HBox-->
</Dialog>

View file

@ -31,9 +31,9 @@ using namespace PBD;
using namespace ARDOUR;
Gtk::Widget*
WavesUI::create_widget (const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::create_widget (const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets)
{
Gtk::Widget* child = NULL;
Gtk::Object* child = NULL;
std::string widget_type = definition.name();
std::string widget_id = xml_property (definition, "id", styles, "");
@ -77,20 +77,58 @@ WavesUI::create_widget (const XMLNode& definition, const XMLNodeMap& styles, std
child = manage (new Gtk::HBox);
} else if (widget_type == "EVENTBOX") {
child = manage (new Gtk::EventBox);
} else if (widget_type == "FADER") {
std::string face_image = xml_property (definition, "facesource", styles, "");
if (face_image.empty()) {
dbg_msg("Fader's facesource NOT SPECIFIED!");
throw std::exception();
}
std::string handle_image = xml_property (definition, "handlesource", styles, "");
if (handle_image.empty()) {
dbg_msg("Fader's handlesource NOT SPECIFIED!");
throw std::exception();
}
std::string adjustment_id = xml_property (definition, "adjustment", styles, "");
if (adjustment_id.empty()) {
dbg_msg("Fader's adjustment_id NOT SPECIFIED!");
throw std::exception();
}
Gtk::Adjustment& adjustment = named_widgets.get_adjustment(adjustment_id.c_str());
child = manage (new Gtkmm2ext::Fader(adjustment,
face_image,
handle_image,
xml_property (definition, "minposx", styles, -1),
xml_property (definition, "minposy", styles, -1),
xml_property (definition, "maxposx", styles, -1),
xml_property (definition, "maxposy", styles, -1)));
} else if (widget_type == "ADJUSTMENT") {
double min_value = xml_property (definition, "minvalue", styles, 0.0);
double max_value = xml_property (definition, "maxvalue", styles, 100.0);
double initial_value = xml_property (definition, "initialvalue", styles, min_value);
double step = xml_property (definition, "step", styles, (max_value-min_value)/100.0);
double page_increment = xml_property (definition, "pageincrement", styles, (max_value-min_value)/10);
child = manage (new Gtk::Adjustment (initial_value,
min_value,
max_value,
step,
page_increment));
}
if (child != NULL) {
if (!widget_id.empty()) {
named_widgets[widget_id] = child;
}
set_attributes(*child, definition, styles);
if (dynamic_cast<Gtk::Widget*>(child)) {
set_attributes(*dynamic_cast<Gtk::Widget*>(child), definition, styles);
}
}
return child;
return dynamic_cast<Gtk::Widget*>(child);
}
Gtk::Widget*
WavesUI::add_widget (Gtk::Box& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::add_widget (Gtk::Box& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets)
{
Gtk::Widget* child = create_widget(definition, styles, named_widgets);
@ -113,7 +151,7 @@ WavesUI::add_widget (Gtk::Box& parent, const XMLNode& definition, const XMLNodeM
Gtk::Widget*
WavesUI::add_widget (Gtk::ScrolledWindow& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::add_widget (Gtk::ScrolledWindow& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets)
{
Gtk::Widget* child = create_widget(definition, styles, named_widgets);
@ -126,7 +164,7 @@ WavesUI::add_widget (Gtk::ScrolledWindow& parent, const XMLNode& definition, con
Gtk::Widget*
WavesUI::add_widget (Gtk::Window& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::add_widget (Gtk::Window& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets)
{
Gtk::Widget* child = create_widget(definition, styles, named_widgets);
@ -139,7 +177,7 @@ WavesUI::add_widget (Gtk::Window& parent, const XMLNode& definition, const XMLNo
Gtk::Widget*
WavesUI::add_widget (Gtk::EventBox& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::add_widget (Gtk::EventBox& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets)
{
Gtk::Widget* child = create_widget(definition, styles, named_widgets);
@ -152,7 +190,7 @@ WavesUI::add_widget (Gtk::EventBox& parent, const XMLNode& definition, const XML
Gtk::Widget*
WavesUI::add_widget (Gtk::Layout& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::add_widget (Gtk::Layout& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets)
{
Gtk::Widget* child = create_widget(definition, styles, named_widgets);
@ -167,7 +205,7 @@ WavesUI::add_widget (Gtk::Layout& parent, const XMLNode& definition, const XMLNo
Gtk::Widget*
WavesUI::add_widget (Gtk::Container& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::add_widget (Gtk::Container& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets)
{
Gtk::Widget* child = NULL;
if(dynamic_cast<Gtk::Layout*> (&parent)) {
@ -199,7 +237,7 @@ WavesUI::add_widget (Gtk::Container& parent, const XMLNode& definition, const XM
}
void
WavesUI::create_ui (const XMLNodeList& definition, const XMLNodeMap& styles, Gtk::Container& root, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::create_ui (const XMLNodeList& definition, const XMLNodeMap& styles, Gtk::Container& root, WidgetMap& named_widgets)
{
for (XMLNodeList::const_iterator i = definition.begin(); i != definition.end(); ++i) {
WavesUI::add_widget (root, **i, styles, named_widgets);
@ -207,7 +245,7 @@ WavesUI::create_ui (const XMLNodeList& definition, const XMLNodeMap& styles, Gtk
}
void
WavesUI::create_ui (const XMLTree& layout, Gtk::Container& root, std::map<std::string, Gtk::Widget*>& named_widgets)
WavesUI::create_ui (const XMLTree& layout, Gtk::Container& root, WidgetMap& named_widgets)
{
XMLNodeMap styles;
get_styles(layout, styles);
@ -369,23 +407,34 @@ WavesUI::set_attributes (Gtk::Widget& widget, const XMLNode& definition, const X
}
}
Gtk::Widget*
WavesUI::WidgetMap::get_widget(char *id)
Gtk::Object*
WavesUI::WidgetMap::get_object(const char *id)
{
Gtk::Widget *child = NULL;
std::map<std::string, Gtk::Widget*>::iterator it = find(id);
Gtk::Object* object = NULL;
WidgetMap::iterator it = find(id);
if(it != end())
child = it->second;
object = it->second;
return child;
return object;
}
Gtk::Adjustment&
WavesUI::WidgetMap::get_adjustment(const char* id)
{
Gtk::Adjustment* child = dynamic_cast<Gtk::Adjustment*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("Adjustment ") + id + " not found !");
throw std::exception();
}
return *child;
}
Gtk::VBox&
WavesUI::WidgetMap::get_vbox (char* id)
WavesUI::WidgetMap::get_vbox (const char* id)
{
Gtk::VBox* child = dynamic_cast<Gtk::VBox*> (get_widget(id));
Gtk::VBox* child = dynamic_cast<Gtk::VBox*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("Gtk::VBox ") + id + " not found !");
throw std::exception();
}
return *child;
@ -393,10 +442,11 @@ WavesUI::WidgetMap::get_vbox (char* id)
Gtk::HBox&
WavesUI::WidgetMap::get_hbox (char* id)
WavesUI::WidgetMap::get_hbox (const char* id)
{
Gtk::HBox* child = dynamic_cast<Gtk::HBox*> (get_widget(id));
Gtk::HBox* child = dynamic_cast<Gtk::HBox*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("Gtk::HBox ") + id + " not found !");
throw std::exception();
}
return *child;
@ -404,10 +454,11 @@ WavesUI::WidgetMap::get_hbox (char* id)
Gtk::Layout&
WavesUI::WidgetMap::get_layout (char* id)
WavesUI::WidgetMap::get_layout (const char* id)
{
Gtk::Layout* child = dynamic_cast<Gtk::Layout*> (get_widget(id));
Gtk::Layout* child = dynamic_cast<Gtk::Layout*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("Gtk::Layout ") + id + " not found !");
throw std::exception();
}
return *child;
@ -415,10 +466,11 @@ WavesUI::WidgetMap::get_layout (char* id)
Gtk::Label&
WavesUI::WidgetMap::get_label (char* id)
WavesUI::WidgetMap::get_label (const char* id)
{
Gtk::Label* child = dynamic_cast<Gtk::Label*> (get_widget(id));
Gtk::Label* child = dynamic_cast<Gtk::Label*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("Gtk::Label ") + id + " not found !");
throw std::exception();
}
return *child;
@ -426,10 +478,11 @@ WavesUI::WidgetMap::get_label (char* id)
Gtk::ComboBoxText&
WavesUI::WidgetMap::get_combo_box_text (char* id)
WavesUI::WidgetMap::get_combo_box_text (const char* id)
{
Gtk::ComboBoxText* child = dynamic_cast<Gtk::ComboBoxText*> (get_widget(id));
Gtk::ComboBoxText* child = dynamic_cast<Gtk::ComboBoxText*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("Gtk::ComboBoxText ") + id + " not found !");
throw std::exception();
}
return *child;
@ -437,10 +490,22 @@ WavesUI::WidgetMap::get_combo_box_text (char* id)
WavesButton&
WavesUI::WidgetMap::get_waves_button (char* id)
WavesUI::WidgetMap::get_waves_button (const char* id)
{
WavesButton* child = dynamic_cast<WavesButton*> (get_widget(id));
WavesButton* child = dynamic_cast<WavesButton*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("WavesButton ") + id + " not found !");
throw std::exception();
}
return *child;
}
Gtkmm2ext::Fader&
WavesUI::WidgetMap::get_fader (const char* id)
{
Gtkmm2ext::Fader* child = dynamic_cast<Gtkmm2ext::Fader*> (get_object(id));
if (child == NULL ) {
dbg_msg (std::string("Gtkmm2ext::Fader ") + id + " not found !");
throw std::exception();
}
return *child;

View file

@ -23,11 +23,13 @@
#include <string>
#include <fstream>
#include <boost/algorithm/string.hpp>
#include <gtkmm/adjustment.h>
#include <gtkmm/box.h>
#include <gtkmm/layout.h>
#include <gtkmm/image.h>
#include <gtkmm/label.h>
#include <gtkmm/scrolledwindow.h>
#include "gtkmm2ext/fader.h"
#include "canvas/canvas.h"
#include "canvas/xml_ui.h"
#include "waves_button.h"
@ -36,30 +38,32 @@
using namespace ArdourCanvas::XMLUI;
namespace WavesUI {
class WidgetMap : public std::map<std::string, Gtk::Widget*>
class WidgetMap : public std::map<std::string, Gtk::Object*>
{
public:
Gtk::VBox& get_vbox (char* id);
Gtk::HBox& get_hbox (char* id);
Gtk::Layout& get_layout (char* id);
Gtk::Label& get_label (char* id);
Gtk::Image& get_image (char* id);
Gtk::ComboBoxText& get_combo_box_text (char* id);
WavesButton& get_waves_button (char* id);
Gtk::Adjustment& get_adjustment (const char* id);
Gtk::VBox& get_vbox (const char* id);
Gtk::HBox& get_hbox (const char* id);
Gtk::Layout& get_layout (const char* id);
Gtk::Label& get_label (const char* id);
Gtk::Image& get_image (const char* id);
Gtk::ComboBoxText& get_combo_box_text (const char* id);
WavesButton& get_waves_button (const char* id);
Gtkmm2ext::Fader& get_fader (const char* id);
private:
Gtk::Widget* get_widget(char *id);
Gtk::Object* get_object(const char *id);
};
const XMLTree* load_layout (const std::string xml_file_name);
void create_ui (const XMLTree& layout, Gtk::Container& root, std::map<std::string, Gtk::Widget*>& named_widgets);
void create_ui (const XMLNodeList& definition, const XMLNodeMap& styles, Gtk::Container& root, std::map<std::string, Gtk::Widget*>& named_widgets);
Gtk::Widget* create_widget (const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets);
Gtk::Widget* add_widget (Gtk::Box& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets);
Gtk::Widget* add_widget (Gtk::ScrolledWindow& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets);
Gtk::Widget* add_widget (Gtk::Window& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets);
Gtk::Widget* add_widget (Gtk::Layout& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets);
Gtk::Widget* add_widget (Gtk::Container& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets);
Gtk::Widget* add_widget (Gtk::EventBox& parent, const XMLNode& definition, const XMLNodeMap& styles, std::map<std::string, Gtk::Widget*>& named_widgets);
void create_ui (const XMLTree& layout, Gtk::Container& root, WidgetMap& named_widgets);
void create_ui (const XMLNodeList& definition, const XMLNodeMap& styles, Gtk::Container& root, WidgetMap& named_widgets);
Gtk::Widget* create_widget (const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets);
Gtk::Widget* add_widget (Gtk::Box& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets);
Gtk::Widget* add_widget (Gtk::ScrolledWindow& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets);
Gtk::Widget* add_widget (Gtk::Window& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets);
Gtk::Widget* add_widget (Gtk::Layout& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets);
Gtk::Widget* add_widget (Gtk::Container& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets);
Gtk::Widget* add_widget (Gtk::EventBox& parent, const XMLNode& definition, const XMLNodeMap& styles, WidgetMap& named_widgets);
void set_attributes (Gtk::Widget& widget, const XMLNode& definition, const XMLNodeMap& styles);
}

View file

@ -38,6 +38,7 @@ gtkmm2ext_sources = [
'click_box.cc',
'debug.cc',
'dndtreeview.cc',
'fader.cc',
'fastmeter.cc',
'focus_entry.cc',
'grouped_buttons.cc',
@ -99,7 +100,7 @@ def build(bld):
obj.name = 'libgtkmm2ext'
obj.target = 'gtkmm2ext'
obj.uselib = 'GTKMM GTK GTKOSX OSX GDK'
obj.use = [ 'libpbd' ]
obj.use = [ 'libpbd', 'libardour']
obj.vnum = GTKMM2EXT_LIB_VERSION
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
obj.defines += [