+void
+Translator::print () const
+{
+#ifndef NPRINT
+ DOUT << classname (this) << " {";
+ if (classname (this) != type_str_)
+ DOUT << "type = " << type_str_;
+ for (Dictionary_iter<Scalar> i (properties_dict_); i.ok (); i++)
+ {
+ DOUT << i.key () << "=" << i.val () << '\n';
+ }
+ do_print ();
+ DOUT << "}\n";
+#endif
+}
+
+void
+Translator::do_print () const
+{
+}
+
+
+
+
+void
+Translator::creation_processing ()
+{
+ if (status >= CREATION_INITED)
+ return ;
+
+ do_creation_processing ();
+ status = CREATION_INITED;
+}
+
+void
+Translator::post_move_processing ()
+{
+ if (status >= MOVE_INITED)
+ return;
+
+ creation_processing ();
+ do_post_move_processing ();
+ status = MOVE_INITED;
+}
+
+void
+Translator::removal_processing ()
+{
+ if (status == ORPHAN)
+ return;
+ creation_processing ();
+ do_removal_processing ();
+ // elegancy ...
+ // status = ORPHAN;
+}
+
+
+bool
+Translator::try_music (Music * r)
+{
+ if (status < MOVE_INITED)
+ post_move_processing ();
+
+ return do_try_music (r);
+}
+
+void
+Translator::process_requests ()
+{
+ if (status < PROCESSED_REQS)
+ post_move_processing ();
+ else if (status >= PROCESSED_REQS)
+ return;
+
+ status = PROCESSED_REQS;
+ do_process_requests ();
+}
+
+void
+Translator::pre_move_processing ()
+{
+ do_pre_move_processing ();
+ status = CREATION_INITED;
+}
+
+Scalar
+Translator::get_property (String id, Translator const **where_l) const
+{
+ if (properties_dict_.elem_b (id))
+ {
+ if (where_l)
+ *where_l = this;
+ return properties_dict_[id];
+ }
+
+ if (daddy_trans_l_)
+ return daddy_trans_l_->get_property (id, where_l);
+
+ if (where_l)
+ *where_l = 0;
+ return "";
+}
+
+void
+Translator::set_property (String id, Scalar val)
+{
+ properties_dict_[id] = val;
+}
+
+
+Music_output_def *
+Translator::output_def_l () const
+{
+ return output_def_l_;