00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef PEEKABOT_LABEL_HH_INCLUDED
00023 #define PEEKABOT_LABEL_HH_INCLUDED
00024
00025
00026 #include <string>
00027 #include "SceneObject.hh"
00028 #include "ScalableObject.hh"
00029 #include "XMLHandler.hh"
00030 #include "HandlerInformer.hh"
00031
00032
00033 namespace peekabot
00034 {
00035 class ScopedHandler;
00036
00042 class Label : public SceneObject,
00043 public ScalableObject
00044 {
00045 public:
00046 Label() throw();
00047
00048 Label(ScopedHandler *handler) throw();
00049
00050 virtual void accept(ObjectVisitor* visitor) throw();
00051
00052 virtual ObjectType get_object_type() const;
00053
00054 void set_text(const std::string &text) throw();
00055
00056 const std::string &get_text() const throw();
00057
00058 void set_alignment(TextAlignment alignment) throw();
00059
00060 TextAlignment get_alignment() const throw();
00061
00064
00065 typedef boost::signals2::signal<void ()> TextSetSignal;
00066
00067 typedef boost::signals2::signal<void ()> AlignmentSetSignal;
00068
00069 inline TextSetSignal &text_set_signal()
00070 {
00071 return m_text_set_signal;
00072 }
00073
00074 inline AlignmentSetSignal &alignment_set_signal()
00075 {
00076 return m_alignment_set_signal;
00077 }
00078
00080
00081 protected:
00082 virtual PropMap &get_prop_adapters();
00083
00084 private:
00085 static void create_prop_adapters(PropMap &adapters);
00086
00090 static void start_handler(
00091 const std::string &name,
00092 XMLHandler::AttributeMap &attributes,
00093 ScopedHandler *handler) throw();
00094
00095 void text_start_handler(
00096 const std::string &name,
00097 XMLHandler::AttributeMap &attributes,
00098 ScopedHandler *handler) throw();
00099
00100 void text_cdata_handler(
00101 const std::string &cdata,
00102 ScopedHandler *handler) throw();
00103
00104 void align_start_handler(
00105 const std::string &name,
00106 XMLHandler::AttributeMap &attributes,
00107 ScopedHandler *handler) throw();
00108
00109 void align_cdata_handler(
00110 const std::string &cdata,
00111 ScopedHandler *handler);
00112
00113 private:
00114 static HandlerInformer ms_handler_informer;
00115
00116 std::string m_text;
00117
00118 TextAlignment m_alignment;
00119
00120 TextSetSignal m_text_set_signal;
00121 AlignmentSetSignal m_alignment_set_signal;
00122 };
00123 }
00124
00125 #endif // PEEKABOT_LABEL_HH_INCLUDED