]> git.saurik.com Git - wxWidgets.git/blob - src/gtk/fontdlg.cpp
[ 1509599 ] 'Split pickers page in widgets sample' with more icons and rebaking.
[wxWidgets.git] / src / gtk / fontdlg.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/gtk/fontdlg.cpp
3 // Purpose: wxFontDialog
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10 // For compilers that support precompilation, includes "wx.h".
11 #include "wx/wxprec.h"
12
13 #if wxUSE_FONTDLG && !defined(__WXGPE__)
14
15 #include "wx/fontdlg.h"
16
17 #ifndef WX_PRECOMP
18 #include "wx/intl.h"
19 #include "wx/utils.h"
20 #include "wx/msgdlg.h"
21 #endif
22
23 #include "wx/fontutil.h"
24
25 #include "wx/gtk/private.h"
26
27 //-----------------------------------------------------------------------------
28 // "delete_event"
29 //-----------------------------------------------------------------------------
30
31 extern "C" {
32 static
33 bool gtk_fontdialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxDialog *win )
34 {
35 if (g_isIdle)
36 wxapp_install_idle_handler();
37
38 /*
39 printf( "OnDelete from " );
40 if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
41 printf( win->GetClassInfo()->GetClassName() );
42 printf( ".\n" );
43 */
44
45 win->Close();
46
47 return true;
48 }
49 }
50
51 //-----------------------------------------------------------------------------
52 // "clicked" for OK-button
53 //-----------------------------------------------------------------------------
54
55 extern "C" {
56 static
57 void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dialog )
58 {
59 if (g_isIdle)
60 wxapp_install_idle_handler();
61
62 GtkFontSelectionDialog *fontdlg = GTK_FONT_SELECTION_DIALOG(dialog->m_widget);
63
64 gchar *fontname = gtk_font_selection_dialog_get_font_name(fontdlg);
65 dialog->SetChosenFont( fontname);
66
67 g_free( fontname );
68
69 wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
70 event.SetEventObject( dialog );
71 dialog->GetEventHandler()->ProcessEvent( event );
72 }
73 }
74
75 //-----------------------------------------------------------------------------
76 // "clicked" for Cancel-button
77 //-----------------------------------------------------------------------------
78
79 extern "C" {
80 static
81 void gtk_fontdialog_cancel_callback( GtkWidget *WXUNUSED(w), wxFontDialog *dialog )
82 {
83 if (g_isIdle)
84 wxapp_install_idle_handler();
85
86 wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
87 event.SetEventObject( dialog );
88 dialog->GetEventHandler()->ProcessEvent( event );
89 }
90 }
91
92 //-----------------------------------------------------------------------------
93 // wxFontDialog
94 //-----------------------------------------------------------------------------
95
96 IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
97
98 bool wxFontDialog::DoCreate(wxWindow *parent)
99 {
100 m_needParent = false;
101
102 if (!PreCreation( parent, wxDefaultPosition, wxDefaultSize ) ||
103 !CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE,
104 wxDefaultValidator, wxT("fontdialog") ))
105 {
106 wxFAIL_MSG( wxT("wxFontDialog creation failed") );
107 return false;
108 }
109
110 wxString m_message( _("Choose font") );
111 m_widget = gtk_font_selection_dialog_new( wxGTK_CONV( m_message ) );
112
113 if (parent)
114 gtk_window_set_transient_for(GTK_WINDOW(m_widget),
115 GTK_WINDOW(parent->m_widget));
116
117 GtkFontSelectionDialog *sel = GTK_FONT_SELECTION_DIALOG(m_widget);
118
119 g_signal_connect (sel->ok_button, "clicked",
120 G_CALLBACK (gtk_fontdialog_ok_callback), this);
121
122 g_signal_connect (sel->cancel_button, "clicked",
123 G_CALLBACK (gtk_fontdialog_cancel_callback), this);
124
125 g_signal_connect (m_widget, "delete_event",
126 G_CALLBACK (gtk_fontdialog_delete_callback), this);
127
128 wxFont font = m_fontData.GetInitialFont();
129 if( font.Ok() )
130 {
131 const wxNativeFontInfo *info = font.GetNativeFontInfo();
132
133 if ( info )
134 {
135
136 const wxString& fontname = info->ToString();
137 gtk_font_selection_dialog_set_font_name(sel, wxGTK_CONV(fontname));
138 }
139 else
140 {
141 // this is not supposed to happen!
142 wxFAIL_MSG(_T("font is ok but no native font info?"));
143 }
144 }
145
146 return true;
147 }
148
149 wxFontDialog::~wxFontDialog()
150 {
151 }
152
153 void wxFontDialog::SetChosenFont(const char *fontname)
154 {
155 m_fontData.SetChosenFont(wxFont( wxString::FromAscii(fontname) ));
156 }
157
158 #endif // wxUSE_FONTDLG && !__WXGPE__