xref: /haiku/src/apps/haikudepot/textview/TextSpan.h (revision 82bfaa954dcfd90582fb2c1a0e918971eea57091)
1 /*
2  * Copyright 2013, Stephan Aßmus <superstippi@gmx.de>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 #ifndef TEXT_SPAN_H
6 #define TEXT_SPAN_H
7 
8 
9 #include <Cursor.h>
10 #include <String.h>
11 
12 #include "CharacterStyle.h"
13 
14 
15 class TextSpan {
16 public:
17 								TextSpan();
18 								TextSpan(const BString& text,
19 									const CharacterStyle& style);
20 								TextSpan(const TextSpan& other);
21 
22 			TextSpan&			operator=(const TextSpan& other);
23 			bool				operator==(const TextSpan& other) const;
24 			bool				operator!=(const TextSpan& other) const;
25 
26 			void				SetText(const BString& text);
27 	inline	const BString&		Text() const
28 									{ return fText; }
29 
30 			void				SetStyle(const CharacterStyle& style);
31 	inline	const CharacterStyle& Style() const
32 									{ return fStyle; }
33 
34 	inline	int32				CountChars() const
35 									{ return fCharCount; }
36 
37 			bool				Append(const BString& text);
38 			bool				Insert(int32 offset, const BString& text);
39 			bool				Remove(int32 start, int32 count);
40 
41 			TextSpan			SubSpan(int32 start, int32 count) const;
42 
43 			void				SetCursor(const BCursor& cursor);
44 	inline	const BCursor&		Cursor() const
45 									{ return fCursor; }
46 			void				SetClickMessage(BMessage* message);
47 	inline	const BMessage*		ClickMessage() const
48 									{ return fClickMessage.IsEmpty() ? NULL : &fClickMessage; }
49 private:
50 			void				_TruncateInsert(int32& start) const;
51 			void				_TruncateRemove(int32& start,
52 									int32& count) const;
53 
54 private:
55 			BString				fText;
56 			int32				fCharCount;
57 			CharacterStyle		fStyle;
58 
59 			BCursor				fCursor;
60 			BMessage			fClickMessage;
61 };
62 
63 
64 #endif // TEXT_SPAN_H
65