blob: 5c5df853b1052580c9f9a1f218c3dfbffcda6e66 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#ifdef SW_DLLIMPLEMENTATION
#undef SW_DLLIMPLEMENTATION
#endif
#include <vcl/msgbox.hxx>
#include "wrtsh.hxx"
#include "view.hxx"
#include "itabenum.hxx"
#include "instable.hxx"
#include "tblafmt.hxx"
#include "modcfg.hxx"
#include "swmodule.hxx"
#include <svx/htmlmode.hxx>
#include <viewopt.hxx>
#include "table.hrc"
#include "instable.hrc"
#include "swabstdlg.hxx"
namespace swui
{
SwAbstractDialogFactory * GetFactory();
}
#define ROW_COL_PROD 16384
void SwInsTableDlg::GetValues( String& rName, sal_uInt16& rRow, sal_uInt16& rCol,
SwInsertTableOptions& rInsTblOpts, String& rAutoName,
SwTableAutoFmt *& prTAFmt )
{
sal_uInt16 nInsMode = 0;
rName = aNameEdit.GetText();
rRow = (sal_uInt16)aRowEdit.GetValue();
rCol = (sal_uInt16)aColEdit.GetValue();
if (aBorderCB.IsChecked())
nInsMode |= tabopts::DEFAULT_BORDER;
if (aHeaderCB.IsChecked())
nInsMode |= tabopts::HEADLINE;
if (aRepeatHeaderCB.IsEnabled() && aRepeatHeaderCB.IsChecked())
rInsTblOpts.mnRowsToRepeat = sal_uInt16( aRepeatHeaderNF.GetValue() );
else
rInsTblOpts.mnRowsToRepeat = 0;
if (!aDontSplitCB.IsChecked())
nInsMode |= tabopts::SPLIT_LAYOUT;
if( pTAutoFmt )
{
prTAFmt = new SwTableAutoFmt( *pTAutoFmt );
rAutoName = prTAFmt->GetName();
}
rInsTblOpts.mnInsMode = nInsMode;
}
// CTOR / DTOR -----------------------------------------------------------
SwInsTableDlg::SwInsTableDlg( SwView& rView )
: SfxModalDialog( rView.GetWindow(), SW_RES(DLG_INSERT_TABLE) ),
aNameFT (this, SW_RES(FT_NAME)),
aNameEdit (this, SW_RES(ED_NAME)),
aFL (this, SW_RES(FL_TABLE)),
aColLbl (this, SW_RES(FT_COL)),
aColEdit (this, SW_RES(ED_COL)),
aRowLbl (this, SW_RES(FT_ROW)),
aRowEdit (this, SW_RES(ED_ROW)),
aOptionsFL (this, SW_RES(FL_OPTIONS)),
aHeaderCB (this, SW_RES(CB_HEADER)),
aRepeatHeaderCB (this, SW_RES(CB_REPEAT_HEADER)),
aRepeatHeaderFT (this, SW_RES(FT_REPEAT_HEADER)),
aRepeatHeaderBeforeFT (this),
aRepeatHeaderNF (this, SW_RES(NF_REPEAT_HEADER)),
aRepeatHeaderAfterFT (this),
aRepeatHeaderCombo (this, SW_RES(WIN_REPEAT_HEADER), aRepeatHeaderNF, aRepeatHeaderBeforeFT, aRepeatHeaderAfterFT),
aDontSplitCB (this, SW_RES(CB_DONT_SPLIT)),
aBorderCB (this, SW_RES(CB_BORDER)),
aOkBtn (this, SW_RES(BT_OK)),
aCancelBtn (this, SW_RES(BT_CANCEL)),
aHelpBtn (this, SW_RES(BT_HELP)),
aAutoFmtBtn (this, SW_RES(BT_AUTOFORMAT)),
pShell(&rView.GetWrtShell()),
pTAutoFmt( 0 ),
nEnteredValRepeatHeaderNF( -1 )
{
FreeResource();
aNameEdit.SetText(pShell->GetUniqueTblName());
aNameEdit.SetModifyHdl(LINK(this, SwInsTableDlg, ModifyName));
aColEdit.SetModifyHdl(LINK(this, SwInsTableDlg, ModifyRowCol));
aRowEdit.SetModifyHdl(LINK(this, SwInsTableDlg, ModifyRowCol));
aRowEdit.SetMax(ROW_COL_PROD/aColEdit.GetValue());
aColEdit.SetMax(ROW_COL_PROD/aRowEdit.GetValue());
aAutoFmtBtn.SetClickHdl(LINK(this, SwInsTableDlg, AutoFmtHdl));
sal_Bool bHTMLMode = 0 != (::GetHtmlMode(rView.GetDocShell())&HTMLMODE_ON);
const SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
SwInsertTableOptions aInsOpts = pModOpt->GetInsTblFlags(bHTMLMode);
sal_uInt16 nInsTblFlags = aInsOpts.mnInsMode;
aHeaderCB.Check( 0 != (nInsTblFlags & tabopts::HEADLINE) );
aRepeatHeaderCB.Check(aInsOpts.mnRowsToRepeat > 0);
if(bHTMLMode)
{
aDontSplitCB.Hide();
aBorderCB.SetPosPixel(aDontSplitCB.GetPosPixel());
}
else
{
aDontSplitCB.Check( 0 == (nInsTblFlags & tabopts::SPLIT_LAYOUT) );
}
aBorderCB.Check( 0 != (nInsTblFlags & tabopts::DEFAULT_BORDER) );
aRepeatHeaderNF.SetModifyHdl( LINK( this, SwInsTableDlg, ModifyRepeatHeaderNF_Hdl ) );
aHeaderCB.SetClickHdl(LINK(this, SwInsTableDlg, CheckBoxHdl));
aRepeatHeaderCB.SetClickHdl(LINK(this, SwInsTableDlg, ReapeatHeaderCheckBoxHdl));
ReapeatHeaderCheckBoxHdl();
CheckBoxHdl();
sal_Int64 nMax = aRowEdit.GetValue();
if( nMax <= 1 )
nMax = 1;
else
--nMax;
aRepeatHeaderNF.SetMax( nMax );
aRepeatHeaderCombo.Arrange( aRepeatHeaderFT );
}
SwInsTableDlg::~SwInsTableDlg()
{
delete pTAutoFmt;
}
IMPL_LINK_INLINE_START( SwInsTableDlg, ModifyName, Edit *, pEdit )
{
String sTblName = pEdit->GetText();
if(sTblName.Search(' ') != STRING_NOTFOUND)
{
sTblName.EraseAllChars( );
pEdit->SetText(sTblName);
}
aOkBtn.Enable(pShell->GetTblStyle( sTblName ) == 0);
return 0;
}
IMPL_LINK_INLINE_END( SwInsTableDlg, ModifyName, Edit *, EMPTYARG )
/*-----------------15.04.98 11:36-------------------
--------------------------------------------------*/
IMPL_LINK( SwInsTableDlg, ModifyRowCol, NumericField *, pField )
{
if(pField == &aColEdit)
{
sal_Int64 nCol = aColEdit.GetValue();
if(!nCol)
nCol = 1;
aRowEdit.SetMax(ROW_COL_PROD/nCol);
}
else
{
sal_Int64 nRow = aRowEdit.GetValue();
if(!nRow)
nRow = 1;
aColEdit.SetMax(ROW_COL_PROD/nRow);
// adjust depending NF for repeated rows
sal_Int64 nMax = ( nRow == 1 )? 1 : nRow - 1 ;
sal_Int64 nActVal = aRepeatHeaderNF.GetValue();
aRepeatHeaderNF.SetMax( nMax );
if( nActVal > nMax )
aRepeatHeaderNF.SetValue( nMax );
else if( nActVal < nEnteredValRepeatHeaderNF )
aRepeatHeaderNF.SetValue( ( nEnteredValRepeatHeaderNF < nMax )? nEnteredValRepeatHeaderNF : nMax );
}
return 0;
}
IMPL_LINK( SwInsTableDlg, AutoFmtHdl, PushButton*, pButton )
{
SwAbstractDialogFactory* pFact = swui::GetFactory();
DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
AbstractSwAutoFormatDlg* pDlg = pFact->CreateSwAutoFormatDlg(pButton,pShell, DLG_AUTOFMT_TABLE, sal_False, pTAutoFmt );
DBG_ASSERT(pDlg, "Dialogdiet fail!");
if( RET_OK == pDlg->Execute())
pDlg->FillAutoFmtOfIndex( pTAutoFmt );
delete pDlg;
return 0;
}
IMPL_LINK(SwInsTableDlg, CheckBoxHdl, CheckBox*, EMPTYARG)
{
aRepeatHeaderCB.Enable(aHeaderCB.IsChecked());
ReapeatHeaderCheckBoxHdl();
return 0;
}
IMPL_LINK(SwInsTableDlg, ReapeatHeaderCheckBoxHdl, void*, EMPTYARG)
{
aRepeatHeaderCombo.Enable(aHeaderCB.IsChecked() && aRepeatHeaderCB.IsChecked());
return 0;
}
IMPL_LINK(SwInsTableDlg, ModifyRepeatHeaderNF_Hdl, void*, EMPTYARG)
{
nEnteredValRepeatHeaderNF = aRepeatHeaderNF.GetValue();
return 0;
}