Notification of a change in selection.

This commit is contained in:
hyatt%netscape.com 1999-06-07 20:57:34 +00:00
Родитель dfe0cf574d
Коммит c952601231
3 изменённых файлов: 30 добавлений и 7 удалений

Просмотреть файл

@ -338,6 +338,6 @@ nsTreeCellFrame::AttributeChanged(nsIPresContext* aPresContext,
NS_IMETHODIMP NS_IMETHODIMP
nsTreeCellFrame::DeleteFrame(nsIPresContext& aPresContext) nsTreeCellFrame::DeleteFrame(nsIPresContext& aPresContext)
{ {
mTreeFrame->RemoveFromSelection(this); mTreeFrame->RemoveFromSelection(aPresContext, this);
return nsTableCellFrame::DeleteFrame(aPresContext); return nsTableCellFrame::DeleteFrame(aPresContext);
} }

Просмотреть файл

@ -19,6 +19,7 @@
#include "nsTreeFrame.h" #include "nsTreeFrame.h"
#include "nsIStyleContext.h" #include "nsIStyleContext.h"
#include "nsIContent.h"
#include "nsCSSRendering.h" #include "nsCSSRendering.h"
#include "nsTreeCellFrame.h" #include "nsTreeCellFrame.h"
#include "nsCellMap.h" #include "nsCellMap.h"
@ -59,6 +60,8 @@ void nsTreeFrame::SetSelection(nsIPresContext& aPresContext, nsTreeCellFrame* pF
ClearSelection(aPresContext); ClearSelection(aPresContext);
mSelectedItems.AppendElement(pFrame); mSelectedItems.AppendElement(pFrame);
pFrame->Select(aPresContext, PR_TRUE); pFrame->Select(aPresContext, PR_TRUE);
FireChangeHandler(aPresContext);
} }
void nsTreeFrame::ToggleSelection(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame) void nsTreeFrame::ToggleSelection(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame)
@ -105,6 +108,8 @@ void nsTreeFrame::ToggleSelection(nsIPresContext& aPresContext, nsTreeCellFrame*
mSelectedItems.RemoveElementAt(inArray); mSelectedItems.RemoveElementAt(inArray);
pFrame->Select(aPresContext, PR_FALSE); pFrame->Select(aPresContext, PR_FALSE);
} }
FireChangeHandler(aPresContext);
} }
void nsTreeFrame::RangedSelection(nsIPresContext& aPresContext, nsTreeCellFrame* pEndFrame) void nsTreeFrame::RangedSelection(nsIPresContext& aPresContext, nsTreeCellFrame* pEndFrame)
@ -145,6 +150,8 @@ void nsTreeFrame::RangedSelection(nsIPresContext& aPresContext, nsTreeCellFrame*
mSelectedItems.AppendElement(pTreeCell); mSelectedItems.AppendElement(pTreeCell);
pTreeCell->Select(aPresContext, PR_TRUE); pTreeCell->Select(aPresContext, PR_TRUE);
} }
FireChangeHandler(aPresContext);
} }
void nsTreeFrame::ClearSelection(nsIPresContext& aPresContext) void nsTreeFrame::ClearSelection(nsIPresContext& aPresContext)
@ -161,7 +168,7 @@ void nsTreeFrame::ClearSelection(nsIPresContext& aPresContext)
} }
void void
nsTreeFrame::RemoveFromSelection(nsTreeCellFrame* frame) nsTreeFrame::RemoveFromSelection(nsIPresContext& aPresContext, nsTreeCellFrame* frame)
{ {
PRInt32 count = mSelectedItems.Count(); PRInt32 count = mSelectedItems.Count();
for (PRInt32 i = 0; i < count; i++) for (PRInt32 i = 0; i < count; i++)
@ -173,6 +180,8 @@ nsTreeFrame::RemoveFromSelection(nsTreeCellFrame* frame)
break; break;
} }
} }
FireChangeHandler(aPresContext);
} }
void nsTreeFrame::MoveUp(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame) void nsTreeFrame::MoveUp(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame)
@ -240,4 +249,19 @@ void nsTreeFrame::MoveToRowCol(nsIPresContext& aPresContext, PRInt32 row, PRInt3
// We now have the cell that should be selected. // We now have the cell that should be selected.
nsTreeCellFrame* pTreeCell = NS_STATIC_CAST(nsTreeCellFrame*, cellFrame); nsTreeCellFrame* pTreeCell = NS_STATIC_CAST(nsTreeCellFrame*, cellFrame);
SetSelection(aPresContext, pTreeCell); SetSelection(aPresContext, pTreeCell);
FireChangeHandler(aPresContext);
} }
void nsTreeFrame::FireChangeHandler(nsIPresContext& aPresContext)
{
nsEventStatus status = nsEventStatus_eIgnore;
nsEvent event;
event.eventStructType = NS_EVENT;
event.message = NS_FORM_CHANGE;
if (nsnull != mContent) {
mContent->HandleDOMEvent(aPresContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);
}
}

Просмотреть файл

@ -31,17 +31,16 @@ public:
void ClearSelection(nsIPresContext& presContext); void ClearSelection(nsIPresContext& presContext);
void ToggleSelection(nsIPresContext& presContext, nsTreeCellFrame* pFrame); void ToggleSelection(nsIPresContext& presContext, nsTreeCellFrame* pFrame);
void RangedSelection(nsIPresContext& aPresContext, nsTreeCellFrame* pEndFrame); void RangedSelection(nsIPresContext& aPresContext, nsTreeCellFrame* pEndFrame);
void RemoveFromSelection(nsTreeCellFrame* frame); void RemoveFromSelection(nsIPresContext& aPresContext, nsTreeCellFrame* frame);
void MoveUp(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame); void MoveUp(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame);
void MoveDown(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame); void MoveDown(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame);
void MoveLeft(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame); void MoveLeft(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame);
void MoveRight(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame); void MoveRight(nsIPresContext& aPresContext, nsTreeCellFrame* pFrame);
// using nsTableFrame::MoveTo; // don't hide inherited::Move
void MoveToRowCol(nsIPresContext& aPresContext, PRInt32 row, PRInt32 col, nsTreeCellFrame* pFrame); void MoveToRowCol(nsIPresContext& aPresContext, PRInt32 row, PRInt32 col, nsTreeCellFrame* pFrame);
// NOTE: CWPro4 still reports a warning about hiding inherited virtual functions.
// Compiler bug, ignore it. void FireChangeHandler(nsIPresContext& aPresContext);
protected: protected:
nsTreeFrame(); nsTreeFrame();
virtual ~nsTreeFrame(); virtual ~nsTreeFrame();