void wxInfoBar::ShowMessage(const wxString& msg, int flags) { if ( !UseNative() ) { wxInfoBarGeneric::ShowMessage(msg, flags); return; } // if we don't have any buttons, create a standard close one to give the // user at least some way to close the bar if ( m_impl->m_buttons.empty() && !m_impl->m_close ) { m_impl->m_close = GTKAddButton(wxID_CLOSE); } GtkMessageType type; if ( wxGTKImpl::ConvertMessageTypeFromWX(flags, &type) ) gtk_info_bar_set_message_type(GTK_INFO_BAR(m_widget), type); gtk_label_set_text(GTK_LABEL(m_impl->m_label), wxGTK_CONV(msg)); if ( !IsShown() ) Show(); UpdateParent(); }
bool wxInfoBar::HasButtonId(wxWindowID btnid) const { if ( !UseNative() ) return wxInfoBarGeneric::HasButtonId(btnid); // as in the generic version, look for the button starting from the end const wxInfoBarGTKImpl::Buttons& buttons = m_impl->m_buttons; #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for ( wxInfoBarGTKImpl::Buttons::const_reverse_iterator i = buttons.rbegin(); i != buttons.rend(); ++i ) { if ( i->id == btnid ) return true; } return false; }
void wxInfoBar::DoApplyWidgetStyle(GtkRcStyle *style) { wxInfoBarGeneric::DoApplyWidgetStyle(style); if ( UseNative() ) GTKApplyStyle(m_impl->m_label, style); }
void wxInfoBar::DoApplyWidgetStyle(GtkRcStyle *style) { wxInfoBarGeneric::DoApplyWidgetStyle(style); if ( UseNative() ) gtk_widget_modify_style(m_impl->m_label, style); }
void wxHyperlinkCtrl::SetURL(const wxString &uri) { if ( UseNative() ) gtk_link_button_set_uri(GTK_LINK_BUTTON(m_widget), wxGTK_CONV(uri)); else wxGenericHyperlinkCtrl::SetURL(uri); }
size_t wxInfoBar::GetButtonCount() const { if ( !UseNative() ) return wxInfoBarGeneric::GetButtonCount(); return m_impl->m_buttons.size(); }
void wxInfoBar::RemoveButton(wxWindowID btnid) { if ( !UseNative() ) { wxInfoBarGeneric::RemoveButton(btnid); return; } // as in the generic version, look for the button starting from the end wxInfoBarGTKImpl::Buttons& buttons = m_impl->m_buttons; for ( wxInfoBarGTKImpl::Buttons::reverse_iterator i = buttons.rbegin(); i != buttons.rend(); ++i ) { if (i->id == btnid) { gtk_widget_destroy(i->button); buttons.erase(i.base()); // see comment in GTKAddButton() InvalidateBestSize(); return; } } wxFAIL_MSG( wxString::Format("button with id %d not found", btnid) ); }
void wxHyperlinkCtrl::SetHoverColour(const wxColour &colour) { if ( UseNative() ) { // simply do nothing: GTK+ does not allow us to change it :( } else wxGenericHyperlinkCtrl::SetHoverColour(colour); }
wxColour wxHyperlinkCtrl::GetHoverColour() const { if ( UseNative() ) { // hover colour == normal colour for native GTK+ widget return GetNormalColour(); } return wxGenericHyperlinkCtrl::GetHoverColour(); }
wxString wxHyperlinkCtrl::GetURL() const { if ( UseNative() ) { const gchar *str = gtk_link_button_get_uri(GTK_LINK_BUTTON(m_widget)); return wxString::FromUTF8(str); } return wxGenericHyperlinkCtrl::GetURL(); }
wxWindowID wxInfoBar::GetButtonId(size_t idx) const { if ( !UseNative() ) return wxInfoBarGeneric::GetButtonId(idx); wxCHECK_MSG( idx < m_impl->m_buttons.size(), wxID_NONE, "Invalid infobar button position" ); return m_impl->m_buttons[idx].id; }
void wxHyperlinkCtrl::SetLabel(const wxString &label) { if ( UseNative() ) { wxControl::SetLabel(label); const wxString labelGTK = GTKConvertMnemonics(label); gtk_button_set_label(GTK_BUTTON(m_widget), wxGTK_CONV(labelGTK)); } else wxGenericHyperlinkCtrl::SetLabel(label); }
void wxInfoBar::Dismiss() { if ( !UseNative() ) { wxInfoBarGeneric::Dismiss(); return; } Hide(); UpdateParent(); }
bool wxHyperlinkCtrl::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxString& url, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { if ( UseNative() ) { // do validation checks: CheckParams(label, url, style); if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) { wxFAIL_MSG( wxT("wxHyperlinkCtrl creation failed") ); return false; } m_widget = gtk_link_button_new("asdfsaf asdfdsaf asdfdsa"); g_object_ref(m_widget); gtk_widget_show(m_widget); // alignment float x_alignment = 0.5; if (HasFlag(wxHL_ALIGN_LEFT)) x_alignment = 0.0; else if (HasFlag(wxHL_ALIGN_RIGHT)) x_alignment = 1.0; gtk_button_set_alignment(GTK_BUTTON(m_widget), x_alignment, 0.5); // set to non empty strings both the url and the label SetURL(url.empty() ? label : url); SetLabel(label.empty() ? url : label); // our signal handlers: g_signal_connect_after (m_widget, "clicked", G_CALLBACK (gtk_hyperlink_clicked_callback), this); m_parent->DoAddChild( this ); PostCreation(size); SetInitialSize(size); // wxWindowGTK will connect to the enter_notify and leave_notify GTK+ signals // thus overriding GTK+'s internal signal handlers which set the cursor of // the widget - thus we need to manually set it here: SetCursor(wxCursor(wxCURSOR_HAND)); } else return wxGenericHyperlinkCtrl::Create(parent, id, label, url, pos, size, style, name); return true; }
bool wxInfoBar::HasButtonId(wxWindowID btnid) const { if ( !UseNative() ) return wxInfoBarGeneric::HasButtonId(btnid); // as in the generic version, look for the button starting from the end const wxInfoBarGTKImpl::Buttons& buttons = m_impl->m_buttons; for ( wxInfoBarGTKImpl::Buttons::const_reverse_iterator i = buttons.rbegin(); i != buttons.rend(); ++i ) { if ( i->id == btnid ) return true; } return false; }
wxColour wxHyperlinkCtrl::GetVisitedColour() const { wxColour ret; if ( UseNative() ) { GdkColor *link_color = NULL; // convert GdkColor in wxColour gtk_widget_style_get(m_widget, "visited-link-color", &link_color, NULL); if (link_color) ret = wxColour(*link_color); gdk_color_free (link_color); } else return wxGenericHyperlinkCtrl::GetVisitedColour(); return ret; }
void wxInfoBar::AddButton(wxWindowID btnid, const wxString& label) { if ( !UseNative() ) { wxInfoBarGeneric::AddButton(btnid, label); return; } // if we had created the default close button before, remove it now that we // have some user-defined button if ( m_impl->m_close ) { gtk_widget_destroy(m_impl->m_close); m_impl->m_close = NULL; } GtkWidget * const button = GTKAddButton(btnid, label); if ( button ) m_impl->m_buttons.push_back(wxInfoBarGTKImpl::Button(button, btnid)); }
void wxInfoBar::RemoveButton(wxWindowID btnid) { if ( !UseNative() ) { wxInfoBarGeneric::RemoveButton(btnid); return; } // as in the generic version, look for the button starting from the end wxInfoBarGTKImpl::Buttons& buttons = m_impl->m_buttons; #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for ( wxInfoBarGTKImpl::Buttons::reverse_iterator i = buttons.rbegin(); i != buttons.rend(); ++i ) { if (i->id == btnid) { gtk_widget_destroy(i->button); buttons.erase(i.base()); // see comment in GTKAddButton() InvalidateBestSize(); return; } } wxFAIL_MSG( wxString::Format("button with id %d not found", btnid) ); }
bool wxInfoBar::Create(wxWindow *parent, wxWindowID winid) { if ( !UseNative() ) return wxInfoBarGeneric::Create(parent, winid); m_impl = new wxInfoBarGTKImpl; // this control is created initially hidden Hide(); if ( !CreateBase(parent, winid) ) return false; // create the info bar widget itself m_widget = gtk_info_bar_new(); wxCHECK_MSG( m_widget, false, "failed to create GtkInfoBar" ); g_object_ref(m_widget); // also create a label which will be used to show our message m_impl->m_label = gtk_label_new(""); gtk_widget_show(m_impl->m_label); GtkWidget * const contentArea = gtk_info_bar_get_content_area(GTK_INFO_BAR(m_widget)); wxCHECK_MSG( contentArea, false, "failed to get GtkInfoBar content area" ); gtk_container_add(GTK_CONTAINER(contentArea), m_impl->m_label); // finish creation and connect to all the signals we're interested in m_parent->DoAddChild(this); PostCreation(wxDefaultSize); GTKConnectWidget("response", G_CALLBACK(wxgtk_infobar_response)); GTKConnectWidget("close", G_CALLBACK(wxgtk_infobar_close)); return true; }
wxSize wxHyperlinkCtrl::DoGetBestClientSize() const { if ( UseNative() ) return wxControl::DoGetBestClientSize(); return wxGenericHyperlinkCtrl::DoGetBestClientSize(); }
GdkWindow *wxHyperlinkCtrl::GTKGetWindow(wxArrayGdkWindows& windows) const { return UseNative() ? GTK_BUTTON(m_widget)->event_window : wxGenericHyperlinkCtrl::GTKGetWindow(windows); }
GdkWindow *wxHyperlinkCtrl::GTKGetWindow(wxArrayGdkWindows& windows) const { return UseNative() ? gtk_button_get_event_window(GTK_BUTTON(m_widget)) : wxGenericHyperlinkCtrl::GTKGetWindow(windows); }
bool wxInfoBar::Create(wxWindow *parent, wxWindowID winid) { if ( !UseNative() ) return wxInfoBarGeneric::Create(parent, winid); m_impl = new wxInfoBarGTKImpl; // this control is created initially hidden Hide(); if ( !CreateBase(parent, winid) ) return false; // create the info bar widget itself m_widget = gtk_info_bar_new(); wxCHECK_MSG( m_widget, false, "failed to create GtkInfoBar" ); g_object_ref(m_widget); // also create a label which will be used to show our message m_impl->m_label = gtk_label_new(""); gtk_widget_show(m_impl->m_label); GtkWidget * const contentArea = gtk_info_bar_get_content_area(GTK_INFO_BAR(m_widget)); wxCHECK_MSG( contentArea, false, "failed to get GtkInfoBar content area" ); gtk_container_add(GTK_CONTAINER(contentArea), m_impl->m_label); // finish creation and connect to all the signals we're interested in m_parent->DoAddChild(this); PostCreation(wxDefaultSize); GTKConnectWidget("response", G_CALLBACK(wxgtk_infobar_response)); GTKConnectWidget("close", G_CALLBACK(wxgtk_infobar_close)); // Work around GTK+ bug https://bugzilla.gnome.org/show_bug.cgi?id=710888 // by disabling the transition when showing it: without this, it's not // shown at all. // // Compile-time check is needed because GtkRevealer is new in 3.10. #if GTK_CHECK_VERSION(3, 10, 0) // Run-time check is needed because the bug was introduced in 3.10 and // fixed in 3.22.29 (see 6b4d95e86dabfcdaa805fbf068a99e19736a39a4 and a // couple of previous commits in GTK+ repository). if ( gtk_check_version(3, 10, 0) == NULL && gtk_check_version(3, 22, 29) != NULL ) { GObject* const revealer = gtk_widget_get_template_child(GTK_WIDGET(m_widget), GTK_TYPE_INFO_BAR, "revealer"); if ( revealer ) { gtk_revealer_set_transition_type(GTK_REVEALER (revealer), GTK_REVEALER_TRANSITION_TYPE_NONE); gtk_revealer_set_transition_duration(GTK_REVEALER (revealer), 0); } } #endif // GTK+ >= 3.10 return true; }