Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <vcl/waitobj.hxx>
21 : #include <rtl/ustring.hxx>
22 : #include <svtools/treelistentry.hxx>
23 : #include <com/sun/star/uno/Sequence.h>
24 : #include <swtypes.hxx>
25 : #include <wrtsh.hxx>
26 : #include <initui.hxx>
27 : #include <../../uibase/envelp/labimp.hxx>
28 : #include <labfmt.hxx>
29 : #include <labprt.hxx>
30 : #include <unotools.hxx>
31 : #include <dbmgr.hxx>
32 : #include "uitool.hxx"
33 : #include <cmdid.h>
34 : #include <helpid.h>
35 : #include <globals.hrc>
36 : #include <../../uibase/envelp/label.hrc>
37 : #include <envimg.hxx>
38 :
39 0 : void SwLabRec::SetFromItem( const SwLabItem& rItem )
40 : {
41 0 : lHDist = rItem.lHDist;
42 0 : lVDist = rItem.lVDist;
43 0 : lWidth = rItem.lWidth;
44 0 : lHeight = rItem.lHeight;
45 0 : lLeft = rItem.lLeft;
46 0 : lUpper = rItem.lUpper;
47 0 : nCols = rItem.nCols;
48 0 : nRows = rItem.nRows;
49 0 : lPWidth = rItem.lPWidth;
50 0 : lPHeight = rItem.lPHeight;
51 0 : bCont = rItem.bCont;
52 0 : }
53 :
54 0 : void SwLabRec::FillItem( SwLabItem& rItem ) const
55 : {
56 0 : rItem.lHDist = lHDist;
57 0 : rItem.lVDist = lVDist;
58 0 : rItem.lWidth = lWidth;
59 0 : rItem.lHeight = lHeight;
60 0 : rItem.lLeft = lLeft;
61 0 : rItem.lUpper = lUpper;
62 0 : rItem.nCols = nCols;
63 0 : rItem.lPWidth = lPWidth;
64 0 : rItem.lPHeight = lPHeight;
65 0 : rItem.nRows = nRows;
66 0 : }
67 :
68 0 : void SwLabDlg::_ReplaceGroup( const OUString &rMake )
69 : {
70 : // Remove old entries
71 0 : pRecs->erase(pRecs->begin() + 1, pRecs->end());
72 0 : aLabelsCfg.FillLabels(rMake, *pRecs);
73 0 : aLstGroup = rMake;
74 0 : }
75 :
76 0 : void SwLabDlg::PageCreated(sal_uInt16 nId, SfxTabPage &rPage)
77 : {
78 0 : if (nId == m_nLabelId)
79 : {
80 0 : if(m_bLabel)
81 : {
82 0 : static_cast<SwLabPage*>(&rPage)->SetDBManager(pDBManager);
83 0 : static_cast<SwLabPage*>(&rPage)->InitDatabaseBox();
84 : }
85 : else
86 0 : static_cast<SwLabPage*>(&rPage)->SetToBusinessCard();
87 : }
88 0 : else if (nId == m_nOptionsId)
89 0 : pPrtPage = static_cast<SwLabPrtPage*>(&rPage);
90 0 : }
91 :
92 0 : SwLabDlg::SwLabDlg(vcl::Window* pParent, const SfxItemSet& rSet,
93 : SwDBManager* pDBManager_, bool bLabel)
94 : : SfxTabDialog(pParent, "LabelDialog",
95 : "modules/swriter/ui/labeldialog.ui", &rSet)
96 : , pDBManager(pDBManager_)
97 : , pPrtPage(0)
98 : , aTypeIds(50, 10)
99 0 : , pRecs(new SwLabRecs())
100 : , m_bLabel(bLabel)
101 : , m_nFormatId(0)
102 : , m_nOptionsId(0)
103 : , m_nLabelId(0)
104 : , m_nCardsId(0)
105 : , m_nBusinessId(0)
106 0 : , m_nPrivateId(0)
107 : {
108 0 : WaitObject aWait( pParent );
109 :
110 0 : m_nFormatId = AddTabPage("format", SwLabFormatPage::Create, 0);
111 0 : m_nOptionsId = AddTabPage("options", SwLabPrtPage::Create, 0);
112 0 : m_nCardsId = AddTabPage("cards", SwVisitingCardPage::Create, 0);
113 0 : m_sBusinessCardDlg = GetPageText(m_nCardsId);
114 :
115 0 : if (m_bLabel)
116 : {
117 0 : RemoveTabPage("business");
118 0 : RemoveTabPage("private");
119 0 : RemoveTabPage("cards");
120 0 : RemoveTabPage("medium");
121 0 : m_nLabelId = AddTabPage("labels", SwLabPage::Create, 0);
122 : }
123 : else
124 : {
125 0 : RemoveTabPage("labels");
126 0 : RemoveTabPage("cards");
127 0 : m_nLabelId = AddTabPage("medium", SwLabPage::Create, 0);
128 0 : m_nBusinessId = AddTabPage("business", SwBusinessDataPage::Create, 0 );
129 0 : m_nPrivateId = AddTabPage("private", SwPrivateDataPage::Create, 0);
130 0 : SetText(m_sBusinessCardDlg);
131 : }
132 : // Read user label from writer.cfg
133 0 : SwLabItem aItem(static_cast<const SwLabItem&>(rSet.Get( FN_LABEL )));
134 0 : SwLabRec* pRec = new SwLabRec;
135 0 : pRec->aMake = pRec->aType = SW_RESSTR( STR_CUSTOM );
136 0 : pRec->SetFromItem( aItem );
137 :
138 0 : bool bDouble = false;
139 :
140 0 : for (size_t nRecPos = 0; nRecPos < pRecs->size(); ++nRecPos)
141 : {
142 0 : if (pRec->aMake == (*pRecs)[nRecPos].aMake &&
143 0 : pRec->aType == (*pRecs)[nRecPos].aType)
144 : {
145 0 : bDouble = true;
146 0 : break;
147 : }
148 : }
149 :
150 0 : if (!bDouble)
151 0 : pRecs->insert( pRecs->begin(), pRec );
152 : else
153 0 : delete pRec;
154 :
155 0 : size_t nLstGroup = 0;
156 0 : const std::vector<OUString>& rMan = aLabelsCfg.GetManufacturers();
157 0 : for(size_t nMan = 0; nMan < rMan.size(); ++nMan)
158 : {
159 0 : aMakes.push_back(rMan[nMan]);
160 0 : if ( rMan[nMan] == aItem.aLstMake )
161 0 : nLstGroup = nMan;
162 : }
163 :
164 0 : if ( !aMakes.empty() )
165 0 : _ReplaceGroup( aMakes[nLstGroup] );
166 :
167 0 : if (pExampleSet)
168 0 : pExampleSet->Put(aItem);
169 0 : }
170 :
171 0 : SwLabDlg::~SwLabDlg()
172 : {
173 0 : disposeOnce();
174 0 : }
175 :
176 0 : void SwLabDlg::dispose()
177 : {
178 0 : delete pRecs;
179 0 : pPrtPage.clear();
180 0 : SfxTabDialog::dispose();
181 0 : }
182 :
183 0 : void SwLabDlg::GetLabItem(SwLabItem &rItem)
184 : {
185 0 : const SwLabItem& rActItem = static_cast<const SwLabItem&>(GetExampleSet()->Get(FN_LABEL));
186 0 : const SwLabItem& rOldItem = static_cast<const SwLabItem&>(GetInputSetImpl()->Get(FN_LABEL));
187 :
188 0 : if (rActItem != rOldItem)
189 : {
190 : // Was already "put" with (hopefully) correct content
191 0 : rItem = rActItem;
192 : }
193 : else
194 : {
195 0 : rItem = rOldItem;
196 :
197 : // In rItem there are only settings defined by users.
198 : // Therefore get the real settings directly from Record
199 0 : SwLabRec* pRec = GetRecord(rItem.aType, rItem.bCont);
200 0 : pRec->FillItem( rItem );
201 : }
202 0 : }
203 :
204 0 : SwLabRec* SwLabDlg::GetRecord(const OUString &rRecName, bool bCont)
205 : {
206 0 : SwLabRec* pRec = NULL;
207 0 : bool bFound = false;
208 0 : const OUString sCustom(SW_RES(STR_CUSTOM));
209 :
210 0 : const size_t nCount = Recs().size();
211 0 : for (size_t i = 0; i < nCount; ++i)
212 : {
213 0 : pRec = &Recs()[i];
214 0 : if (pRec->aType != sCustom &&
215 0 : rRecName == pRec->aType && bCont == pRec->bCont)
216 : {
217 0 : bFound = true;
218 0 : break;
219 : }
220 : }
221 0 : if (!bFound) // User defined
222 0 : pRec = &Recs()[0];
223 :
224 0 : return pRec;
225 : }
226 :
227 0 : Printer *SwLabDlg::GetPrt()
228 : {
229 0 : if (pPrtPage)
230 0 : return pPrtPage->GetPrt();
231 : else
232 0 : return NULL;
233 : }
234 :
235 0 : SwLabPage::SwLabPage(vcl::Window* pParent, const SfxItemSet& rSet)
236 : : SfxTabPage(pParent, "CardMediumPage",
237 : "modules/swriter/ui/cardmediumpage.ui", &rSet)
238 : , pDBManager(NULL)
239 0 : , aItem(static_cast<const SwLabItem&>(rSet.Get(FN_LABEL)))
240 0 : , m_bLabel(false)
241 : {
242 0 : WaitObject aWait( pParent );
243 :
244 0 : get(m_pAddressFrame, "addressframe");
245 0 : get(m_pAddrBox, "address");
246 0 : get(m_pWritingEdit, "textview");
247 0 : m_pWritingEdit->set_height_request(m_pWritingEdit->GetTextHeight() * 10);
248 0 : m_pWritingEdit->set_width_request(m_pWritingEdit->approximate_char_width() * 25);
249 0 : get(m_pDatabaseLB, "database");
250 0 : get(m_pTableLB, "table");
251 0 : get(m_pInsertBT, "insert");
252 0 : get(m_pDBFieldLB, "field");
253 0 : get(m_pContButton, "continuous");
254 0 : get(m_pSheetButton, "sheet");
255 0 : get(m_pMakeBox, "brand");
256 0 : get(m_pTypeBox, "type");
257 0 : get(m_pFormatInfo, "formatinfo");
258 0 : get(m_pHiddenSortTypeBox, "hiddentype");
259 0 : m_pHiddenSortTypeBox->SetStyle(m_pHiddenSortTypeBox->GetStyle() | WB_SORT);
260 :
261 0 : long nListBoxWidth = approximate_char_width() * 30;
262 0 : m_pTableLB->set_width_request(nListBoxWidth);
263 0 : m_pDatabaseLB->set_width_request(nListBoxWidth);
264 0 : m_pDBFieldLB->set_width_request(nListBoxWidth);
265 :
266 0 : SetExchangeSupport();
267 :
268 : // Install handlers
269 0 : m_pAddrBox->SetClickHdl (LINK(this, SwLabPage, AddrHdl ));
270 0 : m_pDatabaseLB->SetSelectHdl(LINK(this, SwLabPage, DatabaseHdl ));
271 0 : m_pTableLB->SetSelectHdl(LINK(this, SwLabPage, DatabaseHdl ));
272 0 : m_pInsertBT->SetClickHdl (LINK(this, SwLabPage, FieldHdl ));
273 0 : m_pContButton->SetClickHdl (LINK(this, SwLabPage, PageHdl ));
274 0 : m_pSheetButton->SetClickHdl (LINK(this, SwLabPage, PageHdl ));
275 0 : m_pMakeBox->SetSelectHdl(LINK(this, SwLabPage, MakeHdl ));
276 0 : m_pTypeBox->SetSelectHdl(LINK(this, SwLabPage, TypeHdl ));
277 :
278 0 : InitDatabaseBox();
279 :
280 0 : size_t nLstGroup = 0;
281 :
282 0 : const size_t nCount = GetParentSwLabDlg()->Makes().size();
283 0 : for(size_t i = 0; i < nCount; ++i)
284 : {
285 0 : OUString& rStr = GetParentSwLabDlg()->Makes()[i];
286 0 : m_pMakeBox->InsertEntry( rStr );
287 :
288 0 : if ( rStr == aItem.aLstMake)
289 0 : nLstGroup = i;
290 : }
291 :
292 0 : m_pMakeBox->SelectEntryPos( nLstGroup );
293 0 : m_pMakeBox->GetSelectHdl().Call(m_pMakeBox);
294 0 : }
295 :
296 0 : SwLabPage::~SwLabPage()
297 : {
298 0 : disposeOnce();
299 0 : }
300 :
301 0 : void SwLabPage::dispose()
302 : {
303 0 : m_pAddressFrame.clear();
304 0 : m_pAddrBox.clear();
305 0 : m_pWritingEdit.clear();
306 0 : m_pDatabaseLB.clear();
307 0 : m_pTableLB.clear();
308 0 : m_pInsertBT.clear();
309 0 : m_pDBFieldLB.clear();
310 0 : m_pContButton.clear();
311 0 : m_pSheetButton.clear();
312 0 : m_pMakeBox.clear();
313 0 : m_pTypeBox.clear();
314 0 : m_pHiddenSortTypeBox.clear();
315 0 : m_pFormatInfo.clear();
316 0 : SfxTabPage::dispose();
317 0 : }
318 :
319 0 : void SwLabPage::SetToBusinessCard()
320 : {
321 0 : SetHelpId(HID_BUSINESS_FMT_PAGE);
322 0 : m_pContButton->SetHelpId(HID_BUSINESS_FMT_PAGE_CONT);
323 0 : m_pSheetButton->SetHelpId(HID_BUSINESS_FMT_PAGE_SHEET);
324 0 : m_pMakeBox->SetHelpId(HID_BUSINESS_FMT_PAGE_BRAND);
325 0 : m_pTypeBox->SetHelpId(HID_BUSINESS_FMT_PAGE_TYPE);
326 0 : m_bLabel = false;
327 0 : m_pAddressFrame->Hide();
328 0 : };
329 :
330 0 : IMPL_LINK_NOARG(SwLabPage, AddrHdl)
331 : {
332 0 : OUString aWriting;
333 :
334 0 : if ( m_pAddrBox->IsChecked() )
335 0 : aWriting = convertLineEnd(MakeSender(), GetSystemLineEnd());
336 :
337 0 : m_pWritingEdit->SetText( aWriting );
338 0 : m_pWritingEdit->GrabFocus();
339 0 : return 0;
340 : }
341 :
342 0 : IMPL_LINK( SwLabPage, DatabaseHdl, ListBox *, pListBox )
343 : {
344 0 : sActDBName = m_pDatabaseLB->GetSelectEntry();
345 :
346 0 : WaitObject aObj( GetParentSwLabDlg() );
347 :
348 0 : if (pListBox == m_pDatabaseLB)
349 0 : GetDBManager()->GetTableNames(m_pTableLB, sActDBName);
350 :
351 0 : GetDBManager()->GetColumnNames(m_pDBFieldLB, sActDBName, m_pTableLB->GetSelectEntry());
352 0 : return 0;
353 : }
354 :
355 0 : IMPL_LINK_NOARG(SwLabPage, FieldHdl)
356 : {
357 0 : OUString aStr("<" + m_pDatabaseLB->GetSelectEntry() + "." +
358 0 : m_pTableLB->GetSelectEntry() + "." +
359 0 : (m_pTableLB->GetSelectEntryData() == 0 ? OUString("0") : OUString("1")) + "." +
360 0 : m_pDBFieldLB->GetSelectEntry() + ">");
361 0 : m_pWritingEdit->ReplaceSelected(aStr);
362 0 : Selection aSel = m_pWritingEdit->GetSelection();
363 0 : m_pWritingEdit->GrabFocus();
364 0 : m_pWritingEdit->SetSelection(aSel);
365 0 : return 0;
366 : }
367 :
368 0 : IMPL_LINK_NOARG(SwLabPage, PageHdl)
369 : {
370 0 : m_pMakeBox->GetSelectHdl().Call(m_pMakeBox);
371 0 : return 0;
372 : }
373 :
374 0 : IMPL_LINK_NOARG(SwLabPage, MakeHdl)
375 : {
376 0 : WaitObject aWait( GetParentSwLabDlg() );
377 :
378 0 : m_pTypeBox->Clear();
379 0 : m_pHiddenSortTypeBox->Clear();
380 0 : GetParentSwLabDlg()->TypeIds().clear();
381 :
382 0 : const OUString aMake = m_pMakeBox->GetSelectEntry();
383 0 : GetParentSwLabDlg()->ReplaceGroup( aMake );
384 0 : aItem.aLstMake = aMake;
385 :
386 0 : const bool bCont = m_pContButton->IsChecked();
387 0 : const size_t nCount = GetParentSwLabDlg()->Recs().size();
388 0 : size_t nLstType = 0;
389 :
390 0 : const OUString sCustom(SW_RES(STR_CUSTOM));
391 : //insert the entries into the sorted list box
392 0 : for ( size_t i = 0; i < nCount; ++i )
393 : {
394 0 : const OUString aType ( GetParentSwLabDlg()->Recs()[i].aType );
395 0 : bool bInsert = false;
396 0 : if ( GetParentSwLabDlg()->Recs()[i].aType == sCustom )
397 : {
398 0 : bInsert = true;
399 0 : m_pTypeBox->InsertEntry(aType );
400 : }
401 0 : else if ( GetParentSwLabDlg()->Recs()[i].bCont == bCont )
402 : {
403 0 : if ( m_pHiddenSortTypeBox->GetEntryPos(aType) == LISTBOX_ENTRY_NOTFOUND )
404 : {
405 0 : bInsert = true;
406 0 : m_pHiddenSortTypeBox->InsertEntry( aType );
407 : }
408 : }
409 0 : if(bInsert)
410 : {
411 0 : GetParentSwLabDlg()->TypeIds().push_back(i);
412 0 : if ( !nLstType && aType == aItem.aLstType )
413 0 : nLstType = GetParentSwLabDlg()->TypeIds().size();
414 : }
415 0 : }
416 0 : for(sal_Int32 nEntry = 0; nEntry < m_pHiddenSortTypeBox->GetEntryCount(); ++nEntry)
417 : {
418 0 : m_pTypeBox->InsertEntry(m_pHiddenSortTypeBox->GetEntry(nEntry));
419 : }
420 0 : if (nLstType)
421 0 : m_pTypeBox->SelectEntry(aItem.aLstType);
422 : else
423 0 : m_pTypeBox->SelectEntryPos(0);
424 0 : m_pTypeBox->GetSelectHdl().Call(m_pTypeBox);
425 0 : return 0;
426 : }
427 :
428 0 : IMPL_LINK_NOARG(SwLabPage, TypeHdl)
429 : {
430 0 : DisplayFormat();
431 0 : aItem.aType = m_pTypeBox->GetSelectEntry();
432 0 : return 0;
433 : }
434 :
435 0 : void SwLabPage::DisplayFormat()
436 : {
437 0 : ScopedVclPtrInstance< MetricField > aField(this, WinBits(0));
438 0 : FieldUnit aMetric = ::GetDfltMetric(false);
439 0 : SetMetric(*aField.get(), aMetric);
440 0 : aField->SetDecimalDigits(2);
441 0 : aField->SetMin (0);
442 0 : aField->SetMax (LONG_MAX);
443 :
444 0 : SwLabRec* pRec = GetSelectedEntryPos();
445 0 : aItem.aLstType = pRec->aType;
446 0 : SETFLDVAL(*aField.get(), pRec->lWidth);
447 0 : aField->Reformat();
448 0 : const OUString aWString = aField->GetText();
449 :
450 0 : SETFLDVAL(*aField.get(), pRec->lHeight);
451 0 : aField->Reformat();
452 :
453 0 : OUString aText = pRec->aType + ": " + aWString +
454 0 : " x " + aField->GetText() +
455 0 : " (" + OUString::number( pRec->nCols ) +
456 0 : " x " + OUString::number( pRec->nRows ) + ")";
457 0 : m_pFormatInfo->SetText(aText);
458 0 : }
459 :
460 0 : SwLabRec* SwLabPage::GetSelectedEntryPos()
461 : {
462 0 : OUString sSelEntry(m_pTypeBox->GetSelectEntry());
463 :
464 0 : return GetParentSwLabDlg()->GetRecord(sSelEntry, m_pContButton->IsChecked());
465 : }
466 :
467 0 : void SwLabPage::InitDatabaseBox()
468 : {
469 0 : if( GetDBManager() )
470 : {
471 0 : m_pDatabaseLB->Clear();
472 0 : ::com::sun::star::uno::Sequence<OUString> aDataNames = SwDBManager::GetExistingDatabaseNames();
473 0 : const OUString* pDataNames = aDataNames.getConstArray();
474 0 : for (long i = 0; i < aDataNames.getLength(); i++)
475 0 : m_pDatabaseLB->InsertEntry(pDataNames[i]);
476 0 : OUString sDBName = sActDBName.getToken( 0, DB_DELIM );
477 0 : OUString sTableName = sActDBName.getToken( 1, DB_DELIM );
478 0 : m_pDatabaseLB->SelectEntry(sDBName);
479 0 : if( !sDBName.isEmpty() && GetDBManager()->GetTableNames(m_pTableLB, sDBName))
480 : {
481 0 : m_pTableLB->SelectEntry(sTableName);
482 0 : GetDBManager()->GetColumnNames(m_pDBFieldLB, sActDBName, sTableName);
483 : }
484 : else
485 0 : m_pDBFieldLB->Clear();
486 : }
487 0 : }
488 :
489 0 : VclPtr<SfxTabPage> SwLabPage::Create(vcl::Window* pParent, const SfxItemSet* rSet)
490 : {
491 0 : return VclPtr<SwLabPage>::Create(pParent, *rSet);
492 : }
493 :
494 0 : void SwLabPage::ActivatePage(const SfxItemSet& rSet)
495 : {
496 0 : Reset( &rSet );
497 0 : }
498 :
499 0 : SfxTabPage::sfxpg SwLabPage::DeactivatePage(SfxItemSet* _pSet)
500 : {
501 0 : if (_pSet)
502 0 : FillItemSet(_pSet);
503 :
504 0 : return LEAVE_PAGE;
505 : }
506 :
507 0 : void SwLabPage::FillItem(SwLabItem& rItem)
508 : {
509 0 : rItem.bAddr = m_pAddrBox->IsChecked();
510 0 : rItem.aWriting = m_pWritingEdit->GetText();
511 0 : rItem.bCont = m_pContButton->IsChecked();
512 0 : rItem.aMake = m_pMakeBox->GetSelectEntry();
513 0 : rItem.aType = m_pTypeBox->GetSelectEntry();
514 0 : rItem.sDBName = sActDBName;
515 :
516 0 : SwLabRec* pRec = GetSelectedEntryPos();
517 0 : pRec->FillItem( rItem );
518 :
519 0 : rItem.aLstMake = m_pMakeBox->GetSelectEntry();
520 0 : rItem.aLstType = m_pTypeBox->GetSelectEntry();
521 0 : }
522 :
523 0 : bool SwLabPage::FillItemSet(SfxItemSet* rSet)
524 : {
525 0 : FillItem( aItem );
526 0 : rSet->Put( aItem );
527 :
528 0 : return true;
529 : }
530 :
531 0 : void SwLabPage::Reset(const SfxItemSet* rSet)
532 : {
533 0 : aItem = static_cast<const SwLabItem&>( rSet->Get(FN_LABEL));
534 0 : OUString sDBName = aItem.sDBName;
535 :
536 0 : OUString aWriting(convertLineEnd(aItem.aWriting, GetSystemLineEnd()));
537 :
538 0 : m_pAddrBox->Check( aItem.bAddr );
539 0 : m_pWritingEdit->SetText ( aWriting );
540 :
541 0 : for(std::vector<OUString>::const_iterator i = GetParentSwLabDlg()->Makes().begin(); i != GetParentSwLabDlg()->Makes().end(); ++i)
542 : {
543 0 : if(m_pMakeBox->GetEntryPos(OUString(*i)) == LISTBOX_ENTRY_NOTFOUND)
544 0 : m_pMakeBox->InsertEntry(*i);
545 : }
546 :
547 0 : m_pMakeBox->SelectEntry( aItem.aMake );
548 : //save the current type
549 0 : OUString sType(aItem.aType);
550 0 : m_pMakeBox->GetSelectHdl().Call(m_pMakeBox);
551 0 : aItem.aType = sType;
552 : //#102806# a newly added make may not be in the type ListBox already
553 0 : if (m_pTypeBox->GetEntryPos(aItem.aType) == LISTBOX_ENTRY_NOTFOUND && !aItem.aMake.isEmpty())
554 0 : GetParentSwLabDlg()->UpdateGroup( aItem.aMake );
555 0 : if (m_pTypeBox->GetEntryPos(aItem.aType) != LISTBOX_ENTRY_NOTFOUND)
556 : {
557 0 : m_pTypeBox->SelectEntry(aItem.aType);
558 0 : m_pTypeBox->GetSelectHdl().Call(m_pTypeBox);
559 : }
560 0 : if (m_pDatabaseLB->GetEntryPos(sDBName) != LISTBOX_ENTRY_NOTFOUND)
561 : {
562 0 : m_pDatabaseLB->SelectEntry(sDBName);
563 0 : m_pDatabaseLB->GetSelectHdl().Call(m_pDatabaseLB);
564 : }
565 :
566 0 : if (aItem.bCont)
567 0 : m_pContButton->Check();
568 : else
569 0 : m_pSheetButton->Check();
570 0 : }
571 :
572 0 : void SwVisitingCardPage::ClearUserData()
573 : {
574 0 : SvTreeListEntry* pEntry = m_pAutoTextLB->First();
575 0 : while(pEntry)
576 : {
577 0 : delete static_cast<OUString*>(pEntry->GetUserData());
578 0 : pEntry = m_pAutoTextLB->Next(pEntry);
579 : }
580 0 : }
581 :
582 0 : void SwVisitingCardPage::SetUserData( sal_uInt32 nCnt,
583 : const OUString* pNames, const OUString* pValues )
584 : {
585 0 : for( sal_uInt32 i = 0; i < nCnt; ++i )
586 : {
587 0 : SvTreeListEntry* pEntry = m_pAutoTextLB->InsertEntry( pNames[ i ] );
588 0 : pEntry->SetUserData( new OUString( pValues[ i ] ));
589 : }
590 0 : }
591 :
592 0 : SwVisitingCardPage::SwVisitingCardPage(vcl::Window* pParent, const SfxItemSet& rSet)
593 : : SfxTabPage(pParent, "CardFormatPage",
594 : "modules/swriter/ui/cardformatpage.ui", &rSet)
595 0 : , pExampleFrame(0)
596 : {
597 0 : get(m_pAutoTextLB, "treeview");
598 0 : m_pAutoTextLB->set_height_request(m_pAutoTextLB->GetTextHeight() * 16);
599 0 : get(m_pAutoTextGroupLB, "autotext");
600 0 : get(m_pExampleWIN, "preview");
601 :
602 0 : m_pAutoTextLB->SetStyle( m_pAutoTextLB->GetStyle() | WB_HSCROLL );
603 0 : m_pAutoTextLB->SetSpaceBetweenEntries(0);
604 0 : m_pAutoTextLB->SetSelectionMode( SINGLE_SELECTION );
605 :
606 0 : SetExchangeSupport();
607 0 : m_pAutoTextLB->SetSelectHdl(LINK(this, SwVisitingCardPage, AutoTextSelectHdl));
608 0 : m_pAutoTextGroupLB->SetSelectHdl(LINK(this, SwVisitingCardPage, AutoTextSelectHdl));
609 :
610 0 : m_pExampleWIN->Hide();
611 :
612 0 : InitFrameControl();
613 0 : }
614 :
615 0 : SwVisitingCardPage::~SwVisitingCardPage()
616 : {
617 0 : disposeOnce();
618 0 : }
619 :
620 0 : void SwVisitingCardPage::dispose()
621 : {
622 0 : for(sal_Int32 i = 0; i < m_pAutoTextGroupLB->GetEntryCount(); ++i)
623 0 : delete static_cast<OUString*>(m_pAutoTextGroupLB->GetEntryData( i ));
624 0 : m_xAutoText = 0;
625 :
626 0 : ClearUserData();
627 0 : delete pExampleFrame;
628 0 : m_pAutoTextLB.clear();
629 0 : m_pAutoTextGroupLB.clear();
630 0 : m_pExampleWIN.clear();
631 0 : SfxTabPage::dispose();
632 0 : }
633 :
634 0 : VclPtr<SfxTabPage> SwVisitingCardPage::Create(vcl::Window* pParent, const SfxItemSet* rSet)
635 : {
636 0 : return VclPtr<SwVisitingCardPage>::Create(pParent, *rSet);
637 : }
638 :
639 0 : void SwVisitingCardPage::ActivatePage(const SfxItemSet& rSet)
640 : {
641 0 : Reset( &rSet );
642 0 : UpdateFields();
643 0 : }
644 :
645 0 : SfxTabPage::sfxpg SwVisitingCardPage::DeactivatePage(SfxItemSet* _pSet)
646 : {
647 0 : if (_pSet)
648 0 : FillItemSet(_pSet);
649 0 : return LEAVE_PAGE;
650 : }
651 :
652 0 : bool SwVisitingCardPage::FillItemSet(SfxItemSet* rSet)
653 : {
654 0 : const OUString* pGroup = static_cast<const OUString*>(m_pAutoTextGroupLB->GetSelectEntryData());
655 : OSL_ENSURE(pGroup, "no group selected?");
656 :
657 0 : if (pGroup)
658 0 : aLabItem.sGlossaryGroup = *pGroup;
659 :
660 0 : SvTreeListEntry* pSelEntry = m_pAutoTextLB->FirstSelected();
661 0 : if(pSelEntry)
662 0 : aLabItem.sGlossaryBlockName = *static_cast<OUString*>(pSelEntry->GetUserData());
663 0 : rSet->Put(aLabItem);
664 0 : return true;
665 : }
666 :
667 0 : static void lcl_SelectBlock(SvTreeListBox& rAutoTextLB, const OUString& rBlockName)
668 : {
669 0 : SvTreeListEntry* pEntry = rAutoTextLB.First();
670 0 : while(pEntry)
671 : {
672 0 : if(*static_cast<OUString*>(pEntry->GetUserData()) == rBlockName)
673 : {
674 0 : rAutoTextLB.Select(pEntry);
675 0 : rAutoTextLB.MakeVisible(pEntry);
676 0 : break;
677 : }
678 0 : pEntry = rAutoTextLB.Next(pEntry);
679 : }
680 0 : }
681 :
682 0 : static bool lcl_FindBlock(SvTreeListBox& rAutoTextLB, const OUString& rBlockName)
683 : {
684 0 : SvTreeListEntry* pEntry = rAutoTextLB.First();
685 0 : while(pEntry)
686 : {
687 0 : if(*static_cast<OUString*>(pEntry->GetUserData()) == rBlockName)
688 : {
689 0 : rAutoTextLB.Select(pEntry);
690 0 : return true;
691 : }
692 0 : pEntry = rAutoTextLB.Next(pEntry);
693 : }
694 0 : return false;
695 : }
696 :
697 0 : void SwVisitingCardPage::Reset(const SfxItemSet* rSet)
698 : {
699 0 : aLabItem = static_cast<const SwLabItem&>( rSet->Get(FN_LABEL) );
700 :
701 0 : bool bFound = false;
702 : sal_Int32 i;
703 0 : for(i = 0; i < m_pAutoTextGroupLB->GetEntryCount(); i++)
704 0 : if( aLabItem.sGlossaryGroup == *static_cast<const OUString*>(m_pAutoTextGroupLB->GetEntryData( i )))
705 : {
706 0 : bFound = true;
707 0 : break;
708 : }
709 :
710 0 : if(!bFound)
711 : {
712 : // initially search for a group starting with "crd" which is the name of the
713 : // business card AutoTexts
714 0 : for(i = 0; i < m_pAutoTextGroupLB->GetEntryCount(); i++)
715 0 : if (static_cast<const OUString*>(m_pAutoTextGroupLB->GetEntryData(i))->startsWith("crd"))
716 : {
717 0 : bFound = true;
718 0 : break;
719 : }
720 : }
721 0 : if(bFound)
722 : {
723 0 : if(m_pAutoTextGroupLB->GetSelectEntryPos() != i)
724 : {
725 0 : m_pAutoTextGroupLB->SelectEntryPos(i);
726 0 : AutoTextSelectHdl(m_pAutoTextGroupLB);
727 : }
728 0 : if(lcl_FindBlock(*m_pAutoTextLB, aLabItem.sGlossaryBlockName))
729 : {
730 0 : SvTreeListEntry* pSelEntry = m_pAutoTextLB->FirstSelected();
731 0 : if( pSelEntry &&
732 0 : *static_cast<OUString*>(pSelEntry->GetUserData()) != aLabItem.sGlossaryBlockName)
733 : {
734 0 : lcl_SelectBlock(*m_pAutoTextLB, aLabItem.sGlossaryBlockName);
735 0 : AutoTextSelectHdl(m_pAutoTextLB);
736 : }
737 : }
738 : }
739 0 : }
740 :
741 0 : SwPrivateDataPage::SwPrivateDataPage(vcl::Window* pParent, const SfxItemSet& rSet)
742 : : SfxTabPage(pParent, "PrivateUserPage",
743 0 : "modules/swriter/ui/privateuserpage.ui", &rSet)
744 : {
745 0 : get(m_pFirstNameED, "firstname");
746 0 : get(m_pNameED, "lastname");
747 0 : get(m_pShortCutED, "shortname");
748 0 : get(m_pFirstName2ED, "firstname2");
749 0 : get(m_pName2ED, "lastname2");
750 0 : get(m_pShortCut2ED, "shortname2");
751 0 : get(m_pStreetED, "street");
752 0 : get(m_pZipED, "izip");
753 0 : get(m_pCityED, "icity");
754 0 : get(m_pCountryED, "country");
755 0 : get(m_pStateED, "state");
756 0 : get(m_pTitleED, "title");
757 0 : get(m_pProfessionED, "job");
758 0 : get(m_pPhoneED, "phone");
759 0 : get(m_pMobilePhoneED, "mobile");
760 0 : get(m_pFaxED, "fax");
761 0 : get(m_pHomePageED, "url");
762 0 : get(m_pMailED, "email");
763 :
764 0 : SetExchangeSupport();
765 0 : }
766 :
767 0 : SwPrivateDataPage::~SwPrivateDataPage()
768 : {
769 0 : disposeOnce();
770 0 : }
771 :
772 0 : void SwPrivateDataPage::dispose()
773 : {
774 0 : m_pFirstNameED.clear();
775 0 : m_pNameED.clear();
776 0 : m_pShortCutED.clear();
777 0 : m_pFirstName2ED.clear();
778 0 : m_pName2ED.clear();
779 0 : m_pShortCut2ED.clear();
780 0 : m_pStreetED.clear();
781 0 : m_pZipED.clear();
782 0 : m_pCityED.clear();
783 0 : m_pCountryED.clear();
784 0 : m_pStateED.clear();
785 0 : m_pTitleED.clear();
786 0 : m_pProfessionED.clear();
787 0 : m_pPhoneED.clear();
788 0 : m_pMobilePhoneED.clear();
789 0 : m_pFaxED.clear();
790 0 : m_pHomePageED.clear();
791 0 : m_pMailED.clear();
792 0 : SfxTabPage::dispose();
793 0 : }
794 :
795 0 : VclPtr<SfxTabPage> SwPrivateDataPage::Create(vcl::Window* pParent, const SfxItemSet* rSet)
796 : {
797 0 : return VclPtr<SwPrivateDataPage>::Create(pParent, *rSet);
798 : }
799 :
800 0 : void SwPrivateDataPage::ActivatePage(const SfxItemSet& rSet)
801 : {
802 0 : Reset(&rSet);
803 0 : }
804 :
805 0 : SfxTabPage::sfxpg SwPrivateDataPage::DeactivatePage(SfxItemSet* _pSet)
806 : {
807 0 : if (_pSet)
808 0 : FillItemSet(_pSet);
809 0 : return LEAVE_PAGE;
810 : }
811 :
812 0 : bool SwPrivateDataPage::FillItemSet(SfxItemSet* rSet)
813 : {
814 :
815 0 : SwLabItem aItem = static_cast<const SwLabItem&>( GetTabDialog()->GetExampleSet()->Get(FN_LABEL) );
816 0 : aItem.aPrivFirstName = m_pFirstNameED->GetText();
817 0 : aItem.aPrivName = m_pNameED->GetText( );
818 0 : aItem.aPrivShortCut = m_pShortCutED->GetText( );
819 0 : aItem.aPrivFirstName2 = m_pFirstName2ED->GetText();
820 0 : aItem.aPrivName2 = m_pName2ED->GetText( );
821 0 : aItem.aPrivShortCut2 = m_pShortCut2ED->GetText( );
822 0 : aItem.aPrivStreet = m_pStreetED->GetText( );
823 0 : aItem.aPrivZip = m_pZipED->GetText( );
824 0 : aItem.aPrivCity = m_pCityED->GetText( );
825 0 : aItem.aPrivCountry = m_pCountryED->GetText( );
826 0 : aItem.aPrivState = m_pStateED->GetText( );
827 0 : aItem.aPrivTitle = m_pTitleED->GetText( );
828 0 : aItem.aPrivProfession= m_pProfessionED->GetText( );
829 0 : aItem.aPrivPhone = m_pPhoneED->GetText( );
830 0 : aItem.aPrivMobile = m_pMobilePhoneED->GetText( );
831 0 : aItem.aPrivFax = m_pFaxED->GetText( );
832 0 : aItem.aPrivWWW = m_pHomePageED->GetText( );
833 0 : aItem.aPrivMail = m_pMailED->GetText( );
834 :
835 0 : rSet->Put(aItem);
836 0 : return true;
837 : }
838 :
839 0 : void SwPrivateDataPage::Reset(const SfxItemSet* rSet)
840 : {
841 0 : const SwLabItem& aItem = static_cast<const SwLabItem&>( rSet->Get(FN_LABEL) );
842 0 : m_pFirstNameED->SetText(aItem.aPrivFirstName);
843 0 : m_pNameED->SetText(aItem.aPrivName);
844 0 : m_pShortCutED->SetText(aItem.aPrivShortCut);
845 0 : m_pFirstName2ED->SetText(aItem.aPrivFirstName2);
846 0 : m_pName2ED->SetText(aItem.aPrivName2);
847 0 : m_pShortCut2ED->SetText(aItem.aPrivShortCut2);
848 0 : m_pStreetED->SetText(aItem.aPrivStreet);
849 0 : m_pZipED->SetText(aItem.aPrivZip);
850 0 : m_pCityED->SetText(aItem.aPrivCity);
851 0 : m_pCountryED->SetText(aItem.aPrivCountry);
852 0 : m_pStateED->SetText(aItem.aPrivState);
853 0 : m_pTitleED->SetText(aItem.aPrivTitle);
854 0 : m_pProfessionED->SetText(aItem.aPrivProfession);
855 0 : m_pPhoneED->SetText(aItem.aPrivPhone);
856 0 : m_pMobilePhoneED->SetText(aItem.aPrivMobile);
857 0 : m_pFaxED->SetText(aItem.aPrivFax);
858 0 : m_pHomePageED->SetText(aItem.aPrivWWW);
859 0 : m_pMailED->SetText(aItem.aPrivMail);
860 0 : }
861 :
862 0 : SwBusinessDataPage::SwBusinessDataPage(vcl::Window* pParent, const SfxItemSet& rSet)
863 : : SfxTabPage(pParent, "BusinessDataPage",
864 0 : "modules/swriter/ui/businessdatapage.ui", &rSet)
865 : {
866 0 : get(m_pCompanyED, "company");
867 0 : get(m_pCompanyExtED, "company2");
868 0 : get(m_pSloganED, "slogan");
869 0 : get(m_pStreetED, "street");
870 0 : get(m_pZipED, "izip");
871 0 : get(m_pCityED, "icity");
872 0 : get(m_pCountryED, "country");
873 0 : get(m_pStateED, "state");
874 0 : get(m_pPositionED, "position");
875 0 : get(m_pPhoneED, "phone");
876 0 : get(m_pMobilePhoneED, "mobile");
877 0 : get(m_pFaxED, "fax");
878 0 : get(m_pHomePageED, "url");
879 0 : get(m_pMailED, "email");
880 0 : SetExchangeSupport();
881 0 : }
882 :
883 0 : SwBusinessDataPage::~SwBusinessDataPage()
884 : {
885 0 : disposeOnce();
886 0 : }
887 :
888 0 : void SwBusinessDataPage::dispose()
889 : {
890 0 : m_pCompanyED.clear();
891 0 : m_pCompanyExtED.clear();
892 0 : m_pSloganED.clear();
893 0 : m_pStreetED.clear();
894 0 : m_pZipED.clear();
895 0 : m_pCityED.clear();
896 0 : m_pCountryED.clear();
897 0 : m_pStateED.clear();
898 0 : m_pPositionED.clear();
899 0 : m_pPhoneED.clear();
900 0 : m_pMobilePhoneED.clear();
901 0 : m_pFaxED.clear();
902 0 : m_pHomePageED.clear();
903 0 : m_pMailED.clear();
904 0 : SfxTabPage::dispose();
905 0 : }
906 :
907 :
908 0 : VclPtr<SfxTabPage> SwBusinessDataPage::Create(vcl::Window* pParent, const SfxItemSet* rSet)
909 : {
910 0 : return VclPtr<SwBusinessDataPage>::Create(pParent, *rSet);
911 : }
912 :
913 0 : void SwBusinessDataPage::ActivatePage(const SfxItemSet& rSet)
914 : {
915 0 : Reset(&rSet);
916 0 : }
917 :
918 0 : SfxTabPage::sfxpg SwBusinessDataPage::DeactivatePage(SfxItemSet* _pSet)
919 : {
920 0 : if (_pSet)
921 0 : FillItemSet(_pSet);
922 0 : return LEAVE_PAGE;
923 : }
924 :
925 0 : bool SwBusinessDataPage::FillItemSet(SfxItemSet* rSet)
926 : {
927 0 : SwLabItem aItem = static_cast<const SwLabItem&>( GetTabDialog()->GetExampleSet()->Get(FN_LABEL) );
928 :
929 0 : aItem.aCompCompany = m_pCompanyED->GetText();
930 0 : aItem.aCompCompanyExt= m_pCompanyExtED->GetText();
931 0 : aItem.aCompSlogan = m_pSloganED->GetText();
932 0 : aItem.aCompStreet = m_pStreetED->GetText();
933 0 : aItem.aCompZip = m_pZipED->GetText();
934 0 : aItem.aCompCity = m_pCityED->GetText();
935 0 : aItem.aCompCountry = m_pCountryED->GetText();
936 0 : aItem.aCompState = m_pStateED->GetText();
937 0 : aItem.aCompPosition = m_pPositionED->GetText();
938 0 : aItem.aCompPhone = m_pPhoneED->GetText();
939 0 : aItem.aCompMobile = m_pMobilePhoneED->GetText();
940 0 : aItem.aCompFax = m_pFaxED->GetText();
941 0 : aItem.aCompWWW = m_pHomePageED->GetText();
942 0 : aItem.aCompMail = m_pMailED->GetText();
943 :
944 0 : rSet->Put(aItem);
945 0 : return true;
946 : }
947 :
948 0 : void SwBusinessDataPage::Reset(const SfxItemSet* rSet)
949 : {
950 0 : const SwLabItem& aItem = static_cast<const SwLabItem&>( rSet->Get(FN_LABEL) );
951 0 : m_pCompanyED->SetText(aItem.aCompCompany);
952 0 : m_pCompanyExtED->SetText(aItem.aCompCompanyExt);
953 0 : m_pSloganED->SetText(aItem.aCompSlogan);
954 0 : m_pStreetED->SetText(aItem.aCompStreet);
955 0 : m_pZipED->SetText(aItem.aCompZip);
956 0 : m_pCityED->SetText(aItem.aCompCity);
957 0 : m_pCountryED->SetText(aItem.aCompCountry);
958 0 : m_pStateED->SetText(aItem.aCompState);
959 0 : m_pPositionED->SetText(aItem.aCompPosition);
960 0 : m_pPhoneED->SetText(aItem.aCompPhone);
961 0 : m_pMobilePhoneED->SetText(aItem.aCompMobile);
962 0 : m_pFaxED->SetText(aItem.aCompFax);
963 0 : m_pHomePageED->SetText(aItem.aCompWWW);
964 0 : m_pMailED->SetText(aItem.aCompMail);
965 0 : }
966 :
967 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|