1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        gtk/colordlg.cpp 
   3 // Purpose:     Native wxColourDialog for GTK+ 
   4 // Author:      Vaclav Slavik 
   8 // Copyright:   (c) Vaclav Slavik, 2004 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // For compilers that support precompilation, includes "wx.h". 
  13 #include "wx/wxprec.h" 
  21 #include "wx/colordlg.h" 
  27 #include "wx/gtk/private.h" 
  30     #include <hildon-widgets/hildon-color-selector.h> 
  31 #endif // wxUSE_LIBHILDON 
  35     #include <hildon/hildon.h> 
  37 #endif // wxUSE_LIBHILDON2 
  39 IMPLEMENT_DYNAMIC_CLASS(wxColourDialog
, wxDialog
) 
  41 wxColourDialog::wxColourDialog(wxWindow 
*parent
, wxColourData 
*data
) 
  46 bool wxColourDialog::Create(wxWindow 
*parent
, wxColourData 
*data
) 
  51     m_parent 
= GetParentForModalDialog(parent
, 0); 
  52     GtkWindow 
* const parentGTK 
= m_parent 
? GTK_WINDOW(m_parent
->m_widget
) 
  56     m_widget 
= hildon_color_selector_new(parentGTK
); 
  57 #elif wxUSE_LIBHILDON2 // !wxUSE_LIBHILDON 
  58     m_widget 
= hildon_color_chooser_dialog_new(); 
  59 #else // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 
  60     wxString 
title(_("Choose colour")); 
  61     m_widget 
= gtk_color_selection_dialog_new(wxGTK_CONV(title
)); 
  62 #endif // wxUSE_LIBHILDON/!wxUSE_LIBHILDON 
  64     g_object_ref(m_widget
); 
  68         gtk_window_set_transient_for(GTK_WINDOW(m_widget
), parentGTK
); 
  71 #if !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 
  72     GtkColorSelection 
*sel 
= 
  73         GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
); 
  74     gtk_color_selection_set_has_palette(sel
, true); 
  75 #endif // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 
  80 int wxColourDialog::ShowModal() 
  84     gint result 
= gtk_dialog_run(GTK_DIALOG(m_widget
)); 
  85     gtk_widget_hide(m_widget
); 
  90             wxFAIL_MSG(wxT("unexpected GtkColorSelectionDialog return code")); 
  93         case GTK_RESPONSE_CANCEL
: 
  94         case GTK_RESPONSE_DELETE_EVENT
: 
  95         case GTK_RESPONSE_CLOSE
: 
 104 void wxColourDialog::ColourDataToDialog() 
 106     const GdkColor 
* const 
 107         col 
= m_data
.GetColour().Ok() ? m_data
.GetColour().GetColor() 
 111     HildonColorSelector 
* const sel 
= HILDON_COLOR_SELECTOR(m_widget
); 
 112     hildon_color_selector_set_color(sel
, const_cast<GdkColor 
*>(col
)); 
 113 #elif wxUSE_LIBHILDON2 
 124     hildon_color_chooser_dialog_set_color((HildonColorChooserDialog 
*)m_widget
, &clr
); 
 125 #else // !wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 
 126     GtkColorSelection 
*sel 
= 
 127         GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
); 
 130         gtk_color_selection_set_current_color(sel
, col
); 
 132     // setup the palette: 
 136     for (unsigned i 
= 0; i 
< 16; i
++) 
 138         wxColour c 
= m_data
.GetCustomColour(i
); 
 141             colors
[n_colors
] = *c
.GetColor(); 
 146     wxGtkString 
pal(gtk_color_selection_palette_to_string(colors
, n_colors
)); 
 148     GtkSettings 
*settings 
= gtk_widget_get_settings(GTK_WIDGET(sel
)); 
 149     g_object_set(settings
, "gtk-color-palette", pal
.c_str(), NULL
); 
 150 #endif // wxUSE_LIBHILDON / wxUSE_LIBHILDON2 /!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 
 153 void wxColourDialog::DialogToColourData() 
 156     HildonColorSelector 
* const sel 
= HILDON_COLOR_SELECTOR(m_widget
); 
 157     const GdkColor 
* const clr 
= hildon_color_selector_get_color(sel
); 
 159         m_data
.SetColour(*clr
); 
 160 #elif wxUSE_LIBHILDON2 // !wxUSE_LIBHILDON 
 161     const GdkColor 
* const 
 162     col 
= m_data
.GetColour().Ok() ? m_data
.GetColour().GetColor() : NULL
; 
 173     GdkColor new_color 
= clr
; 
 174     hildon_color_chooser_dialog_get_color((HildonColorChooserDialog 
*)m_widget
, &new_color
); 
 176     m_data
.SetColour(new_color
); 
 177 #else // !wxUSE_LIBHILDON2 
 179     GtkColorSelection 
*sel 
= 
 180         GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(m_widget
)->colorsel
); 
 183     gtk_color_selection_get_current_color(sel
, &clr
); 
 184     m_data
.SetColour(clr
); 
 186     // Extract custom palette: 
 188     GtkSettings 
*settings 
= gtk_widget_get_settings(GTK_WIDGET(sel
)); 
 190     g_object_get(settings
, "gtk-color-palette", &pal
, NULL
); 
 194     if (gtk_color_selection_palette_from_string(pal
, &colors
, &n_colors
)) 
 196         for (int i 
= 0; i 
< wxMin(n_colors
, 16); i
++) 
 198             m_data
.SetCustomColour(i
, wxColour(colors
[i
])); 
 204 #endif // wxUSE_LIBHILDON / wxUSE_LIBHILDON2 /!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 
 207 #endif // wxUSE_COLOURDLG