xref: /AOO41X/main/sfx2/source/doc/doctdlg.cxx (revision d119d52d53d0b2180f2ae51341d882123be2af2b)
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