From 9ab170fa1187ee715ef564e63123c2e5ad37cdc0 Mon Sep 17 00:00:00 2001 From: cxl Date: Tue, 2 Jun 2009 21:48:55 +0000 Subject: [PATCH] reference: RichTextObject git-svn-id: svn://ultimatepp.org/upp/trunk@1262 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- reference/RichTextObject/RichTextObject.upp | 10 ++ reference/RichTextObject/init | 5 + reference/RichTextObject/main.cpp | 120 ++++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 reference/RichTextObject/RichTextObject.upp create mode 100644 reference/RichTextObject/init create mode 100644 reference/RichTextObject/main.cpp diff --git a/reference/RichTextObject/RichTextObject.upp b/reference/RichTextObject/RichTextObject.upp new file mode 100644 index 000000000..f758038f5 --- /dev/null +++ b/reference/RichTextObject/RichTextObject.upp @@ -0,0 +1,10 @@ +uses + CtrlLib, + RichEdit; + +file + main.cpp; + +mainconfig + "" = "GUI"; + diff --git a/reference/RichTextObject/init b/reference/RichTextObject/init new file mode 100644 index 000000000..47da83051 --- /dev/null +++ b/reference/RichTextObject/init @@ -0,0 +1,5 @@ +#ifndef _RichTextObject_icpp_init_stub +#define _RichTextObject_icpp_init_stub +#include "CtrlLib/init" +#include "RichEdit/init" +#endif diff --git a/reference/RichTextObject/main.cpp b/reference/RichTextObject/main.cpp new file mode 100644 index 000000000..414ef6a08 --- /dev/null +++ b/reference/RichTextObject/main.cpp @@ -0,0 +1,120 @@ +#include + +using namespace Upp; + +struct MyRichObjectType : public RichObjectType +{ + virtual String GetTypeName(const Value&) const; + virtual void Paint(const Value& data, Draw& w, Size sz) const; + virtual bool IsText() const; + virtual void Menu(Bar& bar, RichObject& ex, void *context) const; + virtual void DefaultAction(RichObject& ex) const; + + void Edit(RichObject *ex) const; + + typedef MyRichObjectType CLASSNAME; +}; + +bool MyRichObjectType::IsText() const +{ + return true; +} + +String MyRichObjectType::GetTypeName(const Value&) const +{ + return "mytype"; +} + +void MyRichObjectType::Paint(const Value& data, Draw& w, Size sz) const +{ + w.DrawRect(sz, White); + Font fnt = Roman(max(2, sz.cy - 2)).Bold(); + w.DrawText(2, -2, (String)data, fnt, SColorDisabled()); + w.DrawText(0, 0, (String)data, fnt, SColorText()); +} + +void MyRichObjectType::Edit(RichObject *ex) const +{ + String txt = ex->GetData(); + if(EditText(txt, "Edit MyRichObject", "Text")) + ex->SetData(txt); +} + +void MyRichObjectType::DefaultAction(RichObject& ex) const +{ + Edit(&ex); +} + +void MyRichObjectType::Menu(Bar& bar, RichObject& ex, void *) const +{ + bar.Add("Edit object..", THISBACK1(Edit, &ex)); +} + +INITBLOCK { + RichObject::Register("mytype", &Single()); +}; + +String FileName() +{ + return ConfigFile("test.qtf"); +} + +class MyRichEdit : public RichEdit { + ToolBar toolbar; + bool extended; + void RefreshBar(); + void TheBar(Bar& bar); + void InsertMy(); + +public: + typedef MyRichEdit CLASSNAME; + + MyRichEdit(); +}; + +void MyRichEdit::InsertMy() +{ + String txt; + if(EditText(txt, "New MyRichObject", "Text")) { + RichObject obj(&Single(), txt); + obj.SetSize(1000, 300); + obj.KeepRatio(false); + PasteText(AsRichText(obj)); + } +} + +void MyRichEdit::TheBar(Bar& bar) +{ + DefaultBar(bar, false); + bar.Add(!IsReadOnly(), "Insert new MyRichObject", CtrlImg::Plus(), THISBACK(InsertMy)); +} + +void MyRichEdit::RefreshBar() +{ + toolbar.Set(THISBACK(TheBar)); +} + +MyRichEdit::MyRichEdit() +{ + InsertFrame(0, toolbar); + WhenRefreshBar = THISBACK(RefreshBar); +} + +GUI_APP_MAIN +{ + MyRichEdit editor; + + String file = LoadFile(FileName()); + if(file.IsEmpty()) + editor.SetQTF("Some line&Here comes the RichObject: @@mytype:1200*200`Hello world!`&Next line"); + else + editor.Pick(ParseQTF(LoadFile(FileName()))); + + TopWindow w; + w.SetRect(0, 0, 700, 500); + w.Sizeable().Zoomable(); + w.Add(editor.SizePos()); + w.Run(); + + SaveFile(FileName(), editor.GetQTF()); +}