28#include "S57QueryDialog.h"
31#include <wx/textwrapper.h>
32#include "color_types.h"
34extern ColorScheme global_color_scheme;
36extern int g_S57_dialog_sx;
37extern int g_S57_dialog_sy;
38extern int g_S57_extradialog_sx;
39extern int g_S57_extradialog_sy;
40extern bool g_bresponsive;
47 Wrap(win, text, widthMax);
49 wxString
const& GetWrapped()
const {
return m_wrapped; }
50 int const GetLineCount()
const {
return m_lineCount; }
51 wxArrayString GetLineArray() {
return m_array; }
54 virtual void OnOutputLine(
const wxString& line) {
58 virtual void OnNewLine() {
66 wxArrayString m_array;
72EVT_SIZE(S57QueryDialog::OnSize)
73EVT_CLOSE(S57QueryDialog::OnClose)
74EVT_HTML_LINK_CLICKED(wxID_ANY, S57QueryDialog::OnHtmlLinkClicked)
75EVT_CHAR_HOOK(S57QueryDialog::OnKey)
81 const wxString& caption,
const wxPoint& pos,
82 const wxSize& size,
long style) {
84 Create(parent,
id, caption, pos, size, style);
87S57QueryDialog::~S57QueryDialog() {
88 g_S57_dialog_sx = GetSize().x;
89 g_S57_dialog_sy = GetSize().y;
90 m_btnOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED,
91 wxCommandEventHandler(S57QueryDialog::OnOKClick), NULL,
95void S57QueryDialog::Init() {}
97bool S57QueryDialog::Create(wxWindow* parent, wxWindowID
id,
98 const wxString& caption,
const wxPoint& pos,
99 const wxSize& size,
long style) {
100 long wstyle = wxDEFAULT_FRAME_STYLE | wxFRAME_FLOAT_ON_PARENT;
102 if (!wxFrame::Create(parent,
id, caption, pos, size, wstyle))
return false;
127void S57QueryDialog::RecalculateSize(
void) {
130 wxSize esize = m_createsize;
132 esize = GetParent()->GetClientSize();
135 wxSize dsize = GetParent()->GetClientSize();
136 esize.y = wxMin(esize.y, dsize.y - (1 * GetCharHeight()));
137 esize.x = wxMin(esize.x, dsize.x - (1 * GetCharHeight()));
140 wxSize fsize = GetSize();
141 fsize.y = wxMin(fsize.y, dsize.y - (2 * GetCharHeight()));
142 fsize.x = wxMin(fsize.x, dsize.x - (2 * GetCharHeight()));
148void S57QueryDialog::CreateControls() {
149 wxBoxSizer* topSizer =
new wxBoxSizer(wxVERTICAL);
152 long style = wxHW_SCROLLBAR_AUTO;
153 if (g_btouch) style |= wxHW_NO_SELECTION;
156 new wxHtmlWindow(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style);
158 m_phtml->SetBorders(5);
160 m_phtml->SetMinSize(wxSize(100, 100));
161 topSizer->Add(m_phtml, 1, wxBOTTOM | wxEXPAND, 10);
163 topSizer->FitInside(
this);
165 m_btnOK =
new wxButton(
this, wxID_OK);
166 m_btnOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
167 wxCommandEventHandler(S57QueryDialog::OnOKClick), NULL,
169 topSizer->Add(m_btnOK, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, 5);
172void S57QueryDialog::SetColorScheme(
void) {
174 wxColor bg = GetBackgroundColour();
175 m_phtml->SetBackgroundColour(bg);
182 wxBitmap tbm(GetSize().x, GetSize().y, -1);
185 tdc.SetBackground(bg);
187 m_phtml->SetBackgroundImage(tbm);
191void S57QueryDialog::OnKey(wxKeyEvent& ke) {
192 if (ke.GetKeyCode() == WXK_ESCAPE)
198void S57QueryDialog::SetHTMLPage(wxString& page) {
199 m_phtml->SetPage(page);
203void S57QueryDialog::OnSize(wxSizeEvent& event) {
204 g_S57_dialog_sx = GetSize().x;
205 g_S57_dialog_sy = GetSize().y;
206 wxFrame::OnSize(event);
209void S57QueryDialog::OnClose(wxCloseEvent& event) {
210 g_S57_dialog_sx = GetSize().x;
211 g_S57_dialog_sy = GetSize().y;
213 g_pObjectQueryDialog = NULL;
216void S57QueryDialog::OnHtmlLinkClicked(wxHtmlLinkEvent& event) {
218 GetParent(), wxID_ANY, _(
"Extra Object Info"),
219 wxPoint(GetPosition().x + 20, GetPosition().y + 20),
220 wxSize(g_S57_extradialog_sx, g_S57_extradialog_sy));
223 wxFileName filen(event.GetLinkInfo().GetHref());
224 wxString Extensions = wxString(
"txt,html,rtf");
226 if (Extensions.Find(filen.GetExt().Lower()) == wxNOT_FOUND)
227 ExtraObjInfoDlg->m_phtml->LoadPage(event.GetLinkInfo().GetHref());
229 wxTextFile txf(filen.GetFullPath());
232 if (filen.GetExt().Lower() ==
"txt") {
236 GetForegroundColour().GetAsString(wxC2S_HTML_SYNTAX) +
241 str = txf.GetFirstLine();
244 m_phtml->GetSize().x * 9 / 10);
245 contents += wrapper.GetWrapped();
248 str = txf.GetNextLine();
249 }
while (!txf.Eof());
250 if (filen.GetExt().Lower() ==
"txt") {
251 contents +=
"</font>";
254 ExtraObjInfoDlg->m_phtml->SetPage(contents);
258 ExtraObjInfoDlg->SetColorScheme();
260#ifdef __OCPN__ANDROID__
261 ExtraObjInfoDlg->SetSize(GetSize().x - 40, GetSize().y - 40);
264 ExtraObjInfoDlg->Show(
true);
272EVT_SIZE(S57ExtraQueryInfoDlg::OnSize)
273EVT_CLOSE(S57ExtraQueryInfoDlg::OnClose)
279 const wxString& caption,
281 const wxSize& size,
long style) {
283 Create(parent,
id, caption, pos, size, style);
285bool S57ExtraQueryInfoDlg::Create(wxWindow* parent, wxWindowID
id,
286 const wxString& caption,
const wxPoint& pos,
287 const wxSize& size,
long style) {
288 long wstyle = wxDEFAULT_FRAME_STYLE | wxFRAME_FLOAT_ON_PARENT;
290 if (!wxFrame::Create(parent,
id, caption, pos, size, wstyle))
return false;
300S57ExtraQueryInfoDlg::~S57ExtraQueryInfoDlg() {
301 g_S57_extradialog_sx = GetSize().x;
302 g_S57_extradialog_sy = GetSize().y;
305void S57ExtraQueryInfoDlg::OnSize(wxSizeEvent& event) {
306 g_S57_extradialog_sx = GetSize().x;
307 g_S57_extradialog_sy = GetSize().y;
308 wxFrame::OnSize(event);
311void S57ExtraQueryInfoDlg::OnClose(wxCloseEvent& event) {
312 g_S57_extradialog_sx = GetSize().x;
313 g_S57_extradialog_sy = GetSize().y;
Dialog for displaying query results of S57 objects.
S57QueryDialog()
Constructors.
wxFont * GetOCPNScaledFont(wxString item, int default_size)
Retrieves a font from FontMgr, optionally scaled for physical readability.
General purpose GUI support.