summaryrefslogtreecommitdiff
path: root/sc/source/ui/view/tabvwshc.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/view/tabvwshc.cxx')
-rw-r--r--sc/source/ui/view/tabvwshc.cxx327
1 files changed, 327 insertions, 0 deletions
diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx
new file mode 100644
index 000000000000..7d1cbb05761b
--- /dev/null
+++ b/sc/source/ui/view/tabvwshc.cxx
@@ -0,0 +1,327 @@
+/*************************************************************************
+ *
+ * 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_sc.hxx"
+
+
+
+//------------------------------------------------------------------
+
+// INCLUDE ---------------------------------------------------------------
+#include "scitems.hxx"
+#include <vcl/msgbox.hxx>
+#include <sfx2/childwin.hxx>
+#include <sfx2/dispatch.hxx>
+
+#include "tabvwsh.hxx"
+#include "sc.hrc"
+#include "globstr.hrc"
+#include "global.hxx"
+#include "scmod.hxx"
+#include "docsh.hxx"
+#include "document.hxx"
+#include "uiitems.hxx"
+#include "pivot.hxx"
+#include "namedlg.hxx"
+#include "solvrdlg.hxx"
+#include "optsolver.hxx"
+#include "tabopdlg.hxx"
+#include "autoform.hxx" // Core
+#include "autofmt.hxx" // Dialog
+#include "consdlg.hxx"
+//CHINA001 #include "sortdlg.hxx"
+#include "filtdlg.hxx"
+#include "dbnamdlg.hxx"
+#include "pvlaydlg.hxx"
+#include "areasdlg.hxx"
+#include "condfrmt.hxx"
+#include "rangeutl.hxx"
+#include "crnrdlg.hxx"
+#include "formula.hxx"
+#include "cell.hxx" // Input Status Edit-Zellen
+#include "acredlin.hxx"
+#include "highred.hxx"
+#include "simpref.hxx"
+#include "funcdesc.hxx"
+#include "dpobject.hxx"
+
+//------------------------------------------------------------------
+
+void ScTabViewShell::SetCurRefDlgId( USHORT nNew )
+{
+ // CurRefDlgId is stored in ScModule to find if a ref dialog is open,
+ // and in the view to identify the view that has opened the dialog
+ nCurRefDlgId = nNew;
+}
+
+SfxModelessDialog* ScTabViewShell::CreateRefDialog(
+ SfxBindings* pB, SfxChildWindow* pCW, SfxChildWinInfo* pInfo,
+ Window* pParent, USHORT nSlotId )
+{
+ // Dialog nur aufmachen, wenn ueber ScModule::SetRefDialog gerufen, damit
+ // z.B. nach einem Absturz offene Ref-Dialoge nicht wiederkommen (#42341#).
+
+ if ( SC_MOD()->GetCurRefDlgId() != nSlotId )
+ return NULL;
+
+ if ( nCurRefDlgId != nSlotId )
+ {
+ // the dialog has been opened in a different view
+ // -> lock the dispatcher for this view (modal mode)
+
+ GetViewData()->GetDispatcher().Lock( TRUE ); // lock is reset when closing dialog
+ return NULL;
+ }
+
+ SfxModelessDialog* pResult = 0;
+
+ if(pCW)
+ pCW->SetHideNotDelete(TRUE);
+
+ switch( nSlotId )
+ {
+ case FID_DEFINE_NAME:
+ pResult = new ScNameDlg( pB, pCW, pParent, GetViewData(),
+ ScAddress( GetViewData()->GetCurX(),
+ GetViewData()->GetCurY(),
+ GetViewData()->GetTabNo() ) );
+ break;
+
+ case SID_DEFINE_COLROWNAMERANGES:
+ {
+ pResult = new ScColRowNameRangesDlg( pB, pCW, pParent, GetViewData() );
+ }
+ break;
+
+ case SID_OPENDLG_CONSOLIDATE:
+ {
+ SfxItemSet aArgSet( GetPool(),
+ SCITEM_CONSOLIDATEDATA,
+ SCITEM_CONSOLIDATEDATA );
+
+ const ScConsolidateParam* pDlgData =
+ GetViewData()->GetDocument()->GetConsolidateDlgData();
+
+ if ( !pDlgData )
+ {
+ ScConsolidateParam aConsParam;
+ SCCOL nStartCol, nEndCol;
+ SCROW nStartRow, nEndRow;
+ SCTAB nStartTab, nEndTab;
+
+ GetViewData()->GetSimpleArea( nStartCol, nStartRow, nStartTab,
+ nEndCol, nEndRow, nEndTab );
+
+ PutInOrder( nStartCol, nEndCol );
+ PutInOrder( nStartRow, nEndRow );
+ PutInOrder( nStartTab, nEndTab );
+
+ aConsParam.nCol = nStartCol;
+ aConsParam.nRow = nStartRow;
+ aConsParam.nTab = nStartTab;
+
+ aArgSet.Put( ScConsolidateItem( SCITEM_CONSOLIDATEDATA,
+ &aConsParam ) );
+ }
+ else
+ {
+ aArgSet.Put( ScConsolidateItem( SCITEM_CONSOLIDATEDATA, pDlgData ) );
+ }
+ pResult = new ScConsolidateDlg( pB, pCW, pParent, aArgSet );
+ }
+ break;
+
+ case SID_DEFINE_DBNAME:
+ {
+ // wenn auf einem bestehenden Bereich aufgerufen, den markieren
+ GetDBData( TRUE, SC_DB_OLD );
+ const ScMarkData& rMark = GetViewData()->GetMarkData();
+ if ( !rMark.IsMarked() && !rMark.IsMultiMarked() )
+ MarkDataArea( FALSE );
+
+ pResult = new ScDbNameDlg( pB, pCW, pParent, GetViewData() );
+ }
+ break;
+
+ case SID_SPECIAL_FILTER:
+ {
+ ScQueryParam aQueryParam;
+ SfxItemSet aArgSet( GetPool(),
+ SCITEM_QUERYDATA,
+ SCITEM_QUERYDATA );
+
+ ScDBData* pDBData = GetDBData( TRUE, SC_DB_MAKE, SC_DBSEL_ROW_DOWN);
+ pDBData->GetQueryParam( aQueryParam );
+
+ ScQueryItem aItem( SCITEM_QUERYDATA, GetViewData(), &aQueryParam );
+ ScRange aAdvSource;
+ if (pDBData->GetAdvancedQuerySource(aAdvSource))
+ aItem.SetAdvancedQuerySource( &aAdvSource );
+
+ aArgSet.Put( aItem );
+
+ // aktuelle Tabelle merken (wg. RefInput im Dialog)
+ GetViewData()->SetRefTabNo( GetViewData()->GetTabNo() );
+
+ pResult = new ScSpecialFilterDlg( pB, pCW, pParent, aArgSet );
+ }
+ break;
+
+ case SID_FILTER:
+ {
+
+ ScQueryParam aQueryParam;
+ SfxItemSet aArgSet( GetPool(),
+ SCITEM_QUERYDATA,
+ SCITEM_QUERYDATA );
+
+ ScDBData* pDBData = GetDBData( TRUE, SC_DB_MAKE, SC_DBSEL_ROW_DOWN);
+ pDBData->GetQueryParam( aQueryParam );
+
+ aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA,
+ GetViewData(),
+ &aQueryParam ) );
+
+ // aktuelle Tabelle merken (wg. RefInput im Dialog)
+ GetViewData()->SetRefTabNo( GetViewData()->GetTabNo() );
+
+ pResult = new ScFilterDlg( pB, pCW, pParent, aArgSet );
+ }
+ break;
+
+ case SID_OPENDLG_TABOP:
+ {
+ ScViewData* pViewData = GetViewData();
+ ScRefAddress aCurPos ( pViewData->GetCurX(),
+ pViewData->GetCurY(),
+ pViewData->GetTabNo(),
+ FALSE, FALSE, FALSE );
+
+ pResult = new ScTabOpDlg( pB, pCW, pParent, pViewData->GetDocument(), aCurPos );
+ }
+ break;
+
+ case SID_OPENDLG_SOLVE:
+ {
+ ScViewData* pViewData = GetViewData();
+ ScAddress aCurPos( pViewData->GetCurX(),
+ pViewData->GetCurY(),
+ pViewData->GetTabNo());
+ pResult = new ScSolverDlg( pB, pCW, pParent, pViewData->GetDocument(), aCurPos );
+ }
+ break;
+
+ case SID_OPENDLG_OPTSOLVER:
+ {
+ ScViewData* pViewData = GetViewData();
+ ScAddress aCurPos( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo());
+ pResult = new ScOptSolverDlg( pB, pCW, pParent, pViewData->GetDocShell(), aCurPos );
+ }
+ break;
+
+ case SID_OPENDLG_PIVOTTABLE:
+ {
+ // all settings must be in pDialogDPObject
+
+ if( pDialogDPObject )
+ {
+ GetViewData()->SetRefTabNo( GetViewData()->GetTabNo() );
+ pResult = new ScDPLayoutDlg( pB, pCW, pParent, *pDialogDPObject );
+ }
+ }
+ break;
+
+ case SID_OPENDLG_EDIT_PRINTAREA:
+ {
+ pResult = new ScPrintAreasDlg( pB, pCW, pParent );
+ }
+ break;
+
+ case SID_OPENDLG_CONDFRMT:
+ {
+ ScViewData* pViewData = GetViewData();
+
+ ScDocument* pDoc = pViewData->GetDocument();
+ const ScConditionalFormat* pForm = pDoc->GetCondFormat(
+ pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() );
+
+ // aktuelle Tabelle merken (wg. RefInput im Dialog)
+ pViewData->SetRefTabNo( pViewData->GetTabNo() );
+
+ pResult = new ScConditionalFormatDlg( pB, pCW, pParent, pDoc, pForm );
+ }
+ break;
+
+ case SID_OPENDLG_FUNCTION:
+ {
+ // Dialog schaut selber, was in der Zelle steht
+
+ pResult = new ScFormulaDlg( pB, pCW, pParent, GetViewData(),ScGlobal::GetStarCalcFunctionMgr() );
+ }
+ break;
+
+ case FID_CHG_SHOW:
+ {
+ // Dialog schaut selber, was in der Zelle steht
+
+ pResult = new ScHighlightChgDlg( pB, pCW, pParent, GetViewData() );
+ }
+ break;
+
+ case WID_SIMPLE_REF:
+ {
+ // Dialog schaut selber, was in der Zelle steht
+
+ ScViewData* pViewData = GetViewData();
+ pViewData->SetRefTabNo( pViewData->GetTabNo() );
+ pResult = new ScSimpleRefDlg( pB, pCW, pParent, pViewData );
+ }
+ break;
+
+
+ default:
+ DBG_ERROR( "ScTabViewShell::CreateRefDialog: unbekannte ID" );
+ break;
+ }
+
+ if (pResult)
+ {
+ // Die Dialoge gehen immer mit eingeklapptem Zusaetze-Button auf,
+ // darum muss die Groesse ueber das Initialize gerettet werden
+ // (oder den Zusaetze-Status mit speichern !!!)
+
+ Size aSize = pResult->GetSizePixel();
+ pResult->Initialize( pInfo );
+ pResult->SetSizePixel(aSize);
+ }
+
+ return pResult;
+}
+
+
+