summaryrefslogtreecommitdiff
path: root/sw/source/ui/chrdlg/break.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/chrdlg/break.cxx')
-rw-r--r--sw/source/ui/chrdlg/break.cxx252
1 files changed, 252 insertions, 0 deletions
diff --git a/sw/source/ui/chrdlg/break.cxx b/sw/source/ui/chrdlg/break.cxx
new file mode 100644
index 000000000000..cc1f208950dc
--- /dev/null
+++ b/sw/source/ui/chrdlg/break.cxx
@@ -0,0 +1,252 @@
+/*************************************************************************
+ *
+ * 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 <sfx2/request.hxx>
+#include <svl/stritem.hxx>
+#ifndef _MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+
+#ifndef _CMDID_H
+#include <cmdid.h>
+#endif
+#include <uitool.hxx>
+#include <swtypes.hxx>
+#include <wrtsh.hxx>
+#ifndef _BASESH_HXX
+#include <basesh.hxx>
+#endif
+#ifndef _VIEW_HXX
+#include <view.hxx>
+#endif
+#include <viewopt.hxx>
+#include <break.hxx>
+#include <pagedesc.hxx>
+#include <poolfmt.hxx>
+
+#ifndef _BREAK_HRC
+#include <break.hrc>
+#endif
+#ifndef _CHRDLG_HRC
+#include <chrdlg.hrc>
+#endif
+#include <SwStyleNameMapper.hxx>
+
+void SwBreakDlg::Apply()
+{
+ nKind = 0;
+ if(aLineBtn.IsChecked())
+ nKind = 1;
+ else if(aColumnBtn.IsChecked())
+ nKind = 2;
+ else if(aPageBtn.IsChecked())
+ {
+ nKind = 3;
+ const USHORT nPos = aPageCollBox.GetSelectEntryPos();
+ if(0 != nPos && LISTBOX_ENTRY_NOTFOUND != nPos)
+ {
+ aTemplate = aPageCollBox.GetSelectEntry();
+ nPgNum = aPageNumBox.IsChecked() ? (USHORT)aPageNumEdit.GetValue() : 0;
+ }
+ }
+}
+
+
+IMPL_LINK_INLINE_START( SwBreakDlg, ClickHdl, void *, EMPTYARG )
+{
+ CheckEnable();
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwBreakDlg, ClickHdl, void *, EMPTYARG )
+
+/*------------------------------------------------------------------------
+ Beschreibung: Handler fuer Aendern Seitenummer
+------------------------------------------------------------------------*/
+
+IMPL_LINK_INLINE_START( SwBreakDlg, PageNumHdl, CheckBox *, pBox )
+{
+ if(pBox->IsChecked()) aPageNumEdit.SetValue(1);
+ else aPageNumEdit.SetText(aEmptyStr);
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwBreakDlg, PageNumHdl, CheckBox *, pBox )
+
+/*------------------------------------------------------------------------
+ Beschreibung: Durch Aendern der Seitennummer wird die Checkbox gecheckt.
+------------------------------------------------------------------------*/
+
+IMPL_LINK_INLINE_START( SwBreakDlg, PageNumModifyHdl, Edit *, EMPTYARG )
+{
+ aPageNumBox.Check();
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwBreakDlg, PageNumModifyHdl, Edit *, EMPTYARG )
+
+/*------------------------------------------------------------------------
+ Beschreibung: Ok-Handler;
+ prueft, ob die Seitenummer nPage eine legale Seitennummer
+ ist (linke Seiten mit geraden Nummern etc. bei einer Seitenvorlage
+ mit wechselnden Seiten)
+------------------------------------------------------------------------*/
+
+IMPL_LINK( SwBreakDlg, OkHdl, Button *, EMPTYARG )
+{
+ if(aPageNumBox.IsChecked()) {
+ // wenn unterschiedliche Seitenvorlagen, testen auf Gueltigkeit
+ const USHORT nPos = aPageCollBox.GetSelectEntryPos();
+ // auf Position 0 steht 'Ohne'.
+ const SwPageDesc *pPageDesc;
+ if ( 0 != nPos && LISTBOX_ENTRY_NOTFOUND != nPos )
+ pPageDesc = rSh.FindPageDescByName( aPageCollBox.GetSelectEntry(),
+ TRUE );
+ else
+ pPageDesc = &rSh.GetPageDesc(rSh.GetCurPageDesc());
+
+ ASSERT(pPageDesc, Seitenvorlage nicht gefunden.);
+ const USHORT nUserPage = USHORT(aPageNumEdit.GetValue());
+ BOOL bOk = TRUE;
+ switch(pPageDesc->GetUseOn())
+ {
+ case nsUseOnPage::PD_MIRROR:
+ case nsUseOnPage::PD_ALL: break;
+ case nsUseOnPage::PD_LEFT: bOk = 0 == nUserPage % 2; break;
+ case nsUseOnPage::PD_RIGHT: bOk = static_cast< sal_Bool >(nUserPage % 2); break;
+ default:; //prevent warning
+ }
+ if(!bOk) {
+ InfoBox(this, SW_RES(MSG_ILLEGAL_PAGENUM)).Execute();
+ aPageNumEdit.GrabFocus();
+ return 0;
+ }
+ }
+ EndDialog(RET_OK);
+ return 0;
+}
+
+SwBreakDlg::SwBreakDlg( Window *pParent, SwWrtShell &rS ) :
+
+ SvxStandardDialog( pParent,SW_RES(DLG_BREAK) ),
+
+ rSh(rS),
+ aLineBtn(this,SW_RES(RB_LINE)),
+ aColumnBtn(this,SW_RES(RB_COL)),
+ aPageBtn(this,SW_RES(RB_PAGE)),
+ aPageCollText(this, SW_RES(FT_COLL)),
+ aPageCollBox(this, SW_RES(LB_COLL)),
+ aPageNumBox(this, SW_RES(CB_PAGENUM)),
+ aPageNumEdit(this, SW_RES(ED_PAGENUM)),
+ aBreakFL(this,SW_RES(FL_BREAK)),
+
+ aOkBtn(this,SW_RES(BT_OK)),
+ aCancelBtn(this,SW_RES(BT_CANCEL)),
+ aHelpBtn(this,SW_RES(BT_HELP)),
+
+ nKind(0),
+ nPgNum(0),
+
+ bHtmlMode(0 != ::GetHtmlMode(rS.GetView().GetDocShell()))
+{
+ Link aLk = LINK(this,SwBreakDlg,ClickHdl);
+ aPageBtn.SetClickHdl( aLk );
+ aLineBtn.SetClickHdl( aLk );
+ aColumnBtn.SetClickHdl( aLk );
+ aPageCollBox.SetSelectHdl( aLk );
+
+ aOkBtn.SetClickHdl(LINK(this,SwBreakDlg,OkHdl));
+ aPageNumBox.SetClickHdl(LINK(this,SwBreakDlg,PageNumHdl));
+ aPageNumEdit.SetModifyHdl(LINK(this,SwBreakDlg,PageNumModifyHdl));
+
+
+ // Einfuegen der vorhandenen Seitenvorlagen in die Listbox
+ const USHORT nCount = rSh.GetPageDescCnt();
+ USHORT i;
+
+ for( i = 0; i < nCount; ++i)
+ {
+ const SwPageDesc &rPageDesc = rSh.GetPageDesc(i);
+ ::InsertStringSorted(rPageDesc.GetName(), aPageCollBox, 1 );
+ }
+
+ String aFmtName;
+ for(i = RES_POOLPAGE_BEGIN; i <= RES_POOLPAGE_REGISTER; ++i)
+ if(LISTBOX_ENTRY_NOTFOUND == aPageCollBox.GetEntryPos( aFmtName =
+ SwStyleNameMapper::GetUIName( i, aFmtName )))
+ ::InsertStringSorted(aFmtName, aPageCollBox, 1 );
+ //add landscape page
+ if(LISTBOX_ENTRY_NOTFOUND == aPageCollBox.GetEntryPos( aFmtName =
+ SwStyleNameMapper::GetUIName( RES_POOLPAGE_LANDSCAPE, aFmtName )))
+ ::InsertStringSorted(aFmtName, aPageCollBox, 1 );
+ CheckEnable();
+ aPageNumEdit.SetText( aEmptyStr );
+ FreeResource();
+}
+
+
+void SwBreakDlg::CheckEnable()
+{
+ BOOL bEnable = TRUE;
+ if ( bHtmlMode )
+ {
+ aColumnBtn .Enable(FALSE);
+ aPageCollBox.Enable(FALSE);
+ bEnable = FALSE;
+ }
+ else if(rSh.GetFrmType(0,TRUE)
+ & (FRMTYPE_FLY_ANY | FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FOOTNOTE))
+ {
+ aPageBtn.Enable(FALSE);
+ if(aPageBtn.IsChecked())
+ aLineBtn.Check(TRUE);
+ bEnable = FALSE;
+ }
+ const BOOL bPage = aPageBtn.IsChecked();
+ aPageCollText.Enable( bPage );
+ aPageCollBox.Enable ( bPage );
+
+ bEnable &= bPage;
+ if ( bEnable )
+ {
+ // auf Position 0 steht 'Ohne' Seitenvorlage.
+ const USHORT nPos = aPageCollBox.GetSelectEntryPos();
+ if ( 0 == nPos || LISTBOX_ENTRY_NOTFOUND == nPos )
+ bEnable = FALSE;
+ }
+ aPageNumBox .Enable(bEnable);
+ aPageNumEdit.Enable(bEnable);
+}
+
+SwBreakDlg::~SwBreakDlg()
+{
+}