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_sfx2.hxx" 26 27 #ifndef _MSGBOX_HXX //autogen 28 #include <vcl/msgbox.hxx> 29 #endif 30 #include <svl/stritem.hxx> 31 #ifndef GCC 32 #endif 33 34 #include <sfx2/doctdlg.hxx> 35 #include "docvor.hxx" 36 #include "sfx2/sfxresid.hxx" 37 #include "sfxtypes.hxx" 38 #include <sfx2/dispatch.hxx> 39 #include <sfx2/app.hxx> 40 41 #include <sfx2/sfx.hrc> 42 #include "doc.hrc" 43 #include "doctdlg.hrc" 44 #include <sfx2/basedlgs.hxx> 45 46 //========================================================================= 47 48 SfxDocumentTemplateDlg::SfxDocumentTemplateDlg( Window * pParent, SfxDocumentTemplates* pTempl ) : 49 50 ModalDialog( pParent, SfxResId( DLG_DOC_TEMPLATE ) ), 51 52 aEditFL ( this, SfxResId( FL_EDIT ) ), 53 aNameEd ( this, SfxResId( ED_NAME ) ), 54 aTemplateFL ( this, SfxResId( FL_STYLESHEETS ) ), 55 aRegionFt ( this, SfxResId( FT_SECTION ) ), 56 aRegionLb ( this, SfxResId( LB_SECTION ) ), 57 aTemplateFt ( this, SfxResId( FT_STYLESHEETS ) ), 58 aTemplateLb ( this, SfxResId( LB_STYLESHEETS ) ), 59 60 aOkBt ( this, SfxResId( BT_OK ) ), 61 aCancelBt ( this, SfxResId( BT_CANCEL ) ), 62 aHelpBt ( this, SfxResId( BT_HELP ) ), 63 aEditBt ( this, SfxResId( BT_EDIT ) ), 64 aOrganizeBt ( this, SfxResId( BT_ORGANIZE ) ), 65 66 pTemplates ( pTempl ), 67 pHelper ( NULL ) 68 69 { 70 FreeResource(); 71 72 pHelper = new SfxModalDefParentHelper( this ); 73 aOrganizeBt.SetClickHdl(LINK(this, SfxDocumentTemplateDlg, OrganizeHdl)); 74 aNameEd.SetModifyHdl(LINK(this, SfxDocumentTemplateDlg, NameModify)); 75 aOkBt.SetClickHdl(LINK(this, SfxDocumentTemplateDlg, OkHdl)); 76 aEditBt.SetClickHdl(LINK(this, SfxDocumentTemplateDlg, EditHdl)); 77 Init(); 78 } 79 80 //------------------------------------------------------------------------- 81 82 SfxDocumentTemplateDlg::~SfxDocumentTemplateDlg() 83 { 84 delete pHelper; 85 } 86 87 //------------------------------------------------------------------------- 88 89 IMPL_LINK( SfxDocumentTemplateDlg, EditHdl, Button *, pBut ) 90 { 91 (void)pBut; //unused 92 if ( !aRegionLb.GetSelectEntryCount() || 93 !aTemplateLb.GetSelectEntryCount()) 94 return 0; 95 96 const SfxStringItem aRegion( SID_TEMPLATE_REGIONNAME, aRegionLb.GetSelectEntry() ); 97 const SfxStringItem aName( SID_TEMPLATE_NAME, aTemplateLb.GetSelectEntry() ); 98 SFX_APP()->GetAppDispatcher_Impl()->Execute( SID_OPENTEMPLATE, SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD, &aRegion, &aName, 0L ); 99 EndDialog(RET_EDIT_STYLE); 100 101 return 0; 102 } 103 104 //------------------------------------------------------------------------- 105 106 void SfxDocumentTemplateDlg::Init() 107 { 108 if(!pTemplates->IsConstructed()) 109 pTemplates->Construct(); 110 111 const sal_uInt16 nCount = pTemplates->GetRegionCount(); 112 for(sal_uInt16 i = 0; i < nCount; ++i) 113 aRegionLb.InsertEntry(pTemplates->GetFullRegionName(i)); 114 if(!nCount) 115 aRegionLb.InsertEntry(String(SfxResId(STR_STANDARD))); 116 aRegionLb.SelectEntryPos(0); 117 if(nCount) 118 { 119 aRegionLb.SetSelectHdl(LINK(this, SfxDocumentTemplateDlg, RegionSelect)); 120 RegionSelect(&aRegionLb); 121 aTemplateLb.SetSelectHdl(LINK(this, SfxDocumentTemplateDlg, TemplateSelect)); 122 aTemplateLb.SetDoubleClickHdl(LINK(this, SfxDocumentTemplateDlg, EditHdl)); 123 } 124 else { 125 Link aLink; 126 aTemplateLb.SetSelectHdl(aLink); 127 aTemplateLb.SetDoubleClickHdl(aLink); 128 } 129 } 130 131 //------------------------------------------------------------------------- 132 133 IMPL_LINK( SfxDocumentTemplateDlg, OrganizeHdl, Button *, pButton ) 134 { 135 (void)pButton; //unused 136 SfxTemplateOrganizeDlg *pDlg = 137 new SfxTemplateOrganizeDlg(this, pTemplates); 138 const short nRet = pDlg->Execute(); 139 delete pDlg; 140 if(RET_OK == nRet) 141 { 142 // View aktualisieren 143 aRegionLb.SetUpdateMode( sal_False ); 144 aRegionLb.Clear(); 145 Init(); 146 aRegionLb.SetUpdateMode( sal_True ); 147 aRegionLb.Invalidate(); 148 aRegionLb.Update(); 149 aCancelBt.SetText(String(SfxResId(STR_CLOSE))); 150 } 151 else if(RET_EDIT_STYLE == nRet) 152 EndDialog(RET_CANCEL); 153 return 0; 154 } 155 156 //------------------------------------------------------------------------- 157 158 IMPL_LINK( SfxDocumentTemplateDlg, OkHdl, Control *, pControl ) 159 { 160 (void)pControl; //unused 161 // pruefen, ob eine Vorlage diesen Namens existiert 162 if(LISTBOX_ENTRY_NOTFOUND != aTemplateLb.GetEntryPos( 163 GetTemplateName())) { 164 QueryBox aQuery(this, SfxResId(MSG_CONFIRM_OVERWRITE_TEMPLATE)); 165 if(RET_NO == aQuery.Execute()) 166 return 0; 167 } 168 EndDialog(RET_OK); 169 return 0; 170 } 171 172 //------------------------------------------------------------------------- 173 174 IMPL_LINK( SfxDocumentTemplateDlg, RegionSelect, ListBox *, pBox ) 175 { 176 const sal_uInt16 nRegion = pBox->GetSelectEntryPos(); 177 const sal_uInt16 nCount = pTemplates->GetCount(nRegion); 178 aTemplateLb.SetUpdateMode(sal_False); 179 aTemplateLb.Clear(); 180 for(sal_uInt16 i = 0; i < nCount; ++i) 181 aTemplateLb.InsertEntry(pTemplates->GetName(nRegion, i)); 182 aTemplateLb.SelectEntryPos(0); 183 aTemplateLb.SetUpdateMode(sal_True); 184 aTemplateLb.Invalidate(); 185 aTemplateLb.Update(); 186 return 0; 187 } 188 189 //------------------------------------------------------------------------- 190 191 IMPL_LINK_INLINE_START( SfxDocumentTemplateDlg, TemplateSelect, ListBox *, pBox ) 192 { 193 aNameEd.SetText(pBox->GetSelectEntry()); 194 NameModify(&aNameEd); 195 return 0; 196 } 197 IMPL_LINK_INLINE_END( SfxDocumentTemplateDlg, TemplateSelect, ListBox *, pBox ) 198 199 //------------------------------------------------------------------------- 200 201 IMPL_LINK( SfxDocumentTemplateDlg, NameModify, Edit *, pBox ) 202 { 203 const String &rText=pBox->GetText(); 204 if(!rText.Len()) 205 aEditBt.Enable(); 206 else 207 { 208 aTemplateLb.SelectEntry(rText); 209 aEditBt.Enable( aTemplateLb.GetSelectEntry() == rText ); 210 } 211 212 aOkBt.Enable( rText.Len() > 0 ); 213 return 0; 214 } 215 216 //------------------------------------------------------------------------- 217 218 String SfxDocumentTemplateDlg::GetTemplatePath() 219 { 220 const String& rPath=GetTemplateName(); 221 if(pTemplates->GetRegionCount()) 222 return pTemplates->GetTemplatePath( 223 aRegionLb.GetSelectEntryPos(), rPath); 224 return pTemplates->GetDefaultTemplatePath(rPath); 225 } 226 227 //------------------------------------------------------------------------- 228 229 void SfxDocumentTemplateDlg::NewTemplate(const String &rPath) 230 { 231 pTemplates->NewTemplate( 232 aRegionLb.GetSelectEntryPos(), GetTemplateName(), rPath); 233 } 234 235