summaryrefslogtreecommitdiff
path: root/sw/source/ui/table/instable.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/table/instable.cxx')
-rw-r--r--sw/source/ui/table/instable.cxx253
1 files changed, 253 insertions, 0 deletions
diff --git a/sw/source/ui/table/instable.cxx b/sw/source/ui/table/instable.cxx
new file mode 100644
index 000000000000..e6ad93335c0d
--- /dev/null
+++ b/sw/source/ui/table/instable.cxx
@@ -0,0 +1,253 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 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;
+}
+