1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_scui.hxx" 26 27 #undef SC_DLLIMPLEMENTATION 28 29 30 31 //------------------------------------------------------------------ 32 33 #include <vcl/msgbox.hxx> 34 35 #include "mvtabdlg.hxx" 36 #include "document.hxx" 37 #include "docsh.hxx" 38 #include "miscdlgs.hrc" 39 #include "global.hxx" 40 #include "scresid.hxx" 41 #include "globstr.hrc" 42 43 #include <layout/layout-pre.hxx> 44 45 #if ENABLE_LAYOUT 46 #undef ScResId 47 #define ScResId(x) #x 48 #undef ModalDialog 49 #define ModalDialog( parent, id ) Dialog( parent, "move-copy-sheet.xml", id ) 50 #endif /* ENABLE_LAYOUT */ 51 52 //================================================================== 53 54 ScMoveTableDlg::ScMoveTableDlg( Window* pParent ) 55 56 : ModalDialog ( pParent, ScResId( RID_SCDLG_MOVETAB ) ), 57 // 58 aFtDoc ( this, ScResId( FT_DEST ) ), 59 aLbDoc ( this, ScResId( LB_DEST ) ), 60 aFtTable ( this, ScResId( FT_INSERT ) ), 61 aLbTable ( this, ScResId( LB_INSERT ) ), 62 aBtnCopy ( this, ScResId( BTN_COPY ) ), 63 aBtnOk ( this, ScResId( BTN_OK ) ), 64 aBtnCancel ( this, ScResId( BTN_CANCEL ) ), 65 aBtnHelp ( this, ScResId( BTN_HELP ) ), 66 // 67 nDocument ( 0 ), 68 nTable ( 0 ), 69 bCopyTable ( sal_False ) 70 { 71 #if ENABLE_LAYOUT 72 #undef ScResId 73 SetHelpId (FID_TAB_MOVE); 74 #endif /* ENABLE_LAYOUT */ 75 Init(); 76 FreeResource(); 77 } 78 79 //------------------------------------------------------------------------ 80 81 __EXPORT ScMoveTableDlg::~ScMoveTableDlg() 82 { 83 } 84 85 //------------------------------------------------------------------------ 86 87 sal_uInt16 ScMoveTableDlg::GetSelectedDocument () const { return nDocument; } 88 89 SCTAB ScMoveTableDlg::GetSelectedTable () const { return nTable; } 90 91 sal_Bool ScMoveTableDlg::GetCopyTable () const { return bCopyTable; } 92 93 void ScMoveTableDlg::SetCopyTable(sal_Bool bFlag) 94 { 95 aBtnCopy.Check(bFlag); 96 } 97 void ScMoveTableDlg::EnableCopyTable(sal_Bool bFlag) 98 { 99 if(bFlag) 100 aBtnCopy.Enable(); 101 else 102 aBtnCopy.Disable(); 103 } 104 105 106 //------------------------------------------------------------------------ 107 108 void __EXPORT ScMoveTableDlg::Init() 109 { 110 aBtnOk.SetClickHdl ( LINK( this, ScMoveTableDlg, OkHdl ) ); 111 aLbDoc.SetSelectHdl ( LINK( this, ScMoveTableDlg, SelHdl ) ); 112 aBtnCopy.Check( sal_False ); 113 InitDocListBox(); 114 SelHdl( &aLbDoc ); 115 } 116 117 //------------------------------------------------------------------------ 118 119 void ScMoveTableDlg::InitDocListBox() 120 { 121 SfxObjectShell* pSh = SfxObjectShell::GetFirst(); 122 ScDocShell* pScSh = NULL; 123 sal_uInt16 nSelPos = 0; 124 sal_uInt16 i = 0; 125 126 aLbDoc.Clear(); 127 aLbDoc.SetUpdateMode( sal_False ); 128 129 while ( pSh ) 130 { 131 pScSh = PTR_CAST( ScDocShell, pSh ); 132 133 if ( pScSh ) 134 { 135 if ( pScSh == SfxObjectShell::Current() ) 136 nSelPos = i; 137 138 aLbDoc.InsertEntry( pScSh->GetTitle(), i ); 139 aLbDoc.SetEntryData( i, (void*)pScSh->GetDocument() ); 140 141 i++; 142 } 143 pSh = SfxObjectShell::GetNext( *pSh ); 144 } 145 146 aLbDoc.SetUpdateMode( sal_True ); 147 aLbDoc.InsertEntry( String( ScResId( STR_NEWDOC ) ) ); 148 aLbDoc.SelectEntryPos( nSelPos ); 149 } 150 151 152 //------------------------------------------------------------------------ 153 // Handler: 154 155 IMPL_LINK( ScMoveTableDlg, OkHdl, void *, EMPTYARG ) 156 { 157 sal_uInt16 nDocSel = aLbDoc.GetSelectEntryPos(); 158 sal_uInt16 nDocLast = aLbDoc.GetEntryCount()-1; 159 sal_uInt16 nTabSel = aLbTable.GetSelectEntryPos(); 160 sal_uInt16 nTabLast = aLbTable.GetEntryCount()-1; 161 162 nDocument = (nDocSel != nDocLast) ? nDocSel : SC_DOC_NEW; 163 nTable = (nTabSel != nTabLast) ? static_cast<SCTAB>(nTabSel) : SC_TAB_APPEND; 164 bCopyTable = aBtnCopy.IsChecked(); 165 EndDialog( RET_OK ); 166 167 return 0; 168 } 169 170 //------------------------------------------------------------------------ 171 172 IMPL_LINK( ScMoveTableDlg, SelHdl, ListBox *, pLb ) 173 { 174 if ( pLb == &aLbDoc ) 175 { 176 ScDocument* pDoc = (ScDocument*) 177 aLbDoc.GetEntryData( aLbDoc.GetSelectEntryPos() ); 178 SCTAB nLast = 0; 179 String aName; 180 181 aLbTable.Clear(); 182 aLbTable.SetUpdateMode( sal_False ); 183 if ( pDoc ) 184 { 185 nLast = pDoc->GetTableCount()-1; 186 for ( SCTAB i=0; i<=nLast; i++ ) 187 { 188 pDoc->GetName( i, aName ); 189 aLbTable.InsertEntry( aName, static_cast<sal_uInt16>(i) ); 190 } 191 } 192 aLbTable.InsertEntry( ScGlobal::GetRscString(STR_MOVE_TO_END) ); 193 aLbTable.SetUpdateMode( sal_True ); 194 aLbTable.SelectEntryPos( 0 ); 195 } 196 197 return 0; 198 } 199 200 201 202