39 #define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
87 label = Gtk::manage (
new Gtk::Label(
_name +
':'));
88 label->set_alignment (1, 0.5);
102 entry = Gtk::manage (
new Gtk::Entry());
160 entry->set_text (_value);
166 label = Gtk::manage (
new Gtk::Label(
_name +
':'));
167 label->set_alignment (1, 0.5);
181 entry = Gtk::manage (
new Gtk::Entry());
194 std::ostringstream oss (
"");
196 if (oss.str().compare(
"0")) {
208 while ((i = tmp.find_first_not_of(
"1234567890")) != string::npos) {
212 std::istringstream iss(tmp);
268 int len =
_value.length ();
272 const char *p =
_value.c_str();
273 for (
int i =0; i < 12; i++) {
282 if (sum == p[12] -
'0') {
284 "<span color=\"green\">%1: %2</span>",
285 _(
"EAN Check digit OK"), sum));
288 "<span color=\"#ffa755\">%1: %2 (%3 %4)</span>",
289 _(
"EAN Check digit error"), p[12] -
'0',
_(
"expected"), sum));
291 }
else if (len > 0) {
293 "<span color=\"#ffa755\">%1: %2 (<13)</span>",
294 _(
"EAN Length error"), len));
303 label = Gtk::manage (
new Gtk::Label(
_name +
':'));
304 label->set_alignment (1, 0.5);
318 entry = Gtk::manage (
new Gtk::Entry());
322 entry->set_max_length (13);
333 while ((i = tmp.find_first_not_of(
"1234567890")) != string::npos) {
349 list.push_back (field);
357 table.set_row_spacings (6);
358 table.set_col_spacings (12);
359 table.set_homogeneous (
false);
361 vbox.set_spacing (6);
362 vbox.set_border_width (6);
375 SessionHandlePtr::set_session (s);
386 for (DataList::const_iterator it =
list.begin(); it !=
list.end(); ++it) {
388 field->load_data (data);
389 table.attach (field->name_widget(), 0, 1, row, row + 1, Gtk::FILL);
390 table.attach (field->edit_widget(), 1, 2, row, row + 1);
399 for (DataList::const_iterator it =
list.begin(); it !=
list.end(); ++it) {
400 (*it)->save_data(data);
408 , session_list (list)
413 Gtk::TreeView::Column * viewcol;
416 Gtk::CellRendererToggle * import_render = Gtk::manage(
new Gtk::CellRendererToggle());
418 viewcol = Gtk::manage(
new Gtk::TreeView::Column (
_(
"Import"), *import_render));
419 viewcol->add_attribute (import_render->property_active(),
tree_cols.
import);
426 Gtk::CellRendererText * values_render = Gtk::manage(
new Gtk::CellRendererText());
427 viewcol = Gtk::manage(
new Gtk::TreeView::Column (
_(
"Values (current value on top)"), *values_render));
428 viewcol->add_attribute (values_render->property_markup(),
tree_cols.
values);
452 error <<
string_compose (
_(
"programming error: %1"),
"no session set for SessionMetaDataSetImportable (in load_data)!") <<
endmsg;
460 DataList::iterator session_it;
461 DataList::iterator import_it;
465 session_field = *session_it;
466 session_field->load_data(session_data);
474 session_field = *session_it;
475 import_field = *import_it;
477 import_field->load_data(data);
480 string values =
"<span weight=\"ultralight\" color=\"#777\">" + session_field->value() +
"</span>\n"
481 +
"<span weight=\"bold\">" + import_field->value() +
"</span>";
483 Gtk::TreeModel::iterator row_iter =
tree->append();
484 Gtk::TreeModel::Row row = *row_iter;
500 error <<
string_compose (
_(
"programming error: %1"),
"no session set for SessionMetaDataSetImportable (in import_data)!") <<
endmsg;
506 Gtk::TreeModel::Children fields =
tree->children();
507 Gtk::TreeModel::Children::iterator it;
508 for (it = fields.begin(); it != fields.end(); ++it) {
511 field->save_data (session_data);
522 Gtk::TreeModel::Children fields =
tree->children();
523 Gtk::TreeModel::Children::iterator it;
524 for (it = fields.begin(); it != fields.end(); ++it) {
534 Gtk::TreeModel::iterator iter =
tree->get_iter (path);
541 template <
typename DataSet>
545 cancel_button = add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
547 save_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT);
551 template <
typename DataSet>
567 for (DataSetList::iterator it = data_list.begin(); it != data_list.end(); ++it) {
568 (*it)->set_session (_session);
570 notebook.append_page ((*it)->get_widget(), (*it)->get_tab_widget());
574 template <
typename DataSet>
578 for (DataSetList::iterator it = data_list.begin(); it != data_list.end(); ++it) {
579 (*it)->load_extra_data (data);
583 template <
typename DataSet>
587 for (DataSetList::iterator it = data_list.begin(); it != data_list.end(); ++it) {
592 template <
typename DataSet>
597 _session->set_dirty();
601 template <
typename DataSet>
608 template <
typename DataSet>
612 Gtk::MessageDialog msg (
string,
false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_OK,
true);
616 template <
typename DataSet>
621 for (DataSetList::iterator it = data_list.begin(); it != data_list.end(); ++it)
623 DataSet * set =
dynamic_cast<DataSet *
> (it->get());
630 template <
typename DataSet>
634 get_vbox()->pack_start (widget,
true,
true, 0);
637 template <
typename DataSet>
642 data_list.push_back (data_set);
647 data_set->add_data_field (ptr);
650 data_set->add_data_field (ptr);
653 data_set->add_data_field (ptr);
656 data_set->add_data_field (ptr);
659 data_set->add_data_field (ptr);
663 template <
typename DataSet>
668 data_list.push_back (data_set);
673 data_set->add_data_field (ptr);
676 data_set->add_data_field (ptr);
679 data_set->add_data_field (ptr);
682 data_set->add_data_field (ptr);
685 data_set->add_data_field (ptr);
688 data_set->add_data_field (ptr);
691 data_set->add_data_field (ptr);
694 data_set->add_data_field (ptr);
697 template <
typename DataSet>
702 data_list.push_back (data_set);
707 data_set->add_data_field (ptr);
710 data_set->add_data_field (ptr);
713 data_set->add_data_field (ptr);
716 data_set->add_data_field (ptr);
719 data_set->add_data_field (ptr);
722 data_set->add_data_field (ptr);
725 data_set->add_data_field (ptr);
728 data_set->add_data_field (ptr);
731 data_set->add_data_field (ptr);
734 data_set->add_data_field (ptr);
738 ((Gtk::VBox &) data_set->get_widget()).pack_end (*emf.
status_label);
742 template <
typename DataSet>
747 data_list.push_back (data_set);
752 data_set->add_data_field (ptr);
755 data_set->add_data_field (ptr);
758 data_set->add_data_field (ptr);
761 data_set->add_data_field (ptr);
764 data_set->add_data_field (ptr);
767 data_set->add_data_field (ptr);
770 data_set->add_data_field (ptr);
773 data_set->add_data_field (ptr);
776 data_set->add_data_field (ptr);
779 template <
typename DataSet>
784 data_list.push_back (data_set);
789 data_set->add_data_field (ptr);
792 data_set->add_data_field (ptr);
851 Gtk::FileChooserDialog session_selector(
_(
"Choose session to import metadata from"), Gtk::FILE_CHOOSER_ACTION_OPEN);
852 session_selector.add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
853 session_selector.add_button (Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT);
854 session_selector.set_default_response(Gtk::RESPONSE_ACCEPT);
856 Gtk::FileFilter session_filter;
858 session_filter.set_name (
string_compose (
_(
"%1 sessions"), PROGRAM_NAME));
859 session_selector.add_filter (session_filter);
860 session_selector.set_filter (session_filter);
862 int response = session_selector.run();
863 session_selector.hide ();
866 case Gtk::RESPONSE_ACCEPT:
872 string session_path = session_selector.get_filename();
876 if (session_path.length() > 0) {
888 if (!session_tree.
read (filename)) {
889 warn_user (
_(
"This session file could not be read!"));
899 warn_user (
_(
"The session file didn't contain metadata!\nMaybe this is an old session format?"));
922 for (WidgetList::iterator it = list->begin(); it != list->end(); ++it) {
MetadataField that contains text.
LIBPBD_API Transmitter error
std::ostream & endmsg(std::ostream &ostr)
void load_data(ARDOUR::SessionMetadata const &data)
void save_data(ARDOUR::SessionMetadata &data) const
TextMetadataField(Getter getter, Setter setter, std::string const &field_name, guint width=50)
LIBARDOUR_API const char *const statefile_suffix
Gtk::Widget & name_widget()
Get widget containing name of field.
XMLNode * child(const char *) const
LIBARDOUR_API int find_session(std::string str, std::string &path, std::string &snapshot, bool &isnew)
Gtk::Widget & edit_widget()
Get widget for editing value.
Gtk::Widget & value_widget()
Get label containing value of field.
ARDOUR::Session * _session
std::string string_compose(const std::string &fmt, const T1 &o1)