ENH: help video play failure

Change-Id: I5f847547877a82d626bffb78488e5f3d20cc56d0
This commit is contained in:
chunmao.guo 2022-09-09 15:05:59 +08:00 committed by Lane.Wei
parent 6dc68c4c9e
commit 70de37d1ae
5 changed files with 54 additions and 9 deletions

View File

@ -19,11 +19,15 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w
m_button_play = new Button(this, "", "media_play", wxBORDER_NONE); m_button_play = new Button(this, "", "media_play", wxBORDER_NONE);
m_button_play->SetCanFocus(false); m_button_play->SetCanFocus(false);
m_label_status = new Label(this); m_label_status = new Label(this, "", LB_HYPERLINK);
m_button_play->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto & e) { TogglePlay(); }); m_button_play->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto & e) { TogglePlay(); });
m_button_play->Bind(wxEVT_RIGHT_UP, [this](auto & e) { m_media_ctrl->Play(); }); m_button_play->Bind(wxEVT_RIGHT_UP, [this](auto & e) { m_media_ctrl->Play(); });
m_label_status->Bind(wxEVT_LEFT_UP, [this](auto &e) {
auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/faq/live-view", L"en");
wxLaunchDefaultBrowser(url);
});
Bind(wxEVT_RIGHT_UP, [this](auto & e) { wxClipboard & c = *wxTheClipboard; if (c.Open()) { c.SetData(new wxTextDataObject(m_url)); c.Close(); } }); Bind(wxEVT_RIGHT_UP, [this](auto & e) { wxClipboard & c = *wxTheClipboard; if (c.Open()) { c.SetData(new wxTextDataObject(m_url)); c.Close(); } });
@ -206,7 +210,11 @@ void MediaPlayCtrl::SetStatus(wxString const& msg2)
OutputDebugStringA("\n"); OutputDebugStringA("\n");
#endif // __WXMSW__ #endif // __WXMSW__
m_label_status->SetLabel(msg); m_label_status->SetLabel(msg);
//m_label_status->SetForegroundColour(!msg.EndsWith("!") ? 0x42AE00 : 0x3B65E9); long style = m_label_status->GetWindowStyle() & ~LB_HYPERLINK;
if (m_failed_code && msg != msg2) {
style |= LB_HYPERLINK;
}
m_label_status->SetWindowStyle(style);
Layout(); Layout();
} }
@ -280,6 +288,8 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent& event)
} }
else if (event.GetId()) { else if (event.GetId()) {
Stop(); Stop();
if (m_failed_code == 0)
m_failed_code = 2;
SetStatus(_L("Load failed [%d]!")); SetStatus(_L("Load failed [%d]!"));
} else { } else {
m_last_state = last_state; m_last_state = last_state;

View File

@ -64,11 +64,36 @@ wxSize Label::split_lines(wxDC &dc, int width, const wxString &text, wxString &m
return dc.GetMultiLineTextExtent(multiline_text); return dc.GetMultiLineTextExtent(multiline_text);
} }
Label::Label(wxWindow *parent, wxString const &text) : Label(parent, Body_14, text) {} Label::Label(wxWindow *parent, wxString const &text, long style) : Label(parent, Body_14, text, style) {}
Label::Label(wxWindow *parent, wxFont const &font, wxString const &text) Label::Label(wxWindow *parent, wxFont const &font, wxString const &text, long style)
: wxStaticText(parent, wxID_ANY, text, wxDefaultPosition, wxDefaultSize, 0) : wxStaticText(parent, wxID_ANY, text, wxDefaultPosition, wxDefaultSize, style)
{ {
this->font = font;
SetFont(font); SetFont(font);
SetBackgroundColour(StaticBox::GetParentBackgroundColor(parent)); SetBackgroundColour(StaticBox::GetParentBackgroundColor(parent));
Bind(wxEVT_ENTER_WINDOW, [this](auto &e) {
if (GetWindowStyle() & LB_HYPERLINK) {
SetFont(this->font.Underlined());
Refresh();
}
});
Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) {
SetFont(this->font);
Refresh();
});
}
void Label::SetWindowStyleFlag(long style)
{
wxStaticText::SetWindowStyleFlag(style);
if (style & LB_HYPERLINK) {
this->color = GetForegroundColour();
static wxColor clr_url("#00AE42");
SetForegroundColour(clr_url);
} else {
SetForegroundColour(this->color);
SetFont(this->font);
}
Refresh();
} }

View File

@ -3,12 +3,21 @@
#include <wx/stattext.h> #include <wx/stattext.h>
#define LB_HYPERLINK 0x0001
class Label : public wxStaticText class Label : public wxStaticText
{ {
public: public:
Label(wxWindow *parent, wxString const &text = {}); Label(wxWindow *parent, wxString const &text = {}, long style = 0);
Label(wxWindow *parent, wxFont const &font, wxString const &text = {}); Label(wxWindow *parent, wxFont const &font, wxString const &text = {}, long style = 0);
void SetWindowStyleFlag(long style) override;
private:
wxFont font;
wxColour color;
public: public:
static wxFont Head_24; static wxFont Head_24;

View File

@ -237,6 +237,7 @@ Button *SpinInput::createButton(bool inc)
}); });
btn->Bind(wxEVT_LEFT_DCLICK, [=](auto &e) { btn->Bind(wxEVT_LEFT_DCLICK, [=](auto &e) {
delta = inc ? 1 : -1; delta = inc ? 1 : -1;
btn->CaptureMouse();
SetValue(val + delta); SetValue(val + delta);
sendSpinEvent(); sendSpinEvent();
}); });

View File

@ -38,7 +38,7 @@ void wxMediaCtrl2::Load(wxURI url)
wxExecute("cmd /c start " + url, wxEXEC_HIDE_CONSOLE); wxExecute("cmd /c start " + url, wxEXEC_HIDE_CONSOLE);
} }
}); });
m_error = 2; m_error = 100;
wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); wxMediaEvent event(wxEVT_MEDIA_STATECHANGED);
event.SetId(GetId()); event.SetId(GetId());
event.SetEventObject(this); event.SetEventObject(this);
@ -56,7 +56,7 @@ void wxMediaCtrl2::Load(wxURI url)
wxMessageBox(_L("Missing BambuSource component registered for media playing! Please re-install BambuStutio or seek after-sales help."), _L("Error"), wxMessageBox(_L("Missing BambuSource component registered for media playing! Please re-install BambuStutio or seek after-sales help."), _L("Error"),
wxOK); wxOK);
}); });
m_error = clsid.IsEmpty() ? 100 : clsid != L"{233E64FB-2041-4A6C-AFAB-FF9BCF83E7AA}" ? 101 : 102; m_error = clsid != L"{233E64FB-2041-4A6C-AFAB-FF9BCF83E7AA}" ? 101 : path.empty() ? 102 : 103;
wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); wxMediaEvent event(wxEVT_MEDIA_STATECHANGED);
event.SetId(GetId()); event.SetId(GetId());
event.SetEventObject(this); event.SetEventObject(this);