1 #include <memory>
2 #include "defsdownloaddlg.h"
3
4 //(*InternalHeaders(DefsDownloadDlg)
5 #include <wx/checkbox.h>
6 #include <wx/sizer.h>
7 #include <wx/button.h>
8 #include <wx/string.h>
9 #include <wx/intl.h>
10 #include <wx/stattext.h>
11 #include <wx/textctrl.h>
12 #include <wx/treectrl.h>
13 #include <wx/listbox.h>
14 //*)
15 #include <wx/mstream.h>
16 #include <wx/url.h>
17 #include <manager.h>
18 #include <configmanager.h>
19 #include <logmanager.h>
20
21 //(*IdInit(DefsDownloadDlg)
22 const long DefsDownloadDlg::ID_LISTBOX1 = wxNewId();
23 const long DefsDownloadDlg::ID_BUTTON1 = wxNewId();
24 const long DefsDownloadDlg::ID_BUTTON2 = wxNewId();
25 const long DefsDownloadDlg::ID_TREECTRL1 = wxNewId();
26 const long DefsDownloadDlg::ID_STATICTEXT1 = wxNewId();
27 const long DefsDownloadDlg::ID_TEXTCTRL2 = wxNewId();
28 const long DefsDownloadDlg::ID_CHECKBOX1 = wxNewId();
29 const long DefsDownloadDlg::ID_BUTTON3 = wxNewId();
30 //*)
31
BEGIN_EVENT_TABLE(DefsDownloadDlg,wxScrollingDialog)32 BEGIN_EVENT_TABLE(DefsDownloadDlg,wxScrollingDialog)
33 //(*EventTable(DefsDownloadDlg)
34 //*)
35 END_EVENT_TABLE()
36
37 DefsDownloadDlg::DefsDownloadDlg(wxWindow* parent)
38 {
39 //(*Initialize(DefsDownloadDlg)
40 wxStaticBoxSizer* StaticBoxSizer2;
41 wxBoxSizer* BoxSizer3;
42 wxBoxSizer* BoxSizer7;
43 wxBoxSizer* BoxSizer2;
44 wxStaticBoxSizer* StaticBoxSizer3;
45 wxBoxSizer* BoxSizer4;
46 wxBoxSizer* BoxSizer1;
47 wxBoxSizer* BoxSizer6;
48 wxBoxSizer* BoxSizer5;
49 wxStaticBoxSizer* StaticBoxSizer1;
50
51 Create(parent, wxID_ANY, _("Download libraries definitions"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER, _T("wxID_ANY"));
52 BoxSizer1 = new wxBoxSizer(wxVERTICAL);
53 BoxSizer6 = new wxBoxSizer(wxHORIZONTAL);
54 BoxSizer5 = new wxBoxSizer(wxVERTICAL);
55 StaticBoxSizer1 = new wxStaticBoxSizer(wxVERTICAL, this, _("Download list"));
56 m_UsedLibraries = new wxListBox(this, ID_LISTBOX1, wxDefaultPosition, wxSize(156,290), 0, 0, 0, wxDefaultValidator, _T("ID_LISTBOX1"));
57 StaticBoxSizer1->Add(m_UsedLibraries, 1, wxALL|wxEXPAND, 5);
58 BoxSizer5->Add(StaticBoxSizer1, 1, wxALL|wxEXPAND, 5);
59 BoxSizer6->Add(BoxSizer5, 3, wxEXPAND, 5);
60 BoxSizer2 = new wxBoxSizer(wxVERTICAL);
61 m_Add = new wxButton(this, ID_BUTTON1, _("<"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, wxDefaultValidator, _T("ID_BUTTON1"));
62 m_Add->Disable();
63 m_Add->SetToolTip(_("Add selected library to project"));
64 BoxSizer2->Add(m_Add, 1, wxEXPAND, 5);
65 m_Remove = new wxButton(this, ID_BUTTON2, _(">"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT, wxDefaultValidator, _T("ID_BUTTON2"));
66 m_Remove->Disable();
67 m_Remove->SetToolTip(_("Remove selected library from project"));
68 BoxSizer2->Add(m_Remove, 1, wxEXPAND, 5);
69 BoxSizer6->Add(BoxSizer2, 0, wxALIGN_CENTER_VERTICAL, 5);
70 BoxSizer3 = new wxBoxSizer(wxVERTICAL);
71 StaticBoxSizer2 = new wxStaticBoxSizer(wxVERTICAL, this, _("Known libraries"));
72 m_KnownLibrariesTree = new wxTreeCtrl(this, ID_TREECTRL1, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT|wxTR_SINGLE|wxTR_DEFAULT_STYLE|wxSUNKEN_BORDER, wxDefaultValidator, _T("ID_TREECTRL1"));
73 StaticBoxSizer2->Add(m_KnownLibrariesTree, 1, wxALL|wxEXPAND, 5);
74 BoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
75 StaticText1 = new wxStaticText(this, ID_STATICTEXT1, _("Filter:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1"));
76 BoxSizer4->Add(StaticText1, 0, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL, 5);
77 m_Filter = new wxTextCtrl(this, ID_TEXTCTRL2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL2"));
78 BoxSizer4->Add(m_Filter, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5);
79 StaticBoxSizer2->Add(BoxSizer4, 0, wxEXPAND, 5);
80 BoxSizer7 = new wxBoxSizer(wxHORIZONTAL);
81 m_Tree = new wxCheckBox(this, ID_CHECKBOX1, _("Show as tree"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX1"));
82 m_Tree->SetValue(true);
83 BoxSizer7->Add(m_Tree, 1, wxLEFT|wxRIGHT|wxEXPAND, 5);
84 StaticBoxSizer2->Add(BoxSizer7, 0, wxBOTTOM|wxEXPAND, 5);
85 BoxSizer3->Add(StaticBoxSizer2, 1, wxBOTTOM|wxEXPAND, 5);
86 StaticBoxSizer3 = new wxStaticBoxSizer(wxVERTICAL, this, _("Configuration"));
87 Button1 = new wxButton(this, ID_BUTTON3, _("Servers"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3"));
88 StaticBoxSizer3->Add(Button1, 0, wxALL|wxEXPAND, 5);
89 BoxSizer3->Add(StaticBoxSizer3, 0, wxEXPAND, 5);
90 BoxSizer6->Add(BoxSizer3, 4, wxALL|wxEXPAND, 5);
91 BoxSizer1->Add(BoxSizer6, 1, wxALIGN_CENTER_HORIZONTAL, 5);
92 SetSizer(BoxSizer1);
93 BoxSizer1->Fit(this);
94 BoxSizer1->SetSizeHints(this);
95 //*)
96
97 FetchList();
98 }
99
~DefsDownloadDlg()100 DefsDownloadDlg::~DefsDownloadDlg()
101 {
102 //(*Destroy(DefsDownloadDlg)
103 //*)
104 }
105
FetchList()106 void DefsDownloadDlg::FetchList()
107 {
108 wxArrayString Urls = Manager::Get()->GetConfigManager(_T("lib_finder"))->ReadArrayString(_T("download_urls"));
109 Urls.Add(_T("http://localhost/lib_finder_test"));
110
111 for ( size_t i=0; i<Urls.Count(); i++ )
112 {
113 wxString Url = Urls[i];
114 if ( Url.IsEmpty() ) continue;
115
116 if ( Url.Last() != _T('/') ) Url.Append(_T('/'));
117 Url << _T("list") << _T(".xml");
118
119 wxURL UrlData(Url);
120 if ( !UrlData.IsOk() )
121 {
122 LogManager::Get()->LogWarning(F(_T("lib_finder: Invalid url '%s'"),Url.wx_str()));
123 continue;
124 }
125 UrlData.SetProxy( ConfigManager::GetProxy() );
126
127 std::unique_ptr< wxInputStream > is ( UrlData.GetInputStream() );
128 if ( !is.get() || !is->IsOk() )
129 {
130 LogManager::Get()->LogWarning(F(_T("lib_finder: Couldn't open stream for '%s'"),Url.wx_str()));
131 continue;
132 }
133
134 wxMemoryOutputStream memory;
135 is->Read( memory );
136
137 // Don't need input stream anymore
138 is.reset();
139
140 // Add padding zero to have valid ASCII-z string
141 memory.PutC(0);
142
143 // Parse XML data
144 TiXmlDocument doc;
145 if ( !doc.Parse( (const char*) memory.GetOutputStreamBuffer()->GetBufferStart() ) )
146 {
147 LogManager::Get()->LogWarning(F(_T("lib_finder: Invalid XML data in '%s'"),Url.wx_str()));
148 continue;
149 }
150
151
152 }
153 }
154