friend class wxTreeRenameTimer;
friend class wxTreeTextCtrl;
+ wxFont m_normalFont;
+ wxFont m_boldFont;
+
wxGenericTreeItem *m_anchor;
wxGenericTreeItem *m_current, *m_key_current, *m_currentEdit;
bool m_hasFocus;
void MyPanel::DoCopyToClipboard()
{
+ // On X11, we want to get the data from the primary selection instead
+ // of the normal clipboard (which isn't normal under X11 at all). This
+ // call has no effect under MSW.
+ wxTheClipboard->UsePrimarySelection();
+
wxString text( m_multitext->GetLineText(0) );
if (text.IsEmpty())
m_dragCount = 0;
m_renameTimer = new wxTreeRenameTimer( this );
+
+ m_normalFont = wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT );
+ m_boldFont = wxFont( m_normalFont.GetPointSize(),
+ m_normalFont.GetFamily(),
+ m_normalFont.GetStyle(),
+ wxBOLD,
+ m_normalFont.GetUnderlined());
}
bool wxTreeCtrl::Create(wxWindow *parent, wxWindowID id,
void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
{
- // render bold items in bold
- wxFont fontOld;
- wxFont fontNew;
-
if (item->IsBold())
- {
- fontOld = dc.GetFont();
- if (fontOld.Ok())
- {
- // VZ: is there any better way to make a bold variant of old font?
- fontNew = wxFont( fontOld.GetPointSize(),
- fontOld.GetFamily(),
- fontOld.GetStyle(),
- wxBOLD,
- fontOld.GetUnderlined());
- dc.SetFont(fontNew);
- }
- else
- {
- wxFAIL_MSG(wxT("wxDC::GetFont() failed!"));
- }
- }
+ dc.SetFont(m_boldFont);
long text_w = 0;
long text_h = 0;
dc.DrawText( item->GetText(), image_w + item->GetX(), item->GetY()
+ ((total_h > text_h) ? (total_h - text_h)/2 : 0));
- // restore normal font for bold items
- if (fontOld.Ok())
- {
- dc.SetFont( fontOld);
- }
+ // restore normal font
+ dc.SetFont( m_normalFont );
}
// Now y stands for the top of the item, whereas it used to stand for middle !
wxPaintDC dc(this);
PrepareDC( dc );
- dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT ) );
-
+ dc.SetFont( m_normalFont );
dc.SetPen( m_dottedPen );
+
+ // this is now done dynamically
//if(GetImageList() == NULL)
// m_lineHeight = (int)(dc.GetCharHeight() + 4);
long text_w = 0;
long text_h = 0;
- wxFont fontOld;
- wxFont fontNew;
if (item->IsBold())
- {
- fontOld = dc.GetFont();
- if (fontOld.Ok())
- {
- // VZ: is there any better way to make a bold variant of old font?
- fontNew = wxFont( fontOld.GetPointSize(),
- fontOld.GetFamily(),
- fontOld.GetStyle(),
- wxBOLD,
- fontOld.GetUnderlined());
- dc.SetFont(fontNew);
- }
- else
- {
- wxFAIL_MSG(wxT("wxDC::GetFont() failed!"));
- }
- }
+ dc.SetFont(m_boldFont);
dc.GetTextExtent( item->GetText(), &text_w, &text_h );
text_h+=2;
- // restore normal font for bold items
- if (fontOld.Ok())
- dc.SetFont( fontOld);
+ // restore normal font
+ dc.SetFont( m_normalFont );
int image_h = 0;
int image_w = 0;
wxClientDC dc(this);
PrepareDC( dc );
- dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT ) );
+ dc.SetFont( m_normalFont );
dc.SetPen( m_dottedPen );
//if(GetImageList() == NULL)
if ( wxTheClipboard && selection_data->length > 0 )
{
/* make sure we got the data in the correct form */
-
- // VZ: I don't know what does this mean (and GTK+ authors apparently
- // don't know either, Owen Taylor writes that "Motif seems to ask
- // for TARGETS atom sometimes" (??)), but it seems that xterm
- // (which is not a Motif app AFAIK) does this too, so it's
- // absolutely essential to support this, otherwise we can't paste
- // text from xterm!
GdkAtom type = selection_data->type;
if ( type != GDK_SELECTION_TYPE_ATOM )
{
- if ( strcmp(gdk_atom_name(type), "TARGETS") != 0 )
- {
- // don't know what this is
- clipboard->m_waiting = FALSE;
- return;
- }
- //else: don't know what this is, but it seems to work in the same
- // way as GDK_SELECTION_TYPE_ATOM does
+ clipboard->m_waiting = FALSE;
+ return;
}
- //else: the data is the list of formats supported by the selection
- /*
+/*
wxDataFormat clip( selection_data->selection );
wxLogDebug( wxT("selection received for targets, clipboard %s"), clip.GetId().c_str() );
- */
+*/
// the atoms we received, holding a list of targets (= formats)
GdkAtom *atoms = (GdkAtom *)selection_data->data;
{
wxDataFormat format( atoms[i] );
- /*
+/*
wxLogDebug( wxT("selection received for targets, format %s"), format.GetId().c_str() );
- */
+*/
if (format == clipboard->m_targetRequested)
{
bool wxClipboard::IsSupported( const wxDataFormat& format )
{
/* reentrance problems */
- if (m_open) return TRUE;
+ if (m_waiting) return FALSE;
/* store requested format to be asked for by callbacks */
m_targetRequested = format;
+ wxLogDebug( wxT("wxClipboard:IsSupported: requested format: %s"), format.GetId().c_str() );
+
wxCHECK_MSG( m_targetRequested, FALSE, wxT("invalid clipboard format") );
m_formatSupported = FALSE;
if ( wxTheClipboard && selection_data->length > 0 )
{
/* make sure we got the data in the correct form */
-
- // VZ: I don't know what does this mean (and GTK+ authors apparently
- // don't know either, Owen Taylor writes that "Motif seems to ask
- // for TARGETS atom sometimes" (??)), but it seems that xterm
- // (which is not a Motif app AFAIK) does this too, so it's
- // absolutely essential to support this, otherwise we can't paste
- // text from xterm!
GdkAtom type = selection_data->type;
if ( type != GDK_SELECTION_TYPE_ATOM )
{
- if ( strcmp(gdk_atom_name(type), "TARGETS") != 0 )
- {
- // don't know what this is
- clipboard->m_waiting = FALSE;
- return;
- }
- //else: don't know what this is, but it seems to work in the same
- // way as GDK_SELECTION_TYPE_ATOM does
+ clipboard->m_waiting = FALSE;
+ return;
}
- //else: the data is the list of formats supported by the selection
- /*
+/*
wxDataFormat clip( selection_data->selection );
wxLogDebug( wxT("selection received for targets, clipboard %s"), clip.GetId().c_str() );
- */
+*/
// the atoms we received, holding a list of targets (= formats)
GdkAtom *atoms = (GdkAtom *)selection_data->data;
{
wxDataFormat format( atoms[i] );
- /*
+/*
wxLogDebug( wxT("selection received for targets, format %s"), format.GetId().c_str() );
- */
+*/
if (format == clipboard->m_targetRequested)
{
bool wxClipboard::IsSupported( const wxDataFormat& format )
{
/* reentrance problems */
- if (m_open) return TRUE;
+ if (m_waiting) return FALSE;
/* store requested format to be asked for by callbacks */
m_targetRequested = format;
+ wxLogDebug( wxT("wxClipboard:IsSupported: requested format: %s"), format.GetId().c_str() );
+
wxCHECK_MSG( m_targetRequested, FALSE, wxT("invalid clipboard format") );
m_formatSupported = FALSE;