merged 2.2 branch

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Bryan Petty
2000-07-15 19:51:35 +00:00
parent 8a693e6e04
commit f6bcfd974e
1835 changed files with 237729 additions and 67990 deletions

View File

@@ -29,6 +29,9 @@
#include "wx/msw/private.h"
// Set this to 1 to be _absolutely_ sure that repainting will work for all comctl32.dll versions
#define wxUSE_COMCTL32_SAFELY 0
// Mingw32 is a bit mental even though this is done in winundef
#ifdef GetFirstChild
#undef GetFirstChild
@@ -112,7 +115,7 @@ static bool IsItemSelected(HWND hwndTV, HTREEITEM hItem)
if ( !TreeView_GetItem(hwndTV, &tvi) )
{
wxLogLastError("TreeView_GetItem");
wxLogLastError(wxT("TreeView_GetItem"));
}
return (tvi.state & TVIS_SELECTED) != 0;
@@ -128,7 +131,7 @@ static void SelectItem(HWND hwndTV, HTREEITEM hItem, bool select = TRUE)
if ( TreeView_SetItem(hwndTV, &tvi) == -1 )
{
wxLogLastError("TreeView_SetItem");
wxLogLastError(wxT("TreeView_SetItem"));
}
}
@@ -516,7 +519,7 @@ bool wxTreeCtrl::Create(wxWindow *parent,
return FALSE;
DWORD wstyle = WS_VISIBLE | WS_CHILD | WS_TABSTOP |
TVS_HASLINES | TVS_SHOWSELALWAYS;
TVS_HASLINES | TVS_SHOWSELALWAYS /* | WS_CLIPSIBLINGS */;
if ( m_windowStyle & wxTR_HAS_BUTTONS )
wstyle |= TVS_HASBUTTONS;
@@ -545,17 +548,23 @@ bool wxTreeCtrl::Create(wxWindow *parent,
if ( !MSWCreateControl(WC_TREEVIEW, wstyle) )
return FALSE;
#if 0
#if wxUSE_COMCTL32_SAFELY
wxWindow::SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW));
wxWindow::SetForegroundColour(wxWindow::GetParent()->GetForegroundColour());
#elif 1
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW));
SetForegroundColour(wxWindow::GetParent()->GetForegroundColour());
#else
// This works around a bug in the Windows tree control whereby for some versions
// of comctrl32, setting any colour actually draws the background in black.
// This will initialise the background to the system colour.
// THIS FIX NOW REVERTED since it caused problems on _other_ systems.
// Assume the user has an updated comctl32.dll.
::SendMessage(GetHwnd(), TVM_SETBKCOLOR, 0,-1);
wxWindow::SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW));
SetForegroundColour(wxWindow::GetParent()->GetForegroundColour());
#endif
SetForegroundColour(wxWindow::GetParent()->GetForegroundColour());
// VZ: this is some experimental code which may be used to get the
// TVS_CHECKBOXES style functionality for comctl32.dll < 4.71.
@@ -643,7 +652,7 @@ bool wxTreeCtrl::DoGetItem(wxTreeViewItem* tvItem) const
{
if ( !TreeView_GetItem(GetHwnd(), tvItem) )
{
wxLogLastError("TreeView_GetItem");
wxLogLastError(wxT("TreeView_GetItem"));
return FALSE;
}
@@ -655,7 +664,7 @@ void wxTreeCtrl::DoSetItem(wxTreeViewItem* tvItem)
{
if ( TreeView_SetItem(GetHwnd(), tvItem) == -1 )
{
wxLogLastError("TreeView_SetItem");
wxLogLastError(wxT("TreeView_SetItem"));
}
}
@@ -716,20 +725,24 @@ size_t wxTreeCtrl::GetChildrenCount(const wxTreeItemId& item,
bool wxTreeCtrl::SetBackgroundColour(const wxColour &colour)
{
#if !wxUSE_COMCTL32_SAFELY
if ( !wxWindowBase::SetBackgroundColour(colour) )
return FALSE;
SendMessage(GetHwnd(), TVM_SETBKCOLOR, 0, colour.GetPixel());
#endif
return TRUE;
}
bool wxTreeCtrl::SetForegroundColour(const wxColour &colour)
{
#if !wxUSE_COMCTL32_SAFELY
if ( !wxWindowBase::SetForegroundColour(colour) )
return FALSE;
SendMessage(GetHwnd(), TVM_SETTEXTCOLOR, 0, colour.GetPixel());
#endif
return TRUE;
}
@@ -1151,16 +1164,14 @@ wxTreeItemId wxTreeCtrl::GetFirstVisibleItem() const
wxTreeItemId wxTreeCtrl::GetNextVisible(const wxTreeItemId& item) const
{
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetNextVisible() "
"for must be visible itself!"));
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetNextVisible() for must be visible itself!"));
return wxTreeItemId((WXHTREEITEM) TreeView_GetNextVisible(GetHwnd(), HITEM(item)));
}
wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
{
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetPrevVisible() "
"for must be visible itself!"));
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetPrevVisible() for must be visible itself!"));
return wxTreeItemId((WXHTREEITEM) TreeView_GetPrevVisible(GetHwnd(), HITEM(item)));
}
@@ -1228,6 +1239,11 @@ wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent,
mask |= TVIF_TEXT;
tvIns.item.pszText = (wxChar *)text.c_str(); // cast is ok
}
else
{
tvIns.item.pszText = NULL;
tvIns.item.cchTextMax = 0;
}
if ( image != -1 )
{
@@ -1258,7 +1274,7 @@ wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent,
HTREEITEM id = (HTREEITEM) TreeView_InsertItem(GetHwnd(), &tvIns);
if ( id == 0 )
{
wxLogLastError("TreeView_InsertItem");
wxLogLastError(wxT("TreeView_InsertItem"));
}
if ( data != NULL )
@@ -1343,7 +1359,7 @@ void wxTreeCtrl::Delete(const wxTreeItemId& item)
{
if ( !TreeView_DeleteItem(GetHwnd(), HITEM(item)) )
{
wxLogLastError("TreeView_DeleteItem");
wxLogLastError(wxT("TreeView_DeleteItem"));
}
}
@@ -1366,7 +1382,7 @@ void wxTreeCtrl::DeleteChildren(const wxTreeItemId& item)
{
if ( !TreeView_DeleteItem(GetHwnd(), (HTREEITEM)children[n]) )
{
wxLogLastError("TreeView_DeleteItem");
wxLogLastError(wxT("TreeView_DeleteItem"));
}
}
}
@@ -1375,7 +1391,7 @@ void wxTreeCtrl::DeleteAllItems()
{
if ( !TreeView_DeleteAllItems(GetHwnd()) )
{
wxLogLastError("TreeView_DeleteAllItems");
wxLogLastError(wxT("TreeView_DeleteAllItems"));
}
}
@@ -1500,7 +1516,7 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& item)
{
if ( !TreeView_SelectItem(GetHwnd(), HITEM(item)) )
{
wxLogLastError("TreeView_SelectItem");
wxLogLastError(wxT("TreeView_SelectItem"));
}
else
{
@@ -1522,7 +1538,7 @@ void wxTreeCtrl::ScrollTo(const wxTreeItemId& item)
{
if ( !TreeView_SelectSetFirstVisible(GetHwnd(), HITEM(item)) )
{
wxLogLastError("TreeView_SelectSetFirstVisible");
wxLogLastError(wxT("TreeView_SelectSetFirstVisible"));
}
}
@@ -1924,25 +1940,6 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
switch ( hdr->code )
{
case NM_RCLICK:
{
if ( wxControl::MSWOnNotify(idCtrl, lParam, result) )
return TRUE;
TV_HITTESTINFO tvhti;
::GetCursorPos(&(tvhti.pt));
::ScreenToClient(GetHwnd(),&(tvhti.pt));
if ( TreeView_HitTest(GetHwnd(),&tvhti) )
{
if( tvhti.flags & TVHT_ONITEM )
{
event.m_item = (WXHTREEITEM) tvhti.hItem;
eventType = wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK;
}
}
}
break;
case TVN_BEGINDRAG:
eventType = wxEVT_COMMAND_TREE_BEGIN_DRAG;
// fall through
@@ -2038,8 +2035,7 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
break;
default:
wxLogDebug(wxT("unexpected code %d in TVN_ITEMEXPAND "
"message"), tv->action);
wxLogDebug(wxT("unexpected code %d in TVN_ITEMEXPAND message"), tv->action);
}
bool ing = ((int)hdr->code == TVN_ITEMEXPANDING);
@@ -2091,7 +2087,7 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
}
break;
#if defined(_WIN32_IE) && _WIN32_IE >= 0x300
#if defined(_WIN32_IE) && _WIN32_IE >= 0x300 && !wxUSE_COMCTL32_SAFELY
case NM_CUSTOMDRAW:
{
LPNMTVCUSTOMDRAW lptvcd = (LPNMTVCUSTOMDRAW)lParam;
@@ -2188,6 +2184,27 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
break;
#endif // _WIN32_IE >= 0x300
case NM_DBLCLK:
case NM_RCLICK:
{
TV_HITTESTINFO tvhti;
::GetCursorPos(&tvhti.pt);
::ScreenToClient(GetHwnd(), &tvhti.pt);
if ( TreeView_HitTest(GetHwnd(), &tvhti) )
{
if ( tvhti.flags & TVHT_ONITEM )
{
event.m_item = (WXHTREEITEM) tvhti.hItem;
eventType = (int)hdr->code == NM_DBLCLK
? wxEVT_COMMAND_TREE_ITEM_ACTIVATED
: wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK;
}
break;
}
}
// fall through
default:
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
@@ -2200,6 +2217,14 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
// post processing
switch ( hdr->code )
{
case NM_DBLCLK:
// we translate NM_DBLCLK into ACTIVATED event, so don't interpret
// the return code of this event handler as the return value for
// NM_DBLCLK - otherwise, double clicking the item to toggle its
// expanded status would never work
*result = FALSE;
break;
case TVN_BEGINDRAG:
case TVN_BEGINRDRAG:
if ( event.IsAllowed() )