From 4fee03ae061eeb6fa7abdbdb7170022dfbfade10 Mon Sep 17 00:00:00 2001 From: "cmanske%netscape.com" Date: Fri, 9 Oct 1998 22:06:36 +0000 Subject: [PATCH] Fixed lack of scrolling when selecting table and dragging, fixed scrolling bugs. Cleaned up font size message handlers and bugs git-svn-id: svn://10.0.0.236/trunk@12459 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/cmd/winfe/cxwin.cpp | 192 +++++++++++++++++++------------ mozilla/cmd/winfe/cxwin.h | 4 + mozilla/cmd/winfe/edframe.h | 3 - mozilla/cmd/winfe/editor.rc | 2 +- mozilla/cmd/winfe/edprops.h | 4 + mozilla/cmd/winfe/edtable.h | 6 - mozilla/cmd/winfe/edview.cpp | 102 ++++++++-------- mozilla/cmd/winfe/edview.h | 11 -- mozilla/cmd/winfe/edview2.cpp | 119 ++++--------------- mozilla/cmd/winfe/res/editor.rc2 | 8 +- 10 files changed, 200 insertions(+), 251 deletions(-) diff --git a/mozilla/cmd/winfe/cxwin.cpp b/mozilla/cmd/winfe/cxwin.cpp index 82d870821fb..e5128a25286 100644 --- a/mozilla/cmd/winfe/cxwin.cpp +++ b/mozilla/cmd/winfe/cxwin.cpp @@ -3238,10 +3238,10 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, XP_ASSERT(0); #else - MWContext * context = GetContext(); + MWContext * pMWContext = GetContext(); BOOL bTextSet = FALSE; - BOOL bIsEditor = EDT_IS_EDITOR(context); + BOOL bIsEditor = EDT_IS_EDITOR(pMWContext); LO_Element *pElement = GetLayoutElement(xyPoint, layer); if (pElement && (pElement->type == LO_IMAGE)) { @@ -3257,7 +3257,7 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, // don't do anything if we are waiting for the netlib to get // into gear - if (context->waitingMode) { + if (pMWContext->waitingMode) { // Change cursor only if not doing internal drag if( !m_bDragging ){ SetCursor(theApp.LoadStandardCursor(IDC_WAIT)); @@ -3278,7 +3278,8 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, // We must fire an event to setup CLOSURE struct // and call mouse_closure_callback FireMouseOverEvent(NULL, xVal, yVal, layer); - goto MOUSE_TIMER; + // Allow autoscrolling when mouse leaves window + goto CHECK_SCROLL_WINDOW; } if( EDT_IS_SIZING ) { @@ -3286,7 +3287,7 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, BOOL bLock = !(BOOL)(uFlags & MK_CONTROL); XP_Rect new_rect; - if( EDT_GetSizingRect(context, xVal, yVal, bLock, &new_rect) ) + if( EDT_GetSizingRect(pMWContext, xVal, yVal, bLock, &new_rect) ) { // Remove last sizing feedback DisplaySelectionFeedback(LO_ELE_SELECTED, m_rectSizing); @@ -3301,17 +3302,19 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, } // Status text was set by XP code, so set flag here bTextSet = TRUE; + //TODO: If we can figure out how to do rubber-banding + // while scrolling the window, we can jump to CHECK_SCROLL_WINDOW; goto MOUSE_TIMER; } // Check for cell selection only if not starting drag of table cells - if( !EDT_IsDraggingTable(context) ) + if( !EDT_IsDraggingTable(pMWContext) ) { // We are not currently selecting cells, so get the cell we may be over // Note: This will return cell and ED_HIT_SIZE_COL if inbetween columns, // so check that because we don't want to select cell if just before the left edge LO_Element *pCellElement = NULL; // Mouse move test with left button down - extend selection to other cells - ED_HitType iTableHit = EDT_GetTableHitRegion(context, xVal, yVal, &pCellElement, FALSE); + ED_HitType iTableHit = EDT_GetTableHitRegion(pMWContext, xVal, yVal, &pCellElement, FALSE); if( m_pStartSelectionCell && pCellElement && (iTableHit != ED_HIT_SIZE_COL) && pCellElement->type == LO_CELL && (pCellElement != m_pStartSelectionCell) ) @@ -3323,14 +3326,14 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, // So switch to cell-selection mode. // 1st FALSE param means clear any other selection (shouldn't be any) // (last param is used to extend selection) - EDT_SelectTableElement(context, m_pStartSelectionCell->lo_any.x, m_pStartSelectionCell->lo_any.y, + EDT_SelectTableElement(pMWContext, m_pStartSelectionCell->lo_any.x, m_pStartSelectionCell->lo_any.y, m_pStartSelectionCell, ED_HIT_SEL_CELL, FALSE, FALSE); } // Select new cell as well: If previously selecting, last param = TRUE // and we append this cell - EDT_SelectTableElement(context, xVal, yVal, pCellElement, ED_HIT_SEL_CELL, + EDT_SelectTableElement(pMWContext, xVal, yVal, pCellElement, ED_HIT_SEL_CELL, FALSE, m_pStartSelectionCell != NULL); - goto MOUSE_TIMER; + goto CHECK_SCROLL_WINDOW; //MOUSE_TIMER; } } #endif // EDITOR @@ -3353,6 +3356,8 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, // Get and drag the selection DragSelection(); + // Unfortunately, the Window doesn't scroll + // during dragging // Don't do anything else if we are dragging! goto MOUSE_TIMER; } @@ -3362,7 +3367,7 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, { // TODO: There's a bug in extending the selection: // It looses the selection on an object, such as an image - EDT_ExtendSelection(context, xVal, yVal); + EDT_ExtendSelection(pMWContext, xVal, yVal); } else #endif // EDITOR { @@ -3371,52 +3376,10 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, } } - int32 lYPos = GetOriginY(); - int32 lXPos = GetOriginX(); - int32 xCur = xVal; - int32 yCur = yVal; -#ifdef LAYERS - if (layer) - { - int32 layer_x_offset = CL_GetLayerXOrigin(layer); - int32 layer_y_offset = CL_GetLayerYOrigin(layer); - - xCur += layer_x_offset; - yCur += layer_y_offset; - } -#endif // LAYERS - if(xCur < GetOriginX()) { - lXPos = xCur; - } - else if(xCur > GetWidth() + GetOriginX()) { - lXPos = xCur - GetWidth(); - } - - if(yCur < GetOriginY()) { - lYPos = yCur; - } - else if(yVal > GetHeight() + GetOriginY()) { - lYPos = yCur - GetHeight(); - } - - // Validate position recommendations, and reposition if necessary. - if(lXPos > GetDocumentWidth() - GetWidth()) { - lXPos = GetDocumentWidth() - GetWidth(); - } - if(lXPos < 0) { - lXPos = GetOriginX(); - } - if(lYPos > GetDocumentHeight() - GetHeight()) { - lYPos = GetDocumentHeight() - GetHeight(); - } - if(lYPos < 0) { - lYPos = GetOriginY(); - } - - if(lYPos != GetOriginY() || lXPos != GetOriginX()) { - // Reposition. - SetDocPosition(context, FE_VIEW, lXPos, lYPos); - } +CHECK_SCROLL_WINDOW: + // The last param is distance from edge of client area where scrolling will start. + // Set to 0 (or remove to use 0 default) for 4.x behavior + CheckAndScrollWindow(xVal, yVal, layer); // We need to unhighlight an anchor if we highlighted it on buttonDown // The anchor element is held within the last_armed_xref global @@ -3515,15 +3478,15 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, m_pLastImageObject = NULL; // This prevents closing source frame during drag and drop - BOOL bWaitingMode = context->waitingMode; - context->waitingMode = TRUE; + BOOL bWaitingMode = pMWContext->waitingMode; + pMWContext->waitingMode = TRUE; // We supply the DropSource object instead of default behavior // (we don't need return value, do we?) pDataSource->DoDragDrop(DROPEFFECT_COPY | DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_SCROLL, NULL, pDropSource); - context->waitingMode = bWaitingMode; + pMWContext->waitingMode = bWaitingMode; m_bDragging = FALSE; // After dragging, moving mouse in browser acts like button is down, @@ -3548,7 +3511,7 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, LO_ImageStruct *pImage = (LO_ImageStruct *)m_pLastImageObject; char *pImageURL = NULL; - HGLOBAL hImageData = WFE_CreateCopyImageData(context, pImage); + HGLOBAL hImageData = WFE_CreateCopyImageData(pMWContext, pImage); if ( hImageData ) { // make sure we have a clipboard format defined @@ -3577,13 +3540,13 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, HCURSOR hCursor = GetCursor(); // This prevents closing source frame during drag and drop - BOOL bWaitingMode = context->waitingMode; - context->waitingMode = TRUE; + BOOL bWaitingMode = pMWContext->waitingMode; + pMWContext->waitingMode = TRUE; pDataSource->DoDragDrop(DROPEFFECT_COPY | DROPEFFECT_MOVE | DROPEFFECT_SCROLL, NULL, pDropSource); - context->waitingMode = bWaitingMode; + pMWContext->waitingMode = bWaitingMode; SetCursor(hCursor); m_bDragging = FALSE; @@ -3604,7 +3567,7 @@ CWinCX::OnMouseMoveForLayerCX(UINT uFlags, CPoint& cpPoint, // If there are connections being initiated (i.e. the watch // cursor is up) don't blow away the text so that the netlib // messages persist in the status bar - if(context->waitingMode) + if(pMWContext->waitingMode) goto MOUSE_TIMER; #ifdef LAYERS @@ -3628,7 +3591,7 @@ MOUSE_TIMER: // Have the mouse timer handler do some dirty work. // Please don't return in the above code, I'd like this to get called // in all cases with the state of the buttons set correctly. - MouseTimerData mt(context); + MouseTimerData mt(pMWContext); FEU_MouseTimer(&mt); #endif /* MOZ_NGLAYOUT */ } @@ -4902,6 +4865,80 @@ void CWinCX::SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, i #endif /* EDITOR */ } +// Formerly within OnMouseMoveForLayerCX. Moved out for reuse when dragging a selection in Editor +// iBorderThresshold allows scrolling to occur when cursor is within that distance of a border, +// rather than having to be outside the client area (needed to work during dragNdrop) +BOOL CWinCX::CheckAndScrollWindow(int32 xVal, int32 yVal, CL_Layer *layer, int32 iBorderThreshhold) +{ + int32 iCurrentOriginY = GetOriginY(); + int32 iCurrentOriginX = GetOriginX(); + int32 iNewOriginY = iCurrentOriginY; + int32 iNewOriginX = iCurrentOriginX; + int32 xCur = xVal; + int32 yCur = yVal; + // Must use actual client dimensions + // (should be same as GetClientRect results) + int32 iHeight = GetHeight(); + int32 iWidth = GetWidth(); + if( IsHScrollBarOn() ) + iWidth -= sysInfo.m_iScrollWidth; + if( IsVScrollBarOn() ) + iHeight -= sysInfo.m_iScrollHeight; +#if 0 +// Use this to confirm that our current sizes are correct + RECT rectClient; + CGenericView *pView = GetView(); + if(!pView) + return FALSE; + pView->GetClientRect(&rectClient); + XP_ASSERT(iHeight == rectClient.bottom - rectClient.top); + XP_ASSERT(iWidth == rectClient.right - rectClient.left); +#endif + +#ifdef LAYERS + if (layer) + { + int32 layer_x_offset = CL_GetLayerXOrigin(layer); + int32 layer_y_offset = CL_GetLayerYOrigin(layer); + + xCur += layer_x_offset; + yCur += layer_y_offset; + } +#endif // LAYERS + if(xCur < iCurrentOriginX + iBorderThreshhold) + iNewOriginX = xCur - iBorderThreshhold; + else if(xCur > iWidth + iCurrentOriginX - iBorderThreshhold) + iNewOriginX = xCur - iWidth + iBorderThreshhold; + + if(yCur < iCurrentOriginY + iBorderThreshhold) + iNewOriginY = yCur - iBorderThreshhold; + else if(yVal > iHeight + iCurrentOriginY - iBorderThreshhold) + iNewOriginY = yCur - iHeight + iBorderThreshhold; + + int32 iDocWidth = GetDocumentWidth(); + int32 iDocHeight = GetDocumentHeight(); + + // Validate position recommendations for limits + if(iNewOriginX > iDocWidth - iWidth) + iNewOriginX = iDocWidth - iWidth; + if(iNewOriginX < 0) + iNewOriginX = iCurrentOriginX; + if(iNewOriginY > iDocHeight - iHeight) + iNewOriginY = iDocHeight - iHeight; + if(iNewOriginY < 0) + iNewOriginY = iCurrentOriginY; + + if(iNewOriginY != iCurrentOriginY || iNewOriginX != iCurrentOriginX) + { + // Reposition. + MWContext *pMWContext = GetContext(); + SetDocPosition(GetContext(), FE_VIEW, iNewOriginX, iNewOriginY); + // Return TRUE only if we really scrolled + return (GetOriginY() != iCurrentOriginY) || (GetOriginX() != iCurrentOriginX); + } + return FALSE; +} + // // Fake scroll messages so that we use scrollwindowex() to move the window // so that our form elements actually move @@ -4918,6 +4955,13 @@ void CWinCX::SetDocPosition(MWContext *pContext, int iLocation, int32 lX, int32 int32 lRemY = GetOriginY(); int32 lRemX = GetOriginX(); + // cmanske: We must use the width MINUS any scrollbars! + int32 iWidth = m_lWidth; + int32 iHeight = m_lHeight; + if( IsHScrollBarOn() ) + iWidth -= sysInfo.m_iScrollWidth; + if( IsVScrollBarOn() ) + iHeight -= sysInfo.m_iScrollHeight; // Call the base. CDCCX::SetDocPosition(pContext, iLocation, lX, lY); @@ -4930,13 +4974,13 @@ void CWinCX::SetDocPosition(MWContext *pContext, int iLocation, int32 lX, int32 // Make sure there is a need to scroll before attempting to scroll. // scroll to the correct Y location - if((m_lDocHeight - m_lHeight > 0) && lRemY != lY) { - iPos = (int) ((double) lY * (double) GetPageY() / (double) (m_lDocHeight - m_lHeight)); + if((m_lDocHeight - iHeight > 0) && lRemY != lY) { + iPos = (int) ((double) lY * (double) GetPageY() / (double) (m_lDocHeight - iHeight)); Scroll(SB_VERT, SB_THUMBTRACK, iPos, NULL); } else if ( EDT_IS_EDITOR( pContext ) ){ - if((m_lDocHeight - m_lHeight > 0)) { - iPos = (int) ((double) lY * (double) GetPageY() / (double) (m_lDocHeight - m_lHeight)); + if((m_lDocHeight - iHeight > 0)) { + iPos = (int) ((double) lY * (double) GetPageY() / (double) (m_lDocHeight - iHeight)); Scroll(SB_VERT, SB_THUMBTRACK, iPos, NULL); } else { @@ -4946,13 +4990,13 @@ void CWinCX::SetDocPosition(MWContext *pContext, int iLocation, int32 lX, int32 // now do X - if((m_lDocWidth - m_lWidth > 0) && lRemX != lX) { - iPos = (int) ((double) lX * (double) GetPageX() / (double) (m_lDocWidth - m_lWidth)); + if((m_lDocWidth - iWidth > 0) && lRemX != lX) { + iPos = (int) ((double) lX * (double) GetPageX() / (double) (m_lDocWidth - iWidth)); Scroll(SB_HORZ, SB_THUMBTRACK, iPos, NULL); } else if( EDT_IS_EDITOR(pContext) ){ - if((m_lDocWidth - m_lWidth > 0)) { - iPos = (int) ((double) lX * (double) GetPageX() / (double) (m_lDocWidth - m_lWidth)); + if((m_lDocWidth - iWidth > 0)) { + iPos = (int) ((double) lX * (double) GetPageX() / (double) (m_lDocWidth - iWidth)); Scroll(SB_HORZ, SB_THUMBTRACK, iPos, NULL); } else { diff --git a/mozilla/cmd/winfe/cxwin.h b/mozilla/cmd/winfe/cxwin.h index 5bf26b0c1f0..6d57118c1fc 100644 --- a/mozilla/cmd/winfe/cxwin.h +++ b/mozilla/cmd/winfe/cxwin.h @@ -475,6 +475,10 @@ public: // Helper for erasing text structures BOOL EraseTextBkgnd(HDC pDC, RECT&, LO_TextStruct*); + // Break out code in OnMouseMove handler so it can be used + // during dragging in the Editor + BOOL CheckAndScrollWindow(int32 xVal, int32 yVal, CL_Layer *layer, int32 iBorderThreshhold = 0); + }; // Global variables diff --git a/mozilla/cmd/winfe/edframe.h b/mozilla/cmd/winfe/edframe.h index 3346b172e2a..d8e2621de0a 100644 --- a/mozilla/cmd/winfe/edframe.h +++ b/mozilla/cmd/winfe/edframe.h @@ -27,9 +27,6 @@ #include "edprops.h" #include "edtrccln.h" -// Matches size of custom colors in Windows color picker -#define MAX_FONT_COLOR 16 - // Global for app - called during startup BOOL FE_FindPreviousInstance(LPCSTR szURL, BOOL bStartEditor); diff --git a/mozilla/cmd/winfe/editor.rc b/mozilla/cmd/winfe/editor.rc index 689687e2aac..b4ba55f9d28 100644 --- a/mozilla/cmd/winfe/editor.rc +++ b/mozilla/cmd/winfe/editor.rc @@ -340,7 +340,7 @@ BEGIN ID_COMBO_FONTFACE "Change font face\nFont" ID_COMBO_FONTCOLOR "Change font color. Press Alt to change Background Color\nFont Color [+Alt for Background]" ID_COMBO_PARA "Change paragraph or heading style\nParagraph style" - ID_OPEN_NAV_WINDOW "Display current page in a new Browser window\nDisplay page in Browser\nBrowse" + ID_OPEN_NAV_WINDOW "Display current page in a Browser window\nPreview page in Browser\nPreview" IDS_LINK_TO_FILE "Link to File" IDS_ANCHOR_IMAGE_FILE "Select Anchor Image File" IDS_ANCHOR_IMAGE "Linked image:" diff --git a/mozilla/cmd/winfe/edprops.h b/mozilla/cmd/winfe/edprops.h index 03e795edbf6..159cb244016 100644 --- a/mozilla/cmd/winfe/edprops.h +++ b/mozilla/cmd/winfe/edprops.h @@ -62,6 +62,10 @@ char * wfe_GetFontSizeString(MWContext * pMWContext, int iSize, BOOL bFixedWidt #define MAX_TRUETYPE_FONTS 100 +// Matches size of custom colors in Windows color picker +#define MAX_FONT_COLOR 16 +#define MAX_FONT_POINTSIZE_COUNT 14 + // Currently 10 columns of 7 colors each // Now defined in edttypes.h //#define MAX_NS_COLORS 70 diff --git a/mozilla/cmd/winfe/edtable.h b/mozilla/cmd/winfe/edtable.h index 6d04240ed45..e6906aec153 100755 --- a/mozilla/cmd/winfe/edtable.h +++ b/mozilla/cmd/winfe/edtable.h @@ -26,12 +26,6 @@ #include "edtrccln.h" #include "edprops.h" // For CColorButton -// Limits on table parameters -#define MAX_TABLE_ROWS 100 -#define MAX_TABLE_COLUMNS 100 -// This is also limit used for cell size, padding, and borders -#define MAX_TABLE_PIXELS 10000 - //////////////////////////////////////////////////// // Property Pages for Tabbed Table dialogs class CTablePage : public CNetscapePropertyPage diff --git a/mozilla/cmd/winfe/edview.cpp b/mozilla/cmd/winfe/edview.cpp index 78dd83ea9da..3043effc03d 100644 --- a/mozilla/cmd/winfe/edview.cpp +++ b/mozilla/cmd/winfe/edview.cpp @@ -312,8 +312,6 @@ BEGIN_MESSAGE_MAP(CNetscapeEditView, CNetscapeView) ON_COMMAND(ID_DELETE_TABLE_COLUMN,OnDeleteTableColumn) ON_COMMAND(ID_DELETE_TABLE_CELL,OnDeleteTableCell) ON_COMMAND(ID_DELETE_TABLE_CAPTION,OnDeleteTableCaption) - ON_COMMAND(ID_TOGGLE_TABLE_BORDER,OnToggleTableBorder) - ON_COMMAND(ID_TOGGLE_HEADER_CELL,OnToggleHeaderCell) ON_COMMAND(ID_PROPS_TABLE,OnPropsTable) ON_COMMAND(ID_PROPS_TABLE_ROW,OnPropsTableRow) ON_COMMAND(ID_PROPS_TABLE_COLUMN,OnPropsTableColumn) @@ -396,8 +394,8 @@ BEGIN_MESSAGE_MAP(CNetscapeEditView, CNetscapeView) ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE, OnUpdateInsertTable) ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_ROW, OnUpdateInsertTableRow) ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_ROW_ABOVE, OnUpdateInsertTableRow) - ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_CELL, OnUpdateInsertTableCell) - ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_CELL_BEFORE, OnUpdateInsertTableCell) + ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_CELL, OnUpdateInsertTableColumn) + ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_CELL_BEFORE, OnUpdateInsertTableColumn) ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_COLUMN, OnUpdateInsertTableColumn) ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_COLUMN_BEFORE, OnUpdateInsertTableColumn) ON_UPDATE_COMMAND_UI(ID_INSERT_TABLE_CAPTION, OnUpdateInsertTableCaption) @@ -406,8 +404,6 @@ BEGIN_MESSAGE_MAP(CNetscapeEditView, CNetscapeView) ON_UPDATE_COMMAND_UI(ID_DELETE_TABLE_COLUMN, OnUpdateInTableColumn) ON_UPDATE_COMMAND_UI(ID_DELETE_TABLE_CELL, OnUpdateInTableCell) ON_UPDATE_COMMAND_UI(ID_DELETE_TABLE_CAPTION, OnUpdateInTableCaption) - ON_UPDATE_COMMAND_UI(ID_TOGGLE_TABLE_BORDER, OnUpdateToggleTableBorder) - ON_UPDATE_COMMAND_UI(ID_TOGGLE_HEADER_CELL, OnUpdateToggleHeaderCell) ON_UPDATE_COMMAND_UI(ID_PROPS_TABLE, OnUpdateInTable) ON_UPDATE_COMMAND_UI(ID_PROPS_TABLE_ROW, OnUpdateInTableRow) ON_UPDATE_COMMAND_UI(ID_PROPS_TABLE_COLUMN, OnUpdateInTableColumn) @@ -420,28 +416,6 @@ BEGIN_MESSAGE_MAP(CNetscapeEditView, CNetscapeView) ON_UPDATE_COMMAND_UI(ID_LOCAL_POPUP, OnCanInteract) ON_UPDATE_COMMAND_UI(ID_FILE_EDITSOURCE, OnCanInteract) ON_UPDATE_COMMAND_UI(ID_GO_PUBLISH_LOCATION, OnCanInteract) - // Paragraph tags cover whole range starting from P_TEXT (=0), - // but "Normal" is first menu item (tag = P_PARAGRAPH) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_NSDT), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_HEADER_1), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_HEADER_2), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_HEADER_3), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_HEADER_4), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_HEADER_5), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_HEADER_6), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_PARAGRAPH), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_DESC_TEXT), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_ADDRESS), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_PREFORMAT), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_DESC_TITLE), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_PARAGRAPH_BASE+P_BLOCKQUOTE), OnUpdateParagraphMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_FONTSIZE_BASE), OnUpdateFontSizeMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_FONTSIZE_BASE+1), OnUpdateFontSizeMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_FONTSIZE_BASE+2), OnUpdateFontSizeMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_FONTSIZE_BASE+3), OnUpdateFontSizeMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_FONTSIZE_BASE+4), OnUpdateFontSizeMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_FONTSIZE_BASE+5), OnUpdateFontSizeMenu) - ON_UPDATE_COMMAND_UI((ID_FORMAT_FONTSIZE_BASE+6), OnUpdateFontSizeMenu) #ifdef _IME_COMPOSITION ON_WM_LBUTTONDOWN() #ifdef WIN32 @@ -1032,8 +1006,6 @@ void CNetscapeEditView::OnKillFocus(CWnd *pOldWin) CNetscapeView::OnKillFocus(pOldWin); } - - BOOL CNetscapeEditView::ShouldParentHandle(UINT nID, int nCode) { LPARAM t_param(0); @@ -1046,10 +1018,10 @@ BOOL CNetscapeEditView::ShouldParentHandle(UINT nID, int nCode) return FALSE; } - - BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { + MWContext *pMWContext = GET_MWCONTEXT; + // was this a windows menu selection ? switch (nCode) { @@ -1059,7 +1031,7 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL uint32 CategoryId, PluginId; if (GetPluginInfo(nID, &CategoryId, &PluginId)) { - if (!EDT_PerformPlugin(GET_MWCONTEXT, CategoryId, PluginId, NULL, NULL)) + if (!EDT_PerformPlugin(pMWContext, CategoryId, PluginId, NULL, NULL)) MessageBox(szLoadString(IDS_ERR_LAUNCH_EDITOR_PLUGIN), NULL, MB_ICONSTOP); return TRUE; // the message was handled here @@ -1069,7 +1041,7 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL else if(nID >= ID_EDIT_HISTORY_BASE && nID <= (ID_EDIT_HISTORY_BASE + MAX_EDIT_HISTORY_LOCATIONS)) { char * pURL = NULL; - if( EDT_GetEditHistory(GET_MWCONTEXT, nID-ID_EDIT_HISTORY_BASE, &pURL, NULL) ) + if( EDT_GetEditHistory(pMWContext, nID-ID_EDIT_HISTORY_BASE, &pURL, NULL) ) { FE_LoadUrl(pURL, LOAD_URL_COMPOSER); return TRUE; @@ -1077,7 +1049,7 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL } else if (nID == ID_STOP_EDITOR_PLUGIN) { - EDT_StopPlugin(GET_MWCONTEXT); + EDT_StopPlugin(pMWContext); return TRUE; } // Dynamically-built font face menu items @@ -1092,7 +1064,7 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL pFace = wfe_ppTrueTypeFonts[nID - ID_FORMAT_FONTFACE_BASE-2]; } // Change the font face - EDT_SetFontFace(GET_MWCONTEXT, NULL, iIndex, pFace); + EDT_SetFontFace(pMWContext, NULL, iIndex, pFace); // Trigger update of toolbar combobox m_EditState.bFontFaceMaybeChanged = TRUE; return TRUE; @@ -1104,7 +1076,7 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL t == P_UNUM_LIST || t == P_NUM_LIST || t == P_DESC_LIST ){ - EDT_ToggleList(GET_MWCONTEXT, t); + EDT_ToggleList(pMWContext, t); return TRUE; } OnFormatParagraph(nID); @@ -1115,12 +1087,12 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL OnCharacterStyle(nID); return TRUE; } - else if( nID >= ID_FORMAT_FONTSIZE_BASE && nID <= ID_FORMAT_FONTSIZE_BASE+6) + else if( nID >= ID_FORMAT_FONTSIZE_BASE && nID < ID_FORMAT_FONTSIZE_BASE+MAX_FONT_SIZE) { OnFontSize(nID); return TRUE; } - else if( nID >= ID_FORMAT_POINTSIZE_BASE && nID <= ID_FORMAT_POINTSIZE_BASE+14) + else if( nID >= ID_FORMAT_POINTSIZE_BASE && nID <= ID_FORMAT_POINTSIZE_BASE+MAX_FONT_POINTSIZE_COUNT) { OnPointSize(nID); return TRUE; @@ -1148,7 +1120,7 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL if (nID >= ID_EDITOR_PLUGINS_BASE && nID < ID_EDITOR_PLUGINS_BASE + MAX_EDITOR_PLUGINS) { - pCmdUI->Enable(CAN_INTERACT && !EDT_IsPluginActive(GET_MWCONTEXT)); + pCmdUI->Enable(CAN_INTERACT && !EDT_IsPluginActive(pMWContext)); return TRUE; } else if(nID >= ID_EDIT_HISTORY_BASE && nID <= (ID_EDIT_HISTORY_BASE + MAX_EDIT_HISTORY_LOCATIONS)) @@ -1158,7 +1130,7 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL } else if (nID == ID_STOP_EDITOR_PLUGIN) { - pCmdUI->Enable(EDT_IsPluginActive(GET_MWCONTEXT)); + pCmdUI->Enable(EDT_IsPluginActive(pMWContext)); return TRUE; } else if (IsEncodingMenu(nID)) @@ -1174,21 +1146,52 @@ BOOL CNetscapeEditView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDL else if (nID >= ID_FORMAT_FONTFACE_BASE && nID < (ID_FORMAT_FONTFACE_BASE+MAX_TRUETYPE_FONTS+3)) { // Hopefully, the cached index is up to date! + //pCmdUI->SetCheck(nID == (UINT)ID_FORMAT_FONTSIZE_BASE(m_EditState.iFontIndex + ID_FORMAT_FONTFACE_BASE)); pCmdUI->SetCheck(nID == (UINT)(m_EditState.iFontIndex + ID_FORMAT_FONTFACE_BASE)); - pCmdUI->Enable(CAN_INTERACT); + pCmdUI->Enable(CAN_INTERACT && EDT_CanSetCharacterAttribute(pMWContext)); + return TRUE; + } + else if (nID >= ID_FORMAT_FONTSIZE_BASE && nID < (ID_FORMAT_FONTSIZE_BASE+MAX_FONT_SIZE)) + { + EDT_CharacterData * pData = EDT_GetCharacterData(pMWContext); + // Don't check an HTML size item if we actually have a POINT-SIZE value + if(pData && (pData->iPointSize == 0 || (pData->mask & TF_FONT_POINT_SIZE) == 0) ) + { + int iFontSizeIndex = EDT_GetFontSize(pMWContext) - 1; + pCmdUI->SetCheck((UINT)(pData->iSize-1) == (nID - ID_FORMAT_FONTSIZE_BASE)); + } + pCmdUI->Enable(CAN_INTERACT && EDT_CanSetCharacterAttribute(pMWContext)); + return TRUE; + } + else if (pCmdUI->m_pMenu && nID >= ID_FORMAT_POINTSIZE_BASE && nID <= (ID_FORMAT_POINTSIZE_BASE+MAX_FONT_POINTSIZE_COUNT)) + { + EDT_CharacterData * pData = EDT_GetCharacterData(pMWContext); + if(pData && pData->iPointSize && (pData->mask & TF_FONT_SIZE) && (pData->mask & TF_FONT_POINT_SIZE)) + { + // Get the size from the menu item + char pMenuItem[16]; + pCmdUI->m_pMenu->GetMenuString(nID, pMenuItem, 16, MF_BYCOMMAND); + int iMenuSize = atoi(pMenuItem); + pCmdUI->SetCheck(iMenuSize == pData->iPointSize); + } + pCmdUI->Enable(CAN_INTERACT && EDT_CanSetCharacterAttribute(pMWContext)); return TRUE; } else if( nID > ID_FORMAT_PARAGRAPH_BASE && nID <= ID_FORMAT_PARAGRAPH_END ) { TagType t = TagType(nID - ID_FORMAT_PARAGRAPH_BASE); if( t == P_BLOCKQUOTE || - t == P_UNUM_LIST || //P_DIRECTORY || - t == P_NUM_LIST || //P_MENU || + t == P_UNUM_LIST || + t == P_NUM_LIST || t == P_DESC_LIST) { UpdateListMenuItem(pCmdUI, t); return TRUE; } + TagType nParagraphFormat = EDT_GetParagraphFormatting(pMWContext); + pCmdUI->SetCheck(nParagraphFormat == (TagType)(pCmdUI->m_nID - ID_FORMAT_PARAGRAPH_BASE)); + pCmdUI->Enable(CAN_INTERACT && !EDT_IsJavaScript(pMWContext)); + return TRUE; } else if( nID >= ID_FORMAT_CHAR_BOLD && nID <= ID_FORMAT_CHAR_BLINK ) { @@ -2121,17 +2124,6 @@ void CNetscapeEditView::OnEditDelete() } } -void CNetscapeEditView::OnCopyStyle() -{ - EDT_CopyStyle(GET_MWCONTEXT); -} - -void CNetscapeEditView::OnUpdateCopyStyle(CCmdUI* pCmdUI) -{ - //TODO: CHECK FOR TEXT ELEMENT? - pCmdUI->Enable(CAN_INTERACT); -} - // Use this for any commands that are enabled most of the time void CNetscapeEditView::OnCanInteract(CCmdUI* pCmdUI) { diff --git a/mozilla/cmd/winfe/edview.h b/mozilla/cmd/winfe/edview.h index 9c932469abf..cbe16982d18 100644 --- a/mozilla/cmd/winfe/edview.h +++ b/mozilla/cmd/winfe/edview.h @@ -322,7 +322,6 @@ protected: afx_msg void OnCancelComboBox(); afx_msg void OnIncreaseFontSize(); afx_msg void OnDecreaseFontSize(); - afx_msg void OnUpdateFontSizeMenu(CCmdUI* pCmdUI); afx_msg void OnSelendokFontSizeCombo(); afx_msg void OnUpdateParagraphComboBox(CCmdUI* pCmdUI); afx_msg void OnUpdateFontFaceComboBox(CCmdUI* pCmdUI); @@ -425,17 +424,12 @@ protected: afx_msg void OnUpdateInTableColumn(CCmdUI* pCmdUI); afx_msg void OnInsertTableCell(); afx_msg void OnInsertTableCellBefore(); - afx_msg void OnUpdateInsertTableCell(CCmdUI* pCmdUI); afx_msg void OnDeleteTableCell(); afx_msg void OnUpdateInTableCell(CCmdUI* pCmdUI); afx_msg void OnInsertTableCaption(); afx_msg void OnUpdateInsertTableCaption(CCmdUI* pCmdUI); afx_msg void OnDeleteTableCaption(); afx_msg void OnUpdateInTableCaption(CCmdUI* pCmdUI); - afx_msg void OnToggleTableBorder(); - afx_msg void OnUpdateToggleTableBorder(CCmdUI* pCmdUI); - afx_msg void OnToggleHeaderCell(); - afx_msg void OnUpdateToggleHeaderCell(CCmdUI* pCmdUI); afx_msg void OnPropsTable(); afx_msg void OnPropsTableRow(); afx_msg void OnPropsTableColumn(); @@ -472,8 +466,6 @@ protected: afx_msg void OnUpdatePasteCharacterStyle(CCmdUI* pCmdUI); afx_msg void OnGoToDefaultPublishLocation(); afx_msg void OnEditCopy(); - afx_msg void OnCopyStyle(); - afx_msg void OnUpdateCopyStyle(CCmdUI* pCmdUI); afx_msg void OnEditCut(); afx_msg void OnEditDelete(); afx_msg void OnEditPaste(); @@ -508,9 +500,6 @@ protected: // Keep these outside of AFX_MSG - they use calculated // or use a range of IDs and are not understood by App/Class wizards afx_msg void OnFormatParagraph( UINT nID ); - afx_msg void OnUpdateParagraphMenu(CCmdUI* pCmdUI); - afx_msg void OnUpdateParagraphControls(CCmdUI* pCmdUI); - afx_msg void OnUpdateCharacterControls(CCmdUI* pCmdUI); afx_msg void OnFontColorMenu(UINT nID); //afx_msg void OnUpdateFontSize(CCmdUI* pCmdUI); afx_msg void OnUpdateInsertMenu(CCmdUI* pCmdUI); diff --git a/mozilla/cmd/winfe/edview2.cpp b/mozilla/cmd/winfe/edview2.cpp index 8ddc7133348..f13dc802bbd 100644 --- a/mozilla/cmd/winfe/edview2.cpp +++ b/mozilla/cmd/winfe/edview2.cpp @@ -707,16 +707,6 @@ void CNetscapeEditView::OnSelendokParagraphCombo() } -// No paragraph buttons on toolbar -- just in menu -void CNetscapeEditView::OnUpdateParagraphMenu(CCmdUI* pCmdUI) -{ - TagType nParagraphFormat = EDT_GetParagraphFormatting( GET_MWCONTEXT ); - - pCmdUI->SetCheck(nParagraphFormat == (TagType)(pCmdUI->m_nID - ID_FORMAT_PARAGRAPH_BASE)); - pCmdUI->Enable(CAN_INTERACT && !EDT_IsJavaScript(GET_MWCONTEXT)); -} - - void CNetscapeEditView::OnUpdateParagraphComboBox(CCmdUI* pCmdUI) { if ( m_EditState.bParaFormatMaybeChanged && @@ -869,13 +859,6 @@ void CNetscapeEditView::OnFontSize(UINT nID) } // Menu only: -void CNetscapeEditView::OnUpdateFontSizeMenu(CCmdUI* pCmdUI) -{ - int iFontSizeIndex = EDT_GetFontSize( GET_MWCONTEXT ) - 1; - pCmdUI->SetCheck((UINT)iFontSizeIndex == (pCmdUI->m_nID - ID_FORMAT_FONTSIZE_BASE)); - pCmdUI->Enable(CAN_INTERACT && EDT_CanSetCharacterAttribute(GET_MWCONTEXT)); -} - void CNetscapeEditView::OnSelendokFontSizeCombo() { MWContext *pMWContext = GET_MWCONTEXT; @@ -959,6 +942,9 @@ void CNetscapeEditView::OnUpdateFontSizeComboBox(CCmdUI* pCmdUI) int iFontSize = 0; if( pMWContext ) { + char * pSize = NULL; + char pSizeNotInList[16]; + EDT_CharacterData * pData = EDT_GetCharacterData(pMWContext); if(pData) { @@ -3309,21 +3295,6 @@ void CNetscapeEditView::OnInsertTableCellBefore() } } -void CNetscapeEditView::OnUpdateInsertTableCell(CCmdUI* pCmdUI) -{ - if( EDT_IsInsertPointInTableRow(GET_MWCONTEXT) ) - { - EDT_TableData* pData = EDT_GetTableData( GET_MWCONTEXT ); - if(pData){ - pCmdUI->Enable(pData->iRows < MAX_TABLE_ROWS && - pData->iColumns < MAX_TABLE_COLUMNS); - EDT_FreeTableData(pData); - return; - } - } - pCmdUI->Enable(FALSE); -} - // DeleteTableCell void CNetscapeEditView::OnDeleteTableCell() @@ -3336,71 +3307,6 @@ void CNetscapeEditView::OnUpdateInTableCell(CCmdUI* pCmdUI) pCmdUI->Enable(EDT_IsInsertPointInTableRow(GET_MWCONTEXT)); } -// ToggleTableBorder - -void CNetscapeEditView::OnToggleTableBorder() -{ - Bool bInTable = EDT_IsInsertPointInTable(GET_MWCONTEXT); - Bool bCheck = FALSE; - if ( bInTable ) { - EDT_TableData* pData = EDT_GetTableData(GET_MWCONTEXT); - if ( pData ) { - bCheck = pData->iBorderWidth > 0; - intn iNewBorder = 1; - if ( bCheck ) { - iNewBorder = 0; - } - pData->iBorderWidth = iNewBorder; - EDT_SetTableData(GET_MWCONTEXT, pData); - EDT_FreeTableData(pData); - } - } -} - -void CNetscapeEditView::OnUpdateToggleTableBorder(CCmdUI* pCmdUI) -{ - Bool bInTable = EDT_IsInsertPointInTable(GET_MWCONTEXT); - Bool bCheck = FALSE; - if ( bInTable ) { - EDT_TableData* pData = EDT_GetTableData(GET_MWCONTEXT); - if ( pData ) { - bCheck = pData->iBorderWidth > 0; - EDT_FreeTableData(pData); - } - } - pCmdUI->SetCheck(bCheck ); - pCmdUI->Enable(bInTable); -} - -void CNetscapeEditView::OnToggleHeaderCell() -{ - Bool bInTableCell = EDT_IsInsertPointInTableCell(GET_MWCONTEXT); - Bool bCheck = FALSE; - if ( bInTableCell ) { - EDT_TableCellData* pData = EDT_GetTableCellData(GET_MWCONTEXT); - if ( pData ) { - pData->bHeader = ! pData->bHeader; - EDT_SetTableCellData(GET_MWCONTEXT, pData); - EDT_FreeTableCellData(pData); - } - } -} - -void CNetscapeEditView::OnUpdateToggleHeaderCell(CCmdUI* pCmdUI) -{ - Bool bInTableCell = EDT_IsInsertPointInTableCell(GET_MWCONTEXT); - Bool bCheck = FALSE; - if ( bInTableCell ) { - EDT_TableCellData* pData = EDT_GetTableCellData(GET_MWCONTEXT); - if ( pData ) { - bCheck = pData->bHeader; - EDT_FreeTableCellData(pData); - } - } - pCmdUI->SetCheck(bCheck ); - pCmdUI->Enable(bInTableCell); -} - // Table Properties void CNetscapeEditView::OnPropsTable() { @@ -4661,7 +4567,24 @@ DROPEFFECT CEditViewDropTarget::OnDragOver(CWnd* pWnd, case FE_DRAG_IMAGE: case FE_DRAG_TEXT: int32 xVal, yVal; - pView->ClientToDocXY( cPoint, &xVal, &yVal ); + pView->ClientToDocXY( cPoint, &xVal, &yVal ); + // Check if near a border (within 10 pixels) and we should scroll the window + while( pContext->CheckAndScrollWindow(xVal, yVal, 0, 10) ) + { + // Get current mouse location and convert to doc coordinates + POINT point; + GetCursorPos(&point); + pView->ScreenToClient(&point); + cPoint.x = point.x; + cPoint.y = point.y; + pView->ClientToDocXY( cPoint, &xVal, &yVal ); + + EDT_PositionDropCaret(pMWContext, xVal, yVal); + // Delay 20 millisecs between each cycle so it doesn't scroll too fast + DWORD startTime = timeGetTime(); + do { FEU_StayingAlive(); } + while( timeGetTime() - startTime < 20 ); + } // Note: This will also handle feedback for where to drop table/cells if( EDT_PositionDropCaret(pMWContext, xVal, yVal) ) diff --git a/mozilla/cmd/winfe/res/editor.rc2 b/mozilla/cmd/winfe/res/editor.rc2 index 80476a91dd2..75c8cbe64a4 100644 --- a/mozilla/cmd/winfe/res/editor.rc2 +++ b/mozilla/cmd/winfe/res/editor.rc2 @@ -61,7 +61,7 @@ BEGIN MENUITEM "P&ublish...", ID_FILE_PUBLISH MENUITEM SEPARATOR MENUITEM "Sen&d Page", ID_FILE_MAILTO - MENUITEM "&Browse Page" ID_OPEN_NAV_WINDOW + MENUITEM "Preview in &Browser" ID_OPEN_NAV_WINDOW MENUITEM SEPARATOR MENUITEM "Page Se&tup...", ID_FILE_PAGE_SETUP MENUITEM "Print Pre&view", ID_FILE_PRINT_PREVIEW @@ -250,8 +250,9 @@ BEGIN MENUITEM "&Right", ID_ALIGN_TABLE_RIGHT END MENUITEM SEPARATOR - // "&Join..." or "Spli&t Cell" + // Join selected cells or with cell to the right MENUITEM "{&J}" ID_MERGE_TABLE_CELLS + MENUITEM "Spli&t Cell" ID_SPLIT_TABLE_CELL // "&Convert Text To Table" or "&Convert Table To Text" MENUITEM "{&C}" ID_TABLE_TEXT_CONVERT MENUITEM SEPARATOR @@ -635,8 +636,9 @@ BEGIN MENUITEM "&Right", ID_ALIGN_TABLE_RIGHT END MENUITEM SEPARATOR - // "&Join..." or "Spli&t Cell" + // Join selected cells or with cell to the right MENUITEM "{&J}" ID_MERGE_TABLE_CELLS + MENUITEM "Spli&t Cell" ID_SPLIT_TABLE_CELL // "&Convert Text To Table" or "&Convert Table To Text" MENUITEM "{&C}" ID_TABLE_TEXT_CONVERT MENUITEM SEPARATOR