/************************************************************** * * 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 #include "wrtsh.hxx" #include "view.hxx" #include "itabenum.hxx" #include "instable.hxx" #include "tblafmt.hxx" #include "modcfg.hxx" #include "swmodule.hxx" #include #include #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; }