int wxComboBox::FindString( const wxString &item, bool bCase ) const { wxCHECK_MSG( m_widget != NULL, wxNOT_FOUND, wxT("invalid combobox") ); #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); GtkTreeModel* model = gtk_combo_box_get_model( combobox ); GtkTreeIter iter; gtk_tree_model_get_iter_first( model, &iter ); if (!gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter )) return -1; int count = 0; do { GValue value = { 0, }; gtk_tree_model_get_value( model, &iter, 0, &value ); wxString str = wxGTK_CONV_BACK( g_value_get_string( &value ) ); g_value_unset( &value ); if (item.IsSameAs( str, bCase ) ) return count; count++; } while (gtk_tree_model_iter_next( model, &iter )); } else #endif { GtkWidget *list = GTK_COMBO(m_widget)->list; GList *child = GTK_LIST(list)->children; int count = 0; while (child) { GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); wxString str( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); if (item.IsSameAs( str , bCase ) ) return count; count++; child = child->next; } } return wxNOT_FOUND; }
wxString wxNotebook::GetPageText( size_t page ) const { wxCHECK_MSG(page < GetPageCount(), wxEmptyString, "invalid notebook index"); GtkLabel* label = GTK_LABEL(GetNotebookPage(page)->m_label); return wxGTK_CONV_BACK(gtk_label_get_text(label)); }
wxString wxComboBox::DoGetValue() const { GtkEntry *entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry ); wxString tmp( wxGTK_CONV_BACK( gtk_entry_get_text( entry ) ) ); #if 0 #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 (int i = 0; i < wxStrlen(tmp.c_str()) +1; i++) { wxChar c = tmp[i]; printf( "%d ", (int) (c) ); } printf( "\n" ); #endif return tmp; }
wxString wxRadioBox::GetStringSelection() const { wxCHECK_MSG( m_widget != NULL, wxEmptyString, wxT("invalid radiobox") ); wxList::compatibility_iterator node = m_boxes.GetFirst(); while (node) { GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->GetData() ); if (button->active) { GtkLabel *label = GTK_LABEL( BUTTON_CHILD(node->GetData()) ); #ifdef __WXGTK20__ wxString str( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); #else wxString str( label->label ); #endif return str; } node = node->GetNext(); } wxFAIL_MSG( wxT("wxRadioBox none selected") ); return wxEmptyString; }
wxString wxStaticText::GetLabel() const { GtkLabel *label = GTK_LABEL(m_widget); wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); return wxString(str); }
wxString wxComboBox::GetStringSelection() const { wxCHECK_MSG( m_widget != NULL, wxEmptyString, wxT("invalid combobox") ); #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); int sel = gtk_combo_box_get_active( combobox ); if (sel == -1) return wxEmptyString; return GetString(sel); } else #endif { GtkWidget *list = GTK_COMBO(m_widget)->list; GList *selection = GTK_LIST(list)->selection; if (selection) { GtkBin *bin = GTK_BIN( selection->data ); GtkLabel *label = GTK_LABEL( bin->child ); wxString tmp( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); return tmp; } wxFAIL_MSG( wxT("wxComboBox: no selection") ); } return wxEmptyString; }
int wxChoice::FindString( const wxString &item, bool bCase ) const { wxCHECK_MSG( m_widget != NULL, wxNOT_FOUND, wxT("invalid control") ); GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); GtkTreeModel* model = gtk_combo_box_get_model( combobox ); GtkTreeIter iter; gtk_tree_model_get_iter_first( model, &iter ); if (!gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter )) return -1; int count = 0; do { GValue value = G_VALUE_INIT; gtk_tree_model_get_value( model, &iter, m_stringCellIndex, &value ); wxString str = wxGTK_CONV_BACK( g_value_get_string( &value ) ); g_value_unset( &value ); if (item.IsSameAs( str, bCase ) ) return count; count++; } while ( gtk_tree_model_iter_next(model, &iter) ); return wxNOT_FOUND; }
int wxRadioBox::FindString( const wxString &find ) const { wxCHECK_MSG( m_widget != NULL, wxNOT_FOUND, wxT("invalid radiobox") ); int count = 0; wxList::compatibility_iterator node = m_boxes.GetFirst(); while (node) { GtkLabel *label = GTK_LABEL( BUTTON_CHILD(node->GetData()) ); #ifdef __WXGTK20__ wxString str( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); #else wxString str( label->label ); #endif if (find == str) return count; count++; node = node->GetNext(); } return wxNOT_FOUND; }
wxString wxListBox::GetString(unsigned int n) const { wxCHECK_MSG( m_treeview != NULL, wxEmptyString, wxT("invalid listbox") ); wxTreeEntry* entry = GTKGetEntry(n); wxCHECK_MSG( entry, wxEmptyString, wxT("wrong listbox index") ); return wxGTK_CONV_BACK(wx_tree_entry_get_label(entry)); }
wxString wxTextEntry::GetHint() const { #if GTK_CHECK_VERSION(3,2,0) GtkEntry *entry = GetEntry(); if (entry && gtk_check_version(3,2,0) == NULL) return wxGTK_CONV_BACK(gtk_entry_get_placeholder_text(entry)); #endif return wxTextEntryBase::GetHint(); }
wxString wxComboBox::GetString(unsigned int n) const { wxCHECK_MSG( m_widget != NULL, wxEmptyString, wxT("invalid combobox") ); wxString str; #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) { GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); GtkTreeModel *model = gtk_combo_box_get_model( combobox ); GtkTreeIter iter; if (gtk_tree_model_iter_nth_child (model, &iter, NULL, n)) { GValue value = { 0, }; gtk_tree_model_get_value( model, &iter, 0, &value ); wxString tmp = wxGTK_CONV_BACK( g_value_get_string( &value ) ); g_value_unset( &value ); return tmp; } } else #endif { GtkWidget *list = GTK_COMBO(m_widget)->list; GList *child = g_list_nth( GTK_LIST(list)->children, n ); if (child) { GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); str = wxGTK_CONV_BACK( gtk_label_get_text(label) ); } else { wxFAIL_MSG( wxT("wxComboBox: wrong index") ); } } return str; }
wxString wxStaticText::GetLabel() const { GtkLabel *label = GTK_LABEL(m_widget); #ifdef __WXGTK20__ wxString str = wxGTK_CONV_BACK( gtk_label_get_text( label ) ); #else wxString str = wxString( label->label ); #endif return wxString(str); }
wxString wxRadioBox::GetString(unsigned int n) const { wxCHECK_MSG( m_widget != NULL, wxEmptyString, wxT("invalid radiobox") ); wxRadioBoxButtonsInfoList::compatibility_iterator node = m_buttonsInfo.Item( n ); wxCHECK_MSG( node, wxEmptyString, wxT("radiobox wrong index") ); GtkLabel* label = GTK_LABEL(gtk_bin_get_child(GTK_BIN(node->GetData()->button))); wxString str( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); return str; }
wxString wxComboBox::GetValue() const { GtkEntry *entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry ); wxString tmp( wxGTK_CONV_BACK( gtk_entry_get_text( entry ) ) ); #if 0 for (int i = 0; i < wxStrlen(tmp.c_str()) +1; i++) { wxChar c = tmp[i]; printf( "%d ", (int) (c) ); } printf( "\n" ); #endif return tmp; }
wxString wxRadioBox::GetString( int n ) const { wxCHECK_MSG( m_widget != NULL, wxEmptyString, wxT("invalid radiobox") ); wxList::compatibility_iterator node = m_boxes.Item( n ); wxCHECK_MSG( node, wxEmptyString, wxT("radiobox wrong index") ); GtkLabel *label = GTK_LABEL( BUTTON_CHILD(node->GetData()) ); #ifdef __WXGTK20__ wxString str( wxGTK_CONV_BACK( gtk_label_get_text(label) ) ); #else wxString str( label->label ); #endif return str; }
bool wxCheckListBox::IsChecked(unsigned int index) const { wxCHECK_MSG( m_list != NULL, false, wxT("invalid checklistbox") ); GList *child = g_list_nth( m_list->children, index ); if (child) { GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); wxString str( wxGTK_CONV_BACK( label->label ) ); return str.GetChar(1) == wxCHECKLBOX_CHECKED; } wxFAIL_MSG(wxT("wrong checklistbox index")); return false; }
wxString wxTextCtrl::DoGetValue() const { wxCHECK_MSG( m_text != NULL, wxEmptyString, wxT("invalid text ctrl") ); wxString tmp; if (m_windowStyle & wxTE_MULTILINE) { gint len = gtk_text_get_length( GTK_TEXT(m_text) ); char *text = gtk_editable_get_chars( GTK_EDITABLE(m_text), 0, len ); tmp = text; g_free( text ); } else { tmp = wxGTK_CONV_BACK( gtk_entry_get_text( GTK_ENTRY(m_text) ) ); } return tmp; }
wxString wxChoice::GetString(unsigned int n) const { wxCHECK_MSG( m_widget != NULL, wxEmptyString, wxT("invalid control") ); wxString str; GtkComboBox* combobox = GTK_COMBO_BOX( m_widget ); GtkTreeModel *model = gtk_combo_box_get_model( combobox ); GtkTreeIter iter; if (gtk_tree_model_iter_nth_child (model, &iter, NULL, n)) { GValue value = G_VALUE_INIT; gtk_tree_model_get_value( model, &iter, m_stringCellIndex, &value ); wxString tmp = wxGTK_CONV_BACK( g_value_get_string( &value ) ); g_value_unset( &value ); return tmp; } return str; }
void wxSpinCtrl::OnChar( wxKeyEvent &event ) { wxCHECK_RET( m_widget != NULL, wxT("invalid spin ctrl") ); if (event.GetKeyCode() == WXK_RETURN) { wxWindow *top_frame = m_parent; while (top_frame->GetParent() && !(top_frame->IsTopLevel())) top_frame = top_frame->GetParent(); if ( GTK_IS_WINDOW(top_frame->m_widget) ) { GtkWindow *window = GTK_WINDOW(top_frame->m_widget); if ( window ) { GtkWidget *widgetDef = window->default_widget; if ( widgetDef ) { gtk_widget_activate(widgetDef); return; } } } } if ((event.GetKeyCode() == WXK_RETURN) && (m_windowStyle & wxPROCESS_ENTER)) { wxCommandEvent evt( wxEVT_COMMAND_TEXT_ENTER, m_windowId ); evt.SetEventObject(this); GtkSpinButton *gsb = GTK_SPIN_BUTTON(m_widget); wxString val = wxGTK_CONV_BACK( gtk_entry_get_text( &gsb->entry ) ); evt.SetString( val ); if (GetEventHandler()->ProcessEvent(evt)) return; } event.Skip(); }
wxString wxComboBox::GetValue() const { GtkEntry *entry = NULL; #ifdef __WXGTK24__ if (!gtk_check_version(2,4,0)) entry = GTK_ENTRY( GTK_BIN(m_widget)->child ); else #endif entry = GTK_ENTRY( GTK_COMBO(m_widget)->entry ); wxString tmp( wxGTK_CONV_BACK( gtk_entry_get_text( entry ) ) ); #if 0 for (int i = 0; i < wxStrlen(tmp.c_str()) +1; i++) { wxChar c = tmp[i]; printf( "%d ", (int) (c) ); } printf( "\n" ); #endif return tmp; }
void wxCheckListBox::Check(unsigned int index, bool check ) { wxCHECK_RET( m_list != NULL, wxT("invalid checklistbox") ); GList *child = g_list_nth( m_list->children, index ); if (child) { GtkBin *bin = GTK_BIN( child->data ); GtkLabel *label = GTK_LABEL( bin->child ); wxString str( wxGTK_CONV_BACK( label->label ) ); if (check == (str.GetChar(1) == wxCHECKLBOX_CHECKED)) return; str.SetChar( 1, check ? wxCHECKLBOX_CHECKED : wxCHECKLBOX_UNCHECKED ); gtk_label_set( label, wxGTK_CONV( str ) ); return; } wxFAIL_MSG(wxT("wrong checklistbox index")); }
void wxSpinCtrlGTKBase::OnChar( wxKeyEvent &event ) { wxCHECK_RET( m_widget != NULL, wxT("invalid spin ctrl") ); if (event.GetKeyCode() == WXK_RETURN) { wxWindow *top_frame = wxGetTopLevelParent(m_parent); if ( GTK_IS_WINDOW(top_frame->m_widget) ) { GtkWindow *window = GTK_WINDOW(top_frame->m_widget); if ( window ) { GtkWidget* widgetDef = gtk_window_get_default_widget(window); if ( widgetDef ) { gtk_widget_activate(widgetDef); return; } } } } if ((event.GetKeyCode() == WXK_RETURN) && (m_windowStyle & wxTE_PROCESS_ENTER)) { wxCommandEvent evt( wxEVT_TEXT_ENTER, m_windowId ); evt.SetEventObject(this); GtkSpinButton *gsb = GTK_SPIN_BUTTON(m_widget); wxString val = wxGTK_CONV_BACK( gtk_entry_get_text( &gsb->entry ) ); evt.SetString( val ); if (HandleWindowEvent(evt)) return; } event.Skip(); }
void wxFontRefData::InitFromNative() { #if wxUSE_UNICODE // Get native info PangoFontDescription *desc = m_nativeFontInfo.description; // init fields m_faceName = wxGTK_CONV_BACK( pango_font_description_get_family( desc ) ); m_pointSize = static_cast<float>(pango_font_description_get_size( desc )) / PANGO_SCALE; switch (pango_font_description_get_style( desc )) { case PANGO_STYLE_NORMAL: m_style = wxFONTSTYLE_NORMAL; break; case PANGO_STYLE_ITALIC: m_style = wxFONTSTYLE_ITALIC; break; case PANGO_STYLE_OBLIQUE: m_style = wxFONTSTYLE_SLANT; break; } m_weight = pango_font_description_get_weight( desc ); #else // X11 // get the font parameters from the XLFD // ------------------------------------- m_faceName = m_nativeFontInfo.GetXFontComponent(wxXLFD_FAMILY); wxString w = m_nativeFontInfo.GetXFontComponent(wxXLFD_WEIGHT).Upper(); if ( !w.empty() && w != wxT('*') ) m_weight = ParseWeightString(w); else m_weight = wxFONTWEIGHT_NORMAL; switch ( wxToupper( m_nativeFontInfo. GetXFontComponent(wxXLFD_SLANT)[0u]).GetValue() ) { case wxT('I'): // italique m_style = wxFONTSTYLE_ITALIC; break; case wxT('O'): // oblique m_style = wxFONTSTYLE_SLANT; break; default: m_style = wxFONTSTYLE_NORMAL; } long ptSize; if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_POINTSIZE).ToLong(&ptSize) ) { // size in XLFD is in 10 point units m_pointSize = (int)(ptSize / 10); } else { m_pointSize = wxDEFAULT_FONT_SIZE; } // examine the spacing: if the font is monospaced, assume wxFONTFAMILY_TELETYPE // family for compatibility with the old code which used it instead of // IsFixedWidth() if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_SPACING).Upper() == wxT('M') ) { m_family = wxFONTFAMILY_TELETYPE; } else // not monospaceed { // don't even try guessing it, it doesn't work for too many fonts // anyhow m_family = wxFONTFAMILY_UNKNOWN; } // X fonts are never underlined... m_underlined = false; // deal with font encoding wxString registry = m_nativeFontInfo.GetXFontComponent(wxXLFD_REGISTRY).Upper(), encoding = m_nativeFontInfo.GetXFontComponent(wxXLFD_ENCODING).Upper(); if ( registry == wxT("ISO8859") ) { int cp; if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1); } } else if ( registry == wxT("MICROSOFT") ) { int cp; if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_CP1250 + cp); } } else if ( registry == wxT("KOI8") ) { m_encoding = wxFONTENCODING_KOI8; } else // unknown encoding { // may be give a warning here? or use wxFontMapper? m_encoding = wxFONTENCODING_SYSTEM; } #endif // Pango/X11 }
wxString wxNativeFontInfo::GetFaceName() const { wxString tmp = wxGTK_CONV_BACK( pango_font_description_get_family( description ) ); return tmp; }
static wxString GetGtkHotKey( const wxMenuItem& item ) { wxString hotkey; wxAcceleratorEntry *accel = item.GetAccel(); if ( accel ) { int flags = accel->GetFlags(); if ( flags & wxACCEL_ALT ) hotkey += wxT("<alt>"); if ( flags & wxACCEL_CTRL ) hotkey += wxT("<control>"); if ( flags & wxACCEL_SHIFT ) hotkey += wxT("<shift>"); int code = accel->GetKeyCode(); switch ( code ) { case WXK_F1: case WXK_F2: case WXK_F3: case WXK_F4: case WXK_F5: case WXK_F6: case WXK_F7: case WXK_F8: case WXK_F9: case WXK_F10: case WXK_F11: case WXK_F12: case WXK_F13: case WXK_F14: case WXK_F15: case WXK_F16: case WXK_F17: case WXK_F18: case WXK_F19: case WXK_F20: case WXK_F21: case WXK_F22: case WXK_F23: case WXK_F24: hotkey += wxString::Format(wxT("F%d"), code - WXK_F1 + 1); break; // TODO: we should use gdk_keyval_name() (a.k.a. // XKeysymToString) here as well as hardcoding the keysym // names this might be not portable case WXK_INSERT: hotkey << wxT("Insert" ); break; case WXK_DELETE: hotkey << wxT("Delete" ); break; case WXK_UP: hotkey << wxT("Up" ); break; case WXK_DOWN: hotkey << wxT("Down" ); break; case WXK_PAGEUP: case WXK_PRIOR: hotkey << wxT("Prior" ); break; case WXK_PAGEDOWN: case WXK_NEXT: hotkey << wxT("Next" ); break; case WXK_LEFT: hotkey << wxT("Left" ); break; case WXK_RIGHT: hotkey << wxT("Right" ); break; case WXK_HOME: hotkey << wxT("Home" ); break; case WXK_END: hotkey << wxT("End" ); break; case WXK_RETURN: hotkey << wxT("Return" ); break; case WXK_BACK: hotkey << wxT("BackSpace" ); break; case WXK_TAB: hotkey << wxT("Tab" ); break; case WXK_ESCAPE: hotkey << wxT("Esc" ); break; case WXK_SPACE: hotkey << wxT("space" ); break; case WXK_MULTIPLY: hotkey << wxT("Multiply" ); break; case WXK_ADD: hotkey << wxT("Add" ); break; case WXK_SEPARATOR: hotkey << wxT("Separator" ); break; case WXK_SUBTRACT: hotkey << wxT("Subtract" ); break; case WXK_DECIMAL: hotkey << wxT("Decimal" ); break; case WXK_DIVIDE: hotkey << wxT("Divide" ); break; case WXK_CANCEL: hotkey << wxT("Cancel" ); break; case WXK_CLEAR: hotkey << wxT("Clear" ); break; case WXK_MENU: hotkey << wxT("Menu" ); break; case WXK_PAUSE: hotkey << wxT("Pause" ); break; case WXK_CAPITAL: hotkey << wxT("Capital" ); break; case WXK_SELECT: hotkey << wxT("Select" ); break; case WXK_PRINT: hotkey << wxT("Print" ); break; case WXK_EXECUTE: hotkey << wxT("Execute" ); break; case WXK_SNAPSHOT: hotkey << wxT("Snapshot" ); break; case WXK_HELP: hotkey << wxT("Help" ); break; case WXK_NUMLOCK: hotkey << wxT("Num_Lock" ); break; case WXK_SCROLL: hotkey << wxT("Scroll_Lock" ); break; case WXK_NUMPAD_INSERT: hotkey << wxT("KP_Insert" ); break; case WXK_NUMPAD_DELETE: hotkey << wxT("KP_Delete" ); break; case WXK_NUMPAD_SPACE: hotkey << wxT("KP_Space" ); break; case WXK_NUMPAD_TAB: hotkey << wxT("KP_Tab" ); break; case WXK_NUMPAD_ENTER: hotkey << wxT("KP_Enter" ); break; case WXK_NUMPAD_F1: case WXK_NUMPAD_F2: case WXK_NUMPAD_F3: case WXK_NUMPAD_F4: hotkey += wxString::Format(wxT("KP_F%d"), code - WXK_NUMPAD_F1 + 1); break; case WXK_NUMPAD_HOME: hotkey << wxT("KP_Home" ); break; case WXK_NUMPAD_LEFT: hotkey << wxT("KP_Left" ); break; case WXK_NUMPAD_UP: hotkey << wxT("KP_Up" ); break; case WXK_NUMPAD_RIGHT: hotkey << wxT("KP_Right" ); break; case WXK_NUMPAD_DOWN: hotkey << wxT("KP_Down" ); break; case WXK_NUMPAD_PRIOR: case WXK_NUMPAD_PAGEUP: hotkey << wxT("KP_Prior" ); break; case WXK_NUMPAD_NEXT: case WXK_NUMPAD_PAGEDOWN: hotkey << wxT("KP_Next" ); break; case WXK_NUMPAD_END: hotkey << wxT("KP_End" ); break; case WXK_NUMPAD_BEGIN: hotkey << wxT("KP_Begin" ); break; case WXK_NUMPAD_EQUAL: hotkey << wxT("KP_Equal" ); break; case WXK_NUMPAD_MULTIPLY: hotkey << wxT("KP_Multiply" ); break; case WXK_NUMPAD_ADD: hotkey << wxT("KP_Add" ); break; case WXK_NUMPAD_SEPARATOR: hotkey << wxT("KP_Separator" ); break; case WXK_NUMPAD_SUBTRACT: hotkey << wxT("KP_Subtract" ); break; case WXK_NUMPAD_DECIMAL: hotkey << wxT("KP_Decimal" ); break; case WXK_NUMPAD_DIVIDE: hotkey << wxT("KP_Divide" ); break; case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: hotkey += wxString::Format(wxT("KP_%d"), code - WXK_NUMPAD0); break; case WXK_WINDOWS_LEFT: hotkey << wxT("Super_L" ); break; case WXK_WINDOWS_RIGHT: hotkey << wxT("Super_R" ); break; case WXK_WINDOWS_MENU: hotkey << wxT("Menu" ); break; case WXK_COMMAND: hotkey << wxT("Command" ); break; /* These probably wouldn't work as there is no SpecialX in gdk/keynames.txt case WXK_SPECIAL1: case WXK_SPECIAL2: case WXK_SPECIAL3: case WXK_SPECIAL4: case WXK_SPECIAL5: case WXK_SPECIAL6: case WXK_SPECIAL7: case WXK_SPECIAL8: case WXK_SPECIAL9: case WXK_SPECIAL10: case WXK_SPECIAL11: case WXK_SPECIAL12: case WXK_SPECIAL13: case WXK_SPECIAL14: case WXK_SPECIAL15: case WXK_SPECIAL16: case WXK_SPECIAL17: case WXK_SPECIAL18: case WXK_SPECIAL19: case WXK_SPECIAL20: hotkey += wxString::Format(wxT("Special%d"), code - WXK_SPECIAL1 + 1); break; */ // if there are any other keys wxGetAccelFromString() may // return, we should process them here default: if ( code < 127 ) { wxString name = wxGTK_CONV_BACK( gdk_keyval_name((guint)code) ); if ( name ) { hotkey << name; break; } } wxFAIL_MSG( wxT("unknown keyboard accel") ); } delete accel; } return hotkey; }
void wxFontRefData::InitFromNative() { #if wxUSE_UNICODE // Get native info PangoFontDescription *desc = m_nativeFontInfo.description; // init fields m_faceName = wxGTK_CONV_BACK( pango_font_description_get_family( desc ) ); m_pointSize = pango_font_description_get_size( desc ) / PANGO_SCALE; switch (pango_font_description_get_style( desc )) { case PANGO_STYLE_NORMAL: m_style = wxFONTSTYLE_NORMAL; break; case PANGO_STYLE_ITALIC: m_style = wxFONTSTYLE_ITALIC; break; case PANGO_STYLE_OBLIQUE: m_style = wxFONTSTYLE_SLANT; break; } // Not defined in some Pango versions #define wxPANGO_WEIGHT_SEMIBOLD 600 switch (pango_font_description_get_weight( desc )) { case PANGO_WEIGHT_ULTRALIGHT: case PANGO_WEIGHT_LIGHT: m_weight = wxFONTWEIGHT_LIGHT; break; default: wxFAIL_MSG(wxT("unknown Pango font weight")); // fall through case PANGO_WEIGHT_NORMAL: m_weight = wxFONTWEIGHT_NORMAL; break; case wxPANGO_WEIGHT_SEMIBOLD: case PANGO_WEIGHT_BOLD: case PANGO_WEIGHT_ULTRABOLD: case PANGO_WEIGHT_HEAVY: m_weight = wxFONTWEIGHT_BOLD; break; } if (m_faceName == wxT("monospace")) { m_family = wxFONTFAMILY_TELETYPE; } else if (m_faceName == wxT("sans")) { m_family = wxFONTFAMILY_SWISS; } else { m_family = wxFONTFAMILY_UNKNOWN; } // Pango description are never underlined (?) m_underlined = false; // Cannot we choose that m_encoding = wxFONTENCODING_SYSTEM; #else // X11 // get the font parameters from the XLFD // ------------------------------------- m_faceName = m_nativeFontInfo.GetXFontComponent(wxXLFD_FAMILY); m_weight = wxFONTWEIGHT_NORMAL; wxString w = m_nativeFontInfo.GetXFontComponent(wxXLFD_WEIGHT).Upper(); if ( !w.empty() && w != wxT('*') ) { // the test below catches all of BOLD, EXTRABOLD, DEMIBOLD, ULTRABOLD // and BLACK if ( ((w[0u] == wxT('B') && (!wxStrcmp(w.c_str() + 1, wxT("OLD")) || !wxStrcmp(w.c_str() + 1, wxT("LACK"))))) || wxStrstr(w.c_str() + 1, wxT("BOLD")) ) { m_weight = wxFONTWEIGHT_BOLD; } else if ( w == wxT("LIGHT") || w == wxT("THIN") ) { m_weight = wxFONTWEIGHT_LIGHT; } } switch ( wxToupper( m_nativeFontInfo. GetXFontComponent(wxXLFD_SLANT)[0u]).GetValue() ) { case wxT('I'): // italique m_style = wxFONTSTYLE_ITALIC; break; case wxT('O'): // oblique m_style = wxFONTSTYLE_SLANT; break; default: m_style = wxFONTSTYLE_NORMAL; } long ptSize; if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_POINTSIZE).ToLong(&ptSize) ) { // size in XLFD is in 10 point units m_pointSize = (int)(ptSize / 10); } else { m_pointSize = wxDEFAULT_FONT_SIZE; } // examine the spacing: if the font is monospaced, assume wxTELETYPE // family for compatibility with the old code which used it instead of // IsFixedWidth() if ( m_nativeFontInfo.GetXFontComponent(wxXLFD_SPACING).Upper() == wxT('M') ) { m_family = wxFONTFAMILY_TELETYPE; } else // not monospaceed { // don't even try guessing it, it doesn't work for too many fonts // anyhow m_family = wxFONTFAMILY_UNKNOWN; } // X fonts are never underlined... m_underlined = false; // deal with font encoding wxString registry = m_nativeFontInfo.GetXFontComponent(wxXLFD_REGISTRY).Upper(), encoding = m_nativeFontInfo.GetXFontComponent(wxXLFD_ENCODING).Upper(); if ( registry == wxT("ISO8859") ) { int cp; if ( wxSscanf(encoding, wxT("%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_ISO8859_1 + cp - 1); } } else if ( registry == wxT("MICROSOFT") ) { int cp; if ( wxSscanf(encoding, wxT("cp125%d"), &cp) == 1 ) { m_encoding = (wxFontEncoding)(wxFONTENCODING_CP1250 + cp); } } else if ( registry == wxT("KOI8") ) { m_encoding = wxFONTENCODING_KOI8; } else // unknown encoding { // may be give a warning here? or use wxFontMapper? m_encoding = wxFONTENCODING_SYSTEM; } #endif // Pango/X11 }
wxString wxNativeFontInfo::ToString() const { wxGtkString str(pango_font_description_to_string( description )); return wxGTK_CONV_BACK(str); }