Kaydet (Commit) 2a82fbac authored tarafından Jan Holesovsky's avatar Jan Holesovsky

toolbar-decorations-svx-tables-columns.diff: "New table" widget rework.

And a small update of the "Columns" widget.
üst 426ce43c
...@@ -32,9 +32,7 @@ ...@@ -32,9 +32,7 @@
#include <string> // HACK: prevent conflict between STLPORT and Workshop headers #include <string> // HACK: prevent conflict between STLPORT and Workshop headers
#include <vcl/toolbox.hxx> #include <vcl/toolbox.hxx>
#ifndef _SV_BUTTON_HXX //autogen
#include <vcl/button.hxx> #include <vcl/button.hxx>
#endif
#include <svl/intitem.hxx> #include <svl/intitem.hxx>
#include <sfx2/dispatch.hxx> #include <sfx2/dispatch.hxx>
#include <sfx2/app.hxx> #include <sfx2/app.hxx>
...@@ -56,51 +54,72 @@ SFX_IMPL_TOOLBOX_CONTROL(SvxColumnsToolBoxControl,SfxUInt16Item); ...@@ -56,51 +54,72 @@ SFX_IMPL_TOOLBOX_CONTROL(SvxColumnsToolBoxControl,SfxUInt16Item);
// class TableWindow ----------------------------------------------------- // class TableWindow -----------------------------------------------------
const long TABLE_CELL_WIDTH = 15;
const long TABLE_CELL_HEIGHT = 15;
const long TABLE_CELLS_HORIZ = 10;
const long TABLE_CELLS_VERT = 15;
const long TABLE_POS_X = 2;
const long TABLE_POS_Y = 2;
const long TABLE_WIDTH = TABLE_POS_X + TABLE_CELLS_HORIZ*TABLE_CELL_WIDTH;
const long TABLE_HEIGHT = TABLE_POS_Y + TABLE_CELLS_VERT*TABLE_CELL_HEIGHT;
class TableWindow : public SfxPopupWindow class TableWindow : public SfxPopupWindow
{ {
private: private:
PushButton aTableButton;
::Color aLineColor; ::Color aLineColor;
::Color aHighlightLineColor;
::Color aFillColor; ::Color aFillColor;
::Color aHighlightFillColor; ::Color aHighlightFillColor;
::Color aBackgroundColor;
long nCol; long nCol;
long nLine; long nLine;
long nWidth;
long nHeight;
long nMX;
long nMY;
long nTextHeight;
BOOL bInitialKeyInput; BOOL bInitialKeyInput;
BOOL m_bMod1; BOOL m_bMod1;
ToolBox& rTbx; ToolBox& rTbx;
Reference< XFrame > mxFrame; Reference< XFrame > mxFrame;
rtl::OUString maCommand; rtl::OUString maCommand;
void UpdateSize_Impl( long nNewCol, long nNewLine); DECL_LINK( SelectHdl, void * );
public: public:
TableWindow( USHORT nSlotId, TableWindow( USHORT nSlotId,
const rtl::OUString& rCmd, const rtl::OUString& rCmd,
const String& rText,
ToolBox& rParentTbx, ToolBox& rParentTbx,
const Reference< XFrame >& rFrame ); const Reference< XFrame >& rFrame );
~TableWindow(); ~TableWindow();
void KeyInput( const KeyEvent& rKEvt ); void KeyInput( const KeyEvent& rKEvt );
virtual void MouseMove( const MouseEvent& rMEvt ); virtual void MouseMove( const MouseEvent& rMEvt );
virtual void MouseButtonDown( const MouseEvent& rMEvt );
virtual void MouseButtonUp( const MouseEvent& rMEvt ); virtual void MouseButtonUp( const MouseEvent& rMEvt );
virtual void Paint( const Rectangle& ); virtual void Paint( const Rectangle& );
virtual void PopupModeEnd(); virtual void PopupModeEnd();
virtual SfxPopupWindow* Clone() const; virtual SfxPopupWindow* Clone() const;
USHORT GetColCount() const { return (USHORT)nCol; } private:
USHORT GetLineCount() const { return (USHORT)nLine; } void Update( long nNewCol, long nNewLine );
void TableDialog( const Sequence< PropertyValue >& rArgs );
void CloseAndShowTableDialog();
}; };
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
TableWindow::TableWindow( USHORT nSlotId, const rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) : IMPL_LINK( TableWindow, SelectHdl, void *, EMPTYARG )
SfxPopupWindow( nSlotId, rFrame, WB_SYSTEMWINDOW ), {
CloseAndShowTableDialog();
return NULL;
}
// -----------------------------------------------------------------------
TableWindow::TableWindow( USHORT nSlotId, const rtl::OUString& rCmd, const String& rText, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) :
SfxPopupWindow( nSlotId, rFrame, WinBits( WB_STDPOPUP ) ),
aTableButton( this ),
nCol( 0 ),
nLine( 0 ),
bInitialKeyInput(TRUE), bInitialKeyInput(TRUE),
m_bMod1(FALSE), m_bMod1(FALSE),
rTbx(rParentTbx), rTbx(rParentTbx),
...@@ -109,38 +128,41 @@ TableWindow::TableWindow( USHORT nSlotId, const rtl::OUString& rCmd, ToolBox& rP ...@@ -109,38 +128,41 @@ TableWindow::TableWindow( USHORT nSlotId, const rtl::OUString& rCmd, ToolBox& rP
{ {
const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings(); const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
svtools::ColorConfig aColorConfig; svtools::ColorConfig aColorConfig;
aLineColor = ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
aHighlightLineColor = rStyles.GetHighlightTextColor(); aLineColor = rStyles.GetShadowColor();
aFillColor = rStyles.GetWindowColor(); aFillColor = rStyles.GetWindowColor();
aHighlightFillColor = rStyles.GetHighlightColor(); aHighlightFillColor = rStyles.GetHighlightColor();
aBackgroundColor = GetSettings().GetStyleSettings().GetFaceColor();
nTextHeight = GetTextHeight()+1; SetBackground( aBackgroundColor );
SetBackground();
Font aFont = GetFont(); Font aFont = GetFont();
aFont.SetColor( aLineColor ); aFont.SetColor( ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor ) );
aFont.SetFillColor( aFillColor ); aFont.SetFillColor( aBackgroundColor );
aFont.SetTransparent( FALSE ); aFont.SetTransparent( FALSE );
SetFont( aFont ); SetFont( aFont );
nCol = 0; SetText( rText );
nLine = 0;
nWidth = 5;
nHeight = 5;
Size aLogicSize = LogicToPixel( Size( 55, 35 ), MapMode( MAP_10TH_MM ) ); aTableButton.SetPosSizePixel( Point( TABLE_POS_X + TABLE_CELL_WIDTH, TABLE_HEIGHT + 5 ),
nMX = aLogicSize.Width(); Size( TABLE_WIDTH - TABLE_POS_X - 2*TABLE_CELL_WIDTH, 24 ) );
nMY = aLogicSize.Height(); aTableButton.SetText( String( SVX_RESSTR( RID_SVXSTR_MORE ) ) );
SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) ); aTableButton.SetClickHdl( LINK( this, TableWindow, SelectHdl ) );
aTableButton.Show();
SetOutputSizePixel( Size( TABLE_WIDTH + 3, TABLE_HEIGHT + 33 ) );
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
TableWindow::~TableWindow() TableWindow::~TableWindow()
{ {
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
SfxPopupWindow* TableWindow::Clone() const SfxPopupWindow* TableWindow::Clone() const
{ {
return new TableWindow( GetId(), maCommand, rTbx, mxFrame ); return new TableWindow( GetId(), maCommand, GetText(), rTbx, mxFrame );
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
...@@ -151,164 +173,64 @@ void TableWindow::MouseMove( const MouseEvent& rMEvt ) ...@@ -151,164 +173,64 @@ void TableWindow::MouseMove( const MouseEvent& rMEvt )
Point aPos = rMEvt.GetPosPixel(); Point aPos = rMEvt.GetPosPixel();
Point aMousePos( aPos ); Point aMousePos( aPos );
if ( rMEvt.IsEnterWindow() ) long nNewCol = ( aMousePos.X() - TABLE_POS_X + TABLE_CELL_WIDTH ) / TABLE_CELL_WIDTH;
CaptureMouse(); long nNewLine = ( aMousePos.Y() - TABLE_POS_Y + TABLE_CELL_HEIGHT ) / TABLE_CELL_HEIGHT;
else if ( aMousePos.X() < 0 || aMousePos.Y() < 0 )
{
nCol = 0;
nLine = 0;
ReleaseMouse();
Invalidate();
return;
}
long nNewCol = 0;
long nNewLine = 0;
if ( aPos.X() > 0 )
nNewCol = aPos.X() / nMX + 1;
if ( aPos.Y() > 0 )
nNewLine = aPos.Y() / nMY + 1;
if ( nNewCol > 500 )
nNewCol = 500;
if ( nNewLine > 1000 )
nNewLine = 1000;
UpdateSize_Impl( nNewCol, nNewLine);
Update( nNewCol, nNewLine );
} }
/* -----------------------------15.05.2002 17:14------------------------------
---------------------------------------------------------------------------*/ // -----------------------------------------------------------------------
void TableWindow::UpdateSize_Impl( long nNewCol, long nNewLine)
{
Size aWinSize = GetOutputSizePixel();
Point aWinPos = GetPosPixel();
Point aMaxPos = OutputToScreenPixel( GetDesktopRectPixel().BottomRight() );
if ( (nWidth <= nNewCol) || (nHeight < nNewLine) )
{
long nOff = 0;
if ( nWidth <= nNewCol )
{
nWidth = nNewCol;
nWidth++;
}
if ( nHeight <= nNewLine )
{
nHeight = nNewLine;
nOff = 1;
}
while ( nWidth > 0 &&
(short)(aWinPos.X()+(nMX*nWidth-1)) >= aMaxPos.X()-3 )
nWidth--;
while ( nHeight > 0 &&
(short)(aWinPos.Y()+(nMY*nHeight-1+nTextHeight)) >=
aMaxPos.Y()-3 )
nHeight--;
if ( nNewCol > nWidth )
nNewCol = nWidth;
if ( nNewLine > nHeight )
nNewLine = nHeight;
Size _aWinSize = GetOutputSizePixel();
Invalidate( Rectangle( 0, _aWinSize.Height()-nTextHeight+2-nOff,
_aWinSize.Width(), _aWinSize.Height() ) );
SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) );
}
long nMinCol = 0;
long nMaxCol = 0;
long nMinLine = 0;
long nMaxLine = 0;
if ( nNewCol < nCol )
{
nMinCol = nNewCol;
nMaxCol = nCol;
}
else
{
nMinCol = nCol;
nMaxCol = nNewCol;
}
if ( nNewLine < nLine )
{
nMinLine = nNewLine;
nMaxLine = nLine;
}
else
{
nMinLine = nLine;
nMaxLine = nNewLine;
}
if ( (nNewCol != nCol) || (nNewLine != nLine) )
{
Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2,
aWinSize.Width(), aWinSize.Height() ) );
if ( nNewCol != nCol )
{
Invalidate( Rectangle( nMinCol*nMX-1, 0, nMaxCol*nMX+1, nMaxLine*nMY ) );
nCol = nNewCol;
}
if ( nNewLine != nLine )
{
Invalidate( Rectangle( 0, nMinLine*nMY-2, nMaxCol*nMX, nMaxLine*nMY+1 ) );
nLine = nNewLine;
}
}
Update();
}
/* -----------------------------15.05.2002 14:22------------------------------
---------------------------------------------------------------------------*/
void TableWindow::KeyInput( const KeyEvent& rKEvt ) void TableWindow::KeyInput( const KeyEvent& rKEvt )
{ {
BOOL bHandled = FALSE; bool bHandled = false;
USHORT nModifier = rKEvt.GetKeyCode().GetModifier(); USHORT nModifier = rKEvt.GetKeyCode().GetModifier();
USHORT nKey = rKEvt.GetKeyCode().GetCode(); USHORT nKey = rKEvt.GetKeyCode().GetCode();
if(!nModifier) if ( !nModifier )
{ {
if( KEY_UP == nKey || KEY_DOWN == nKey || bHandled = true;
KEY_LEFT == nKey || KEY_RIGHT == nKey || long nNewCol = nCol;
KEY_ESCAPE == nKey ||KEY_RETURN == nKey ) long nNewLine = nLine;
switch(nKey)
{ {
bHandled = TRUE; case KEY_UP:
long nNewCol = nCol; if ( nNewLine > 1 )
long nNewLine = nLine; nNewLine--;
switch(nKey) else
{ EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
case KEY_UP :
if(nNewLine > 1)
{
nNewLine--;
break;
}
//no break;
case KEY_ESCAPE:
EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL);
break; break;
case KEY_DOWN : case KEY_DOWN:
if ( nNewLine < TABLE_CELLS_VERT )
nNewLine++; nNewLine++;
else
CloseAndShowTableDialog();
break; break;
case KEY_LEFT : case KEY_LEFT:
if ( nNewCol > 1 )
if(nNewCol) nNewCol--;
nNewCol--; else
EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
break; break;
case KEY_RIGHT : case KEY_RIGHT:
if ( nNewCol < TABLE_CELLS_HORIZ )
nNewCol++; nNewCol++;
else
CloseAndShowTableDialog();
break; break;
case KEY_RETURN : case KEY_ESCAPE:
if(IsMouseCaptured()) EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
ReleaseMouse();
EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
break; break;
} case KEY_RETURN:
EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
break;
case KEY_TAB:
CloseAndShowTableDialog();
break;
default:
bHandled = false;
}
if ( bHandled )
{
//make sure that a table can initially be created //make sure that a table can initially be created
if(bInitialKeyInput) if(bInitialKeyInput)
{ {
...@@ -318,27 +240,17 @@ void TableWindow::KeyInput( const KeyEvent& rKEvt ) ...@@ -318,27 +240,17 @@ void TableWindow::KeyInput( const KeyEvent& rKEvt )
if(!nNewCol) if(!nNewCol)
nNewCol = 1; nNewCol = 1;
} }
UpdateSize_Impl( nNewCol, nNewLine); Update( nNewCol, nNewLine );
} }
} }
else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey) else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey)
{ {
m_bMod1 = TRUE; m_bMod1 = TRUE;
if(IsMouseCaptured()) EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
ReleaseMouse();
EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
} }
if(!bHandled) if(!bHandled)
SfxPopupWindow::KeyInput(rKEvt); SfxPopupWindow::KeyInput(rKEvt);
}
// -----------------------------------------------------------------------
void TableWindow::MouseButtonDown( const MouseEvent& rMEvt )
{
SfxPopupWindow::MouseButtonDown( rMEvt );
CaptureMouse();
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
...@@ -346,56 +258,45 @@ void TableWindow::MouseButtonDown( const MouseEvent& rMEvt ) ...@@ -346,56 +258,45 @@ void TableWindow::MouseButtonDown( const MouseEvent& rMEvt )
void TableWindow::MouseButtonUp( const MouseEvent& rMEvt ) void TableWindow::MouseButtonUp( const MouseEvent& rMEvt )
{ {
SfxPopupWindow::MouseButtonUp( rMEvt ); SfxPopupWindow::MouseButtonUp( rMEvt );
ReleaseMouse(); EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
if ( IsInPopupMode() )
EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
void TableWindow::Paint( const Rectangle& ) void TableWindow::Paint( const Rectangle& )
{ {
long i; const long nSelectionWidth = TABLE_POS_X + nCol*TABLE_CELL_WIDTH;
long nStart; const long nSelectionHeight = TABLE_POS_Y + nLine*TABLE_CELL_HEIGHT;
Size aSize = GetOutputSizePixel();
SetLineColor(); // the non-selected parts of the table
SetFillColor( aHighlightFillColor );
DrawRect( Rectangle( 0, 0, nCol*nMX-1, nLine*nMY-1 ) );
SetFillColor( aFillColor );
DrawRect( Rectangle( nCol*nMX-1, 0,
aSize.Width(), aSize.Height()-nTextHeight+1 ) );
DrawRect( Rectangle( 0, nLine*nMY-1,
aSize.Width(), aSize.Height()-nTextHeight+1 ) );
SetLineColor( aHighlightLineColor );
for ( i = 1; i < nCol; i++ )
DrawLine( Point( i*nMX-1, 0 ), Point( i*nMX-1, nLine*nMY-1 ) );
for ( i = 1; i < nLine; i++ )
DrawLine( Point( 0, i*nMY-1 ), Point( nCol*nMX-1, i*nMY-1 ) );
SetLineColor( aLineColor ); SetLineColor( aLineColor );
for ( i = 1; i <= nWidth; i++ ) SetFillColor( aFillColor );
{ DrawRect( Rectangle( nSelectionWidth, TABLE_POS_Y, TABLE_WIDTH, nSelectionHeight ) );
if ( i < nCol ) DrawRect( Rectangle( TABLE_POS_X, nSelectionHeight, nSelectionWidth, TABLE_HEIGHT ) );
nStart = nLine*nMY-1; DrawRect( Rectangle( nSelectionWidth, nSelectionHeight, TABLE_WIDTH, TABLE_HEIGHT ) );
else
nStart = 0; // the selection
DrawLine( Point( i*nMX-1, nStart ), Point( i*nMX-1, nHeight*nMY-1 ) ); if ( nCol > 0 && nLine > 0 )
}
for ( i = 1; i <= nHeight; i++ )
{ {
if ( i < nLine ) SetFillColor( aHighlightFillColor );
nStart = nCol*nMX-1; DrawRect( Rectangle( TABLE_POS_X, TABLE_POS_Y,
else nSelectionWidth, nSelectionHeight ) );
nStart = 0;
DrawLine( Point( nStart, i*nMY-1 ), Point( nWidth*nMX-1, i*nMY-1 ) );
} }
SetLineColor(); // lines inside of the table
String aText; SetLineColor( aLineColor );
for ( long i = 1; i < TABLE_CELLS_VERT; ++i )
DrawLine( Point( TABLE_POS_X, TABLE_POS_Y + i*TABLE_CELL_HEIGHT ),
Point( TABLE_WIDTH, TABLE_POS_Y + i*TABLE_CELL_HEIGHT ) );
for ( long i = 1; i < TABLE_CELLS_HORIZ; ++i )
DrawLine( Point( TABLE_POS_X + i*TABLE_CELL_WIDTH, TABLE_POS_Y ),
Point( TABLE_POS_X + i*TABLE_CELL_WIDTH, TABLE_HEIGHT ) );
// the text near the mouse cursor telling the table dimensions
if ( nCol && nLine ) if ( nCol && nLine )
{ {
String aText;
aText += String::CreateFromInt32( nCol ); aText += String::CreateFromInt32( nCol );
aText.AppendAscii( " x " ); aText.AppendAscii( " x " );
aText += String::CreateFromInt32( nLine ); aText += String::CreateFromInt32( nLine );
...@@ -405,22 +306,30 @@ void TableWindow::Paint( const Rectangle& ) ...@@ -405,22 +306,30 @@ void TableWindow::Paint( const Rectangle& )
aText += String(SVX_RESSTR(RID_SVXSTR_PAGES)); aText += String(SVX_RESSTR(RID_SVXSTR_PAGES));
} }
} Size aSize = GetOutputSizePixel();
else Size aTextSize( GetTextWidth( aText ), GetTextHeight() );
aText = Button::GetStandardText( BUTTON_CANCEL );
Size aTextSize( GetTextWidth( aText ), GetTextHeight() );
Rectangle aClearRect( 0, aSize.Height()-nTextHeight+2, (aSize.Width()), aSize.Height() ); long nTextX = nSelectionWidth + TABLE_CELL_WIDTH;
DrawRect( aClearRect ); long nTextY = nSelectionHeight + TABLE_CELL_HEIGHT;
const long nTipBorder = 2;
// #i95350# force RTL output if ( aTextSize.Width() + TABLE_POS_X + TABLE_CELL_WIDTH + 2*nTipBorder < nSelectionWidth )
if( IsRTLEnabled() && nCol && nLine ) nTextX = nSelectionWidth - TABLE_CELL_WIDTH - aTextSize.Width();
aText.Insert(0x202D, 0);
DrawText( Point( (aSize.Width() - aTextSize.Width()) / 2, aSize.Height() - nTextHeight + 2 ), aText );
SetLineColor( aLineColor ); if ( aTextSize.Height() + TABLE_POS_Y + TABLE_CELL_HEIGHT + 2*nTipBorder < nSelectionHeight )
SetFillColor(); nTextY = nSelectionHeight - TABLE_CELL_HEIGHT - aTextSize.Height();
DrawRect( Rectangle( Point(0,0), aSize ) );
SetLineColor( aLineColor );
SetFillColor( aBackgroundColor );
DrawRect( Rectangle ( nTextX - 2*nTipBorder, nTextY - 2*nTipBorder,
nTextX + aTextSize.Width() + nTipBorder, nTextY + aTextSize.Height() + nTipBorder ) );
// #i95350# force RTL output
if ( IsRTLEnabled() )
aText.Insert( 0x202D, 0 );
DrawText( Point( nTextX, nTextY ), aText );
}
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
...@@ -429,37 +338,71 @@ void TableWindow::PopupModeEnd() ...@@ -429,37 +338,71 @@ void TableWindow::PopupModeEnd()
{ {
if ( !IsPopupModeCanceled() && nCol && nLine ) if ( !IsPopupModeCanceled() && nCol && nLine )
{ {
Window* pParent = rTbx.GetParent(); Sequence< PropertyValue > aArgs( 2 );
USHORT nId = GetId(); aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" ));
pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast<void*>(nId)); aArgs[0].Value = makeAny( sal_Int16( nCol ));
aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Rows" ));
Reference< XDispatchProvider > xDispatchProvider( mxFrame, UNO_QUERY ); aArgs[1].Value = makeAny( sal_Int16( nLine ));
if ( xDispatchProvider.is() )
{
com::sun::star::util::URL aTargetURL;
Reference < XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )),
UNO_QUERY );
aTargetURL.Complete = maCommand;
xTrans->parseStrict( aTargetURL );
Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
if ( xDispatch.is() )
{
Sequence< PropertyValue > aArgs( 2 );
aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" ));
aArgs[0].Value = makeAny( sal_Int16( nCol ));
aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Rows" ));
aArgs[1].Value = makeAny( sal_Int16( nLine ));
xDispatch->dispatch( aTargetURL, aArgs ); TableDialog( aArgs );
}
}
} }
else if ( IsPopupModeCanceled() )
ReleaseMouse();
SfxPopupWindow::PopupModeEnd(); SfxPopupWindow::PopupModeEnd();
} }
// -----------------------------------------------------------------------
void TableWindow::Update( long nNewCol, long nNewLine )
{
if ( nNewCol < 0 || nNewCol > TABLE_CELLS_HORIZ )
nNewCol = 0;
if ( nNewLine < 0 || nNewLine > TABLE_CELLS_VERT )
nNewLine = 0;
if ( nNewCol != nCol || nNewLine != nLine )
{
nCol = nNewCol;
nLine = nNewLine;
Invalidate( Rectangle( TABLE_POS_X, TABLE_POS_Y, TABLE_WIDTH, TABLE_HEIGHT ) );
}
}
// -----------------------------------------------------------------------
void TableWindow::TableDialog( const Sequence< PropertyValue >& rArgs )
{
Window* pParent = rTbx.GetParent();
USHORT nId = GetId();
pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast<void*>(nId));
Reference< XDispatchProvider > xDispatchProvider( mxFrame, UNO_QUERY );
if ( xDispatchProvider.is() )
{
com::sun::star::util::URL aTargetURL;
Reference < XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance(
rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )),
UNO_QUERY );
aTargetURL.Complete = maCommand;
xTrans->parseStrict( aTargetURL );
Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
if ( xDispatch.is() )
xDispatch->dispatch( aTargetURL, rArgs );
}
}
// -----------------------------------------------------------------------
void TableWindow::CloseAndShowTableDialog()
{
// close the toolbar tool
EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
// and open the table dialog instead
TableDialog( Sequence< PropertyValue >() );
}
// class ColumnsWindow --------------------------------------------------- // class ColumnsWindow ---------------------------------------------------
class ColumnsWindow : public SfxPopupWindow class ColumnsWindow : public SfxPopupWindow
...@@ -469,6 +412,7 @@ private: ...@@ -469,6 +412,7 @@ private:
::Color aHighlightLineColor; ::Color aHighlightLineColor;
::Color aFillColor; ::Color aFillColor;
::Color aHighlightFillColor; ::Color aHighlightFillColor;
::Color aFaceColor;
long nCol; long nCol;
long nWidth; long nWidth;
long nMX; long nMX;
...@@ -481,7 +425,7 @@ private: ...@@ -481,7 +425,7 @@ private:
void UpdateSize_Impl( long nNewCol ); void UpdateSize_Impl( long nNewCol );
public: public:
ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ); ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, const String& rText, ToolBox& rParentTbx, const Reference< XFrame >& rFrame );
void KeyInput( const KeyEvent& rKEvt ); void KeyInput( const KeyEvent& rKEvt );
virtual void MouseMove( const MouseEvent& rMEvt ); virtual void MouseMove( const MouseEvent& rMEvt );
...@@ -496,8 +440,8 @@ public: ...@@ -496,8 +440,8 @@ public:
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
ColumnsWindow::ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) : ColumnsWindow::ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, const String& rText, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) :
SfxPopupWindow( nId, rFrame, WB_SYSTEMWINDOW ), SfxPopupWindow( nId, rFrame, WB_STDPOPUP ),
bInitialKeyInput(TRUE), bInitialKeyInput(TRUE),
m_bMod1(FALSE), m_bMod1(FALSE),
rTbx(rParentTbx), rTbx(rParentTbx),
...@@ -510,18 +454,21 @@ ColumnsWindow::ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, ToolBox& ...@@ -510,18 +454,21 @@ ColumnsWindow::ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, ToolBox&
aHighlightLineColor = rStyles.GetHighlightTextColor(); aHighlightLineColor = rStyles.GetHighlightTextColor();
aFillColor = rStyles.GetWindowColor(); aFillColor = rStyles.GetWindowColor();
aHighlightFillColor = rStyles.GetHighlightColor(); aHighlightFillColor = rStyles.GetHighlightColor();
aFaceColor = rStyles.GetFaceColor();
nTextHeight = GetTextHeight()+1; nTextHeight = GetTextHeight()+1;
SetBackground(); SetBackground();
Font aFont( GetFont() ); Font aFont( GetFont() );
aFont.SetColor( aLineColor ); aFont.SetColor( aLineColor );
aFont.SetFillColor( aFillColor ); aFont.SetFillColor( aFaceColor );
aFont.SetTransparent( FALSE ); aFont.SetTransparent( FALSE );
SetFont( aFont ); SetFont( aFont );
nCol = 0; nCol = 0;
nWidth = 4; nWidth = 4;
SetText( rText );
Size aLogicSize = LogicToPixel( Size( 95, 155 ), MapMode( MAP_10TH_MM ) ); Size aLogicSize = LogicToPixel( Size( 95, 155 ), MapMode( MAP_10TH_MM ) );
nMX = aLogicSize.Width(); nMX = aLogicSize.Width();
SetOutputSizePixel( Size( nMX*nWidth-1, aLogicSize.Height()+nTextHeight ) ); SetOutputSizePixel( Size( nMX*nWidth-1, aLogicSize.Height()+nTextHeight ) );
...@@ -532,7 +479,7 @@ ColumnsWindow::ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, ToolBox& ...@@ -532,7 +479,7 @@ ColumnsWindow::ColumnsWindow( USHORT nId, const ::rtl::OUString& rCmd, ToolBox&
SfxPopupWindow* ColumnsWindow::Clone() const SfxPopupWindow* ColumnsWindow::Clone() const
{ {
return new ColumnsWindow( GetId(), maCommand, rTbx, mxFrame ); return new ColumnsWindow( GetId(), maCommand, GetText(), rTbx, mxFrame );
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
...@@ -730,12 +677,13 @@ void ColumnsWindow::Paint( const Rectangle& ) ...@@ -730,12 +677,13 @@ void ColumnsWindow::Paint( const Rectangle& )
} }
SetLineColor(); SetLineColor();
SetFillColor( aFillColor ); SetFillColor( aFaceColor );
String aText; String aText;
if ( nCol ) if ( nCol )
aText = String( String::CreateFromInt32(nCol) ); aText = String( String::CreateFromInt32(nCol) );
else else
aText = Button::GetStandardText( BUTTON_CANCEL ); aText = Button::GetStandardText( BUTTON_CANCEL ).EraseAllChars( '~' );
Size aTextSize(GetTextWidth( aText ), GetTextHeight()); Size aTextSize(GetTextWidth( aText ), GetTextHeight());
DrawText( Point( ( aSize.Width() - aTextSize.Width() ) / 2, aSize.Height() - nTextHeight + 2 ), aText ); DrawText( Point( ( aSize.Width() - aTextSize.Width() ) / 2, aSize.Height() - nTextHeight + 2 ), aText );
...@@ -744,7 +692,7 @@ void ColumnsWindow::Paint( const Rectangle& ) ...@@ -744,7 +692,7 @@ void ColumnsWindow::Paint( const Rectangle& )
SetLineColor( aLineColor ); SetLineColor( aLineColor );
SetFillColor(); SetFillColor();
DrawRect( Rectangle( Point(0,0), aSize ) ); DrawRect( Rectangle( 0, 0, aSize.Width() - 1, aSize.Height() - nTextHeight + 1 ) );
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
...@@ -802,7 +750,7 @@ SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow() ...@@ -802,7 +750,7 @@ SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow()
if ( bEnabled ) if ( bEnabled )
{ {
ToolBox& rTbx = GetToolBox(); ToolBox& rTbx = GetToolBox();
TableWindow* pWin = new TableWindow( GetSlotId(), m_aCommandURL, rTbx, m_xFrame ); TableWindow* pWin = new TableWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), rTbx, m_xFrame );
pWin->StartPopupMode( &rTbx, FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE ); pWin->StartPopupMode( &rTbx, FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE );
SetPopupWindow( pWin ); SetPopupWindow( pWin );
return pWin; return pWin;
...@@ -815,7 +763,7 @@ SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow() ...@@ -815,7 +763,7 @@ SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow()
SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindowCascading() SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindowCascading()
{ {
if ( bEnabled ) if ( bEnabled )
return new TableWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame ); return new TableWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), GetToolBox(), m_xFrame );
return 0; return 0;
} }
...@@ -868,7 +816,7 @@ SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindow() ...@@ -868,7 +816,7 @@ SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindow()
ColumnsWindow* pWin = 0; ColumnsWindow* pWin = 0;
if(bEnabled) if(bEnabled)
{ {
pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame ); pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), GetToolBox(), m_xFrame );
pWin->StartPopupMode( &GetToolBox(), pWin->StartPopupMode( &GetToolBox(),
FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE ); FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE );
SetPopupWindow( pWin ); SetPopupWindow( pWin );
...@@ -883,7 +831,7 @@ SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindowCascading() ...@@ -883,7 +831,7 @@ SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindowCascading()
ColumnsWindow* pWin = 0; ColumnsWindow* pWin = 0;
if(bEnabled) if(bEnabled)
{ {
pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox(), m_xFrame ); pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), GetToolBox(), m_xFrame );
} }
return pWin; return pWin;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment