File: ObjectPreview.cpp

package info (click to toggle)
codelite 14.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 112,816 kB
  • sloc: cpp: 483,662; ansic: 150,144; php: 9,569; lex: 4,186; python: 3,417; yacc: 2,820; sh: 1,147; makefile: 52; xml: 13
file content (75 lines) | stat: -rw-r--r-- 2,207 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "ObjectPreview.h"
#include "PropertyPreview.h"

ObjectPreview::ObjectPreview() {}

ObjectPreview::~ObjectPreview() { DeleteProperties(); }

void ObjectPreview::FromJSON(const JSONItem& json)
{
    m_type = json.namedObject("type").toString();
    m_subtype = json.namedObject("subtype").toString();
    m_description = json.namedObject("description").toString();
    m_overflow = json.namedObject("overflow").toBool(m_overflow);

    DeleteProperties();
    if(json.hasNamedObject("properties")) {
        JSONItem props = json.namedObject("properties");
        int size = props.arraySize();
        for(int i = 0; i < size; ++i) {
            JSONItem prop = props.arrayItem(i);
            PropertyPreview* pp = new PropertyPreview();
            pp->FromJSON(prop);
            m_properties.push_back(pp);
        }
    }
}

JSONItem ObjectPreview::ToJSON(const wxString& name) const
{
    JSONItem json = JSONItem::createObject(name);
    json.addProperty("type", m_type);
    json.addProperty("subtype", m_subtype);
    json.addProperty("description", m_description);
    json.addProperty("overflow", m_overflow);
    if(!m_properties.empty()) {
        JSONItem arr = JSONItem::createArray("properties");
        for(size_t i = 0; i < m_properties.size(); ++i) {
            arr.arrayAppend(m_properties[i]->ToJSON(""));
        }
    }
    return json;
}

void ObjectPreview::DeleteProperties()
{
    for(size_t i = 0; i < m_properties.size(); ++i) {
        wxDELETE(m_properties[i]);
    }
    m_properties.clear();
}

wxString ObjectPreview::ToString() const
{
    wxString str;
    if(IsEmpty()) {
        return "{...}";
    } else {
        str << GetType();
        if(!GetSubtype().IsEmpty()) { str << " (" << GetSubtype() << ")"; }
        if(!GetProperties().empty()) {
            str << ": [";
            for(size_t i = 0; i < m_properties.size(); ++i) {
                str << m_properties[i]->ToString() << ", ";
            }
        }
        if(IsOverflow()) {
            str << "...";
        } else {
            // remove the last comma we added
            str.RemoveLast(2);
        }
        if(!GetProperties().empty()) { str << "]"; }
        return str;
    }
}