Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
UppHub
Status & Roadmap
FAQ
Authors & License
Forums
Funding U++
Search on this site











SourceForge.net Logo

SourceForge.net Logo

GitHub Logo

Discord Logo

RichTextObject

 

Demonstrates the use of QTF object in text format

This example demonstrates implementing custom RichText object type and extending RichEdit to work with it.

 

 

 

main.cpp

 

#include <RichEdit/RichEdit.h>

 

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..", [=, &ex] { Edit(ex); });

}

 

INITBLOCK {

    RichObject::Register("mytype", &Single<MyRichObjectType>());

};

 

String FileName()

{

    return ConfigFile("test.qtf");

}

 

class MyRichEdit : public RichEdit {

    ToolBar  toolbar;

    bool     extended;

    void RefreshBar();

    void InsertMy();

 

public:

    typedef MyRichEdit CLASSNAME;

 

    MyRichEdit();

};

 

void MyRichEdit::InsertMy()

{

    String txt;

    if(EditText(txt, "New MyRichObject", "Text")) {

        RichObject obj(&Single<MyRichObjectType>(), txt);

        obj.SetSize(1000, 300);

        obj.KeepRatio(false);

        PasteText(AsRichText(obj));

    }

}

 

void MyRichEdit::RefreshBar()

{

    toolbar.Set([=](Bar& bar) {

        DefaultBar(bar, false);

        bar.Add(!IsReadOnly(), "Insert new MyRichObject", CtrlImg::Plus(), THISFN(InsertMy));

    });

}

 

MyRichEdit::MyRichEdit()

{

    InsertFrame(0, toolbar);

    WhenRefreshBar = [=] { 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());

}

 

 

 

 

Do you want to contribute?