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
SfxDocumentTemplateDlg(Window * pParent,SfxDocumentTemplates * pTempl)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
~SfxDocumentTemplateDlg()82 SfxDocumentTemplateDlg::~SfxDocumentTemplateDlg()
83 {
84 delete pHelper;
85 }
86
87 //-------------------------------------------------------------------------
88
IMPL_LINK(SfxDocumentTemplateDlg,EditHdl,Button *,pBut)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
Init()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
IMPL_LINK(SfxDocumentTemplateDlg,OrganizeHdl,Button *,pButton)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
IMPL_LINK(SfxDocumentTemplateDlg,OkHdl,Control *,pControl)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
IMPL_LINK(SfxDocumentTemplateDlg,RegionSelect,ListBox *,pBox)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
IMPL_LINK_INLINE_START(SfxDocumentTemplateDlg,TemplateSelect,ListBox *,pBox)191 IMPL_LINK_INLINE_START( SfxDocumentTemplateDlg, TemplateSelect, ListBox *, pBox )
192 {
193 aNameEd.SetText(pBox->GetSelectEntry());
194 NameModify(&aNameEd);
195 return 0;
196 }
IMPL_LINK_INLINE_END(SfxDocumentTemplateDlg,TemplateSelect,ListBox *,pBox)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
GetTemplatePath()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
NewTemplate(const String & rPath)229 void SfxDocumentTemplateDlg::NewTemplate(const String &rPath)
230 {
231 pTemplates->NewTemplate(
232 aRegionLb.GetSelectEntryPos(), GetTemplateName(), rPath);
233 }
234
235