Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <swtypes.hxx>
30 : : #include <customizeaddresslistdialog.hxx>
31 : : #include <createaddresslistdialog.hxx>
32 : : #include <vcl/scrbar.hxx>
33 : : #include <vcl/msgbox.hxx>
34 : : #include <customizeaddresslistdialog.hrc>
35 : : #include <dbui.hrc>
36 : : #include <helpid.h>
37 : :
38 : 0 : SwCustomizeAddressListDialog::SwCustomizeAddressListDialog(
39 : : Window* pParent, const SwCSVData& rOldData) :
40 : : SfxModalDialog(pParent, SW_RES(DLG_MM_CUSTOMIZE_ADDRESS_LIST)),
41 : : #ifdef MSC
42 : : #pragma warning (disable : 4355)
43 : : #endif
44 : : m_aFieldsFT( this, SW_RES( FT_FIELDS)),
45 : : m_aFieldsLB( this, SW_RES( LB_FIELDS)),
46 : : m_aAddPB( this, SW_RES( PB_ADD)),
47 : : m_aDeletePB( this, SW_RES( PB_DELETE)),
48 : : m_aRenamePB( this, SW_RES( PB_RENAME)),
49 : : m_aUpPB( this, SW_RES( PB_UP)),
50 : : m_aDownPB( this, SW_RES( PB_DOWN)),
51 : : m_aSeparatorFL( this, SW_RES( FL_SEPARATOR)),
52 : : m_aOK( this, SW_RES( PB_OK)),
53 : : m_aCancel( this, SW_RES( PB_CANCEL)),
54 : : m_aHelp( this, SW_RES( PB_HELP)),
55 : : #ifdef MSC
56 : : #pragma warning (default : 4355)
57 : : #endif
58 : 0 : m_pNewData( new SwCSVData(rOldData))
59 : : {
60 : 0 : FreeResource();
61 : 0 : m_aFieldsLB.SetSelectHdl(LINK(this, SwCustomizeAddressListDialog, ListBoxSelectHdl_Impl));
62 : 0 : Link aAddRenameLk = LINK(this, SwCustomizeAddressListDialog, AddRenameHdl_Impl );
63 : 0 : m_aAddPB.SetClickHdl(aAddRenameLk);
64 : 0 : m_aRenamePB.SetClickHdl(aAddRenameLk);
65 : 0 : m_aDeletePB.SetClickHdl(LINK(this, SwCustomizeAddressListDialog, DeleteHdl_Impl ));
66 : 0 : Link aUpDownLk = LINK(this, SwCustomizeAddressListDialog, UpDownHdl_Impl);
67 : 0 : m_aUpPB.SetClickHdl(aUpDownLk);
68 : 0 : m_aDownPB.SetClickHdl(aUpDownLk);
69 : :
70 : 0 : ::std::vector< ::rtl::OUString >::iterator aHeaderIter;
71 : :
72 : 0 : for(aHeaderIter = m_pNewData->aDBColumnHeaders.begin();
73 : 0 : aHeaderIter != m_pNewData->aDBColumnHeaders.end(); ++aHeaderIter)
74 : 0 : m_aFieldsLB.InsertEntry(*aHeaderIter);
75 : :
76 : 0 : m_aFieldsLB.SelectEntryPos(0);
77 : 0 : UpdateButtons();
78 : 0 : }
79 : :
80 : 0 : SwCustomizeAddressListDialog::~SwCustomizeAddressListDialog()
81 : : {
82 : 0 : }
83 : :
84 : 0 : IMPL_LINK_NOARG(SwCustomizeAddressListDialog, ListBoxSelectHdl_Impl)
85 : : {
86 : 0 : UpdateButtons();
87 : 0 : return 0;
88 : : }
89 : :
90 : 0 : IMPL_LINK(SwCustomizeAddressListDialog, AddRenameHdl_Impl, PushButton*, pButton)
91 : : {
92 : 0 : bool bRename = pButton == &m_aRenamePB;
93 : 0 : sal_uInt16 nPos = m_aFieldsLB.GetSelectEntryPos();
94 : 0 : if(nPos == LISTBOX_ENTRY_NOTFOUND)
95 : 0 : nPos = 0;
96 : :
97 : : SwAddRenameEntryDialog* pDlg =
98 : 0 : new SwAddRenameEntryDialog(pButton, bRename, m_pNewData->aDBColumnHeaders);
99 : 0 : if(bRename)
100 : : {
101 : 0 : String aTemp = m_aFieldsLB.GetEntry(nPos);
102 : 0 : pDlg->SetFieldName(aTemp);
103 : : }
104 : 0 : if(RET_OK == pDlg->Execute())
105 : : {
106 : 0 : String sNew = pDlg->GetFieldName();
107 : 0 : if(bRename)
108 : : {
109 : 0 : m_pNewData->aDBColumnHeaders[nPos] = sNew;
110 : 0 : m_aFieldsLB.RemoveEntry(nPos);
111 : : }
112 : : else
113 : : {
114 : 0 : if ( m_aFieldsLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
115 : 0 : ++nPos; // append the new entry behind the selected
116 : : //add the new column
117 : 0 : m_pNewData->aDBColumnHeaders.insert(m_pNewData->aDBColumnHeaders.begin() + nPos, sNew);
118 : : //add a new entry into all data arrays
119 : 0 : String sTemp;
120 : 0 : ::std::vector< ::std::vector< ::rtl::OUString > >::iterator aDataIter;
121 : 0 : for( aDataIter = m_pNewData->aDBData.begin(); aDataIter != m_pNewData->aDBData.end(); ++aDataIter)
122 : 0 : aDataIter->insert(aDataIter->begin() + nPos, sTemp);
123 : :
124 : : }
125 : :
126 : 0 : m_aFieldsLB.InsertEntry(sNew, nPos);
127 : 0 : m_aFieldsLB.SelectEntryPos(nPos);
128 : : }
129 : 0 : delete pDlg;
130 : 0 : UpdateButtons();
131 : 0 : return 0;
132 : : }
133 : :
134 : 0 : IMPL_LINK_NOARG(SwCustomizeAddressListDialog, DeleteHdl_Impl)
135 : : {
136 : 0 : sal_uInt16 nPos = m_aFieldsLB.GetSelectEntryPos();
137 : 0 : m_aFieldsLB.RemoveEntry(m_aFieldsLB.GetSelectEntryPos());
138 : 0 : m_aFieldsLB.SelectEntryPos(nPos > m_aFieldsLB.GetEntryCount() - 1 ? nPos - 1 : nPos);
139 : :
140 : : //remove the column
141 : 0 : m_pNewData->aDBColumnHeaders.erase(m_pNewData->aDBColumnHeaders.begin() + nPos);
142 : : //remove the data
143 : 0 : ::std::vector< ::std::vector< ::rtl::OUString > >::iterator aDataIter;
144 : 0 : for( aDataIter = m_pNewData->aDBData.begin(); aDataIter != m_pNewData->aDBData.end(); ++aDataIter)
145 : 0 : aDataIter->erase(aDataIter->begin() + nPos);
146 : :
147 : 0 : UpdateButtons();
148 : 0 : return 0;
149 : : }
150 : :
151 : 0 : IMPL_LINK(SwCustomizeAddressListDialog, UpDownHdl_Impl, PushButton*, pButton)
152 : : {
153 : : sal_uInt16 nPos;
154 : 0 : sal_uInt16 nOldPos = nPos = m_aFieldsLB.GetSelectEntryPos();
155 : 0 : String aTemp = m_aFieldsLB.GetEntry(nPos);
156 : 0 : m_aFieldsLB.RemoveEntry( nPos );
157 : 0 : if(pButton == &m_aUpPB)
158 : 0 : --nPos;
159 : : else
160 : 0 : ++nPos;
161 : 0 : m_aFieldsLB.InsertEntry(aTemp, nPos);
162 : 0 : m_aFieldsLB.SelectEntryPos(nPos);
163 : : //align m_pNewData
164 : 0 : ::rtl::OUString sHeader = m_pNewData->aDBColumnHeaders[nOldPos];
165 : 0 : m_pNewData->aDBColumnHeaders.erase(m_pNewData->aDBColumnHeaders.begin() + nOldPos);
166 : 0 : m_pNewData->aDBColumnHeaders.insert(m_pNewData->aDBColumnHeaders.begin() + nPos, sHeader);
167 : 0 : ::std::vector< ::std::vector< ::rtl::OUString > >::iterator aDataIter;
168 : 0 : for( aDataIter = m_pNewData->aDBData.begin(); aDataIter != m_pNewData->aDBData.end(); ++aDataIter)
169 : : {
170 : 0 : ::rtl::OUString sData = (*aDataIter)[nOldPos];
171 : 0 : aDataIter->erase(aDataIter->begin() + nOldPos);
172 : 0 : aDataIter->insert(aDataIter->begin() + nPos, sData);
173 : 0 : }
174 : :
175 : 0 : UpdateButtons();
176 : 0 : return 0;
177 : : }
178 : :
179 : 0 : void SwCustomizeAddressListDialog::UpdateButtons()
180 : : {
181 : 0 : sal_uInt16 nPos = m_aFieldsLB.GetSelectEntryPos();
182 : 0 : sal_uInt16 nEntries = m_aFieldsLB.GetEntryCount();
183 : 0 : m_aUpPB.Enable(nPos > 0 && nEntries > 0);
184 : 0 : m_aDownPB.Enable(nPos < nEntries -1);
185 : 0 : m_aDeletePB.Enable(nEntries > 0);
186 : 0 : m_aRenamePB.Enable(nEntries > 0);
187 : 0 : }
188 : :
189 : 0 : SwCSVData* SwCustomizeAddressListDialog::GetNewData()
190 : : {
191 : 0 : return m_pNewData;
192 : : }
193 : :
194 : 0 : SwAddRenameEntryDialog::SwAddRenameEntryDialog(
195 : : Window* pParent, bool bRename, const ::std::vector< ::rtl::OUString >& rCSVHeader) :
196 : : SfxModalDialog(pParent, SW_RES(DLG_MM_ADD_RENAME_ENTRY)),
197 : : #ifdef MSC
198 : : #pragma warning (disable : 4355)
199 : : #endif
200 : : m_aFieldNameFT( this, SW_RES( FT_FIELDNAME)),
201 : : m_aFieldNameED( this, SW_RES( ED_FIELDNAME)),
202 : : m_aOK( this, SW_RES( PB_OK)),
203 : : m_aCancel( this, SW_RES( PB_CANCEL)),
204 : : m_aHelp( this, SW_RES( PB_HELP)),
205 : : #ifdef MSC
206 : : #pragma warning (default : 4355)
207 : : #endif
208 : 0 : m_rCSVHeader(rCSVHeader)
209 : : {
210 : 0 : if(bRename)
211 : 0 : SetText(String(SW_RES(ST_RENAME_TITLE)));
212 : : else
213 : 0 : m_aOK.SetText(String(SW_RES(ST_ADD_BUTTON)));
214 : 0 : FreeResource();
215 : 0 : m_aFieldNameED.SetModifyHdl(LINK(this, SwAddRenameEntryDialog, ModifyHdl_Impl));
216 : 0 : ModifyHdl_Impl( &m_aFieldNameED );
217 : 0 : }
218 : :
219 : 0 : SwAddRenameEntryDialog::~SwAddRenameEntryDialog()
220 : : {
221 : 0 : }
222 : :
223 : 0 : IMPL_LINK(SwAddRenameEntryDialog, ModifyHdl_Impl, Edit*, pEdit)
224 : : {
225 : 0 : ::rtl::OUString sEntry = pEdit->GetText();
226 : 0 : sal_Bool bFound = sEntry.isEmpty();
227 : :
228 : 0 : if(!bFound)
229 : : {
230 : 0 : ::std::vector< ::rtl::OUString >::const_iterator aHeaderIter;
231 : 0 : for(aHeaderIter = m_rCSVHeader.begin();
232 : 0 : aHeaderIter != m_rCSVHeader.end();
233 : : ++aHeaderIter)
234 : 0 : if(*aHeaderIter == sEntry)
235 : : {
236 : 0 : bFound = sal_True;
237 : 0 : break;
238 : : }
239 : : }
240 : 0 : m_aOK.Enable(!bFound);
241 : 0 : return 0;
242 : : }
243 : :
244 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|