1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_cui.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "dbregister.hxx"
28*b1cdbd2cSJim Jagielski #include "dbregister.hrc"
29*b1cdbd2cSJim Jagielski #include "dbregistersettings.hxx"
30*b1cdbd2cSJim Jagielski #include "connpooloptions.hxx"
31*b1cdbd2cSJim Jagielski #include <svl/filenotation.hxx>
32*b1cdbd2cSJim Jagielski #include <cuires.hrc>
33*b1cdbd2cSJim Jagielski #include "helpid.hrc"
34*b1cdbd2cSJim Jagielski #include <svtools/editbrowsebox.hxx>
35*b1cdbd2cSJim Jagielski #include <cuires.hrc>
36*b1cdbd2cSJim Jagielski #include <vcl/field.hxx>
37*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
38*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Exception.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilePicker.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
44*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
45*b1cdbd2cSJim Jagielski #include <svtools/svtabbx.hxx>
46*b1cdbd2cSJim Jagielski #include <svl/itemset.hxx>
47*b1cdbd2cSJim Jagielski #include "doclinkdialog.hxx"
48*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
49*b1cdbd2cSJim Jagielski #include <unotools/localfilehelper.hxx>
50*b1cdbd2cSJim Jagielski #include "optHeaderTabListbox.hxx"
51*b1cdbd2cSJim Jagielski #include <sfx2/docfilt.hxx>
52*b1cdbd2cSJim Jagielski #include <dialmgr.hxx>
53*b1cdbd2cSJim Jagielski #include "dbregisterednamesconfig.hxx"
54*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski #define TAB_WIDTH1 80
57*b1cdbd2cSJim Jagielski #define TAB_WIDTH_MIN 10
58*b1cdbd2cSJim Jagielski #define TAB_WIDTH2 1000
59*b1cdbd2cSJim Jagielski #define ITEMID_TYPE 1
60*b1cdbd2cSJim Jagielski #define ITEMID_PATH 2
61*b1cdbd2cSJim Jagielski //........................................................................
62*b1cdbd2cSJim Jagielski namespace svx
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski //........................................................................
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
67*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::ui::dialogs;
68*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
69*b1cdbd2cSJim Jagielski using namespace ::svt;
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielski // class RegistrationItemSetHolder -------------------------------------------------
72*b1cdbd2cSJim Jagielski
RegistrationItemSetHolder(const SfxItemSet & _rMasterSet)73*b1cdbd2cSJim Jagielski RegistrationItemSetHolder::RegistrationItemSetHolder( const SfxItemSet& _rMasterSet )
74*b1cdbd2cSJim Jagielski :m_aRegistrationItems( _rMasterSet )
75*b1cdbd2cSJim Jagielski {
76*b1cdbd2cSJim Jagielski DbRegisteredNamesConfig::GetOptions( m_aRegistrationItems );
77*b1cdbd2cSJim Jagielski }
78*b1cdbd2cSJim Jagielski
~RegistrationItemSetHolder()79*b1cdbd2cSJim Jagielski RegistrationItemSetHolder::~RegistrationItemSetHolder()
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski // class DatabaseRegistrationDialog ------------------------------------------------
84*b1cdbd2cSJim Jagielski
DatabaseRegistrationDialog(Window * pParent,const SfxItemSet & rInAttrs)85*b1cdbd2cSJim Jagielski DatabaseRegistrationDialog::DatabaseRegistrationDialog( Window* pParent, const SfxItemSet& rInAttrs )
86*b1cdbd2cSJim Jagielski :RegistrationItemSetHolder( rInAttrs )
87*b1cdbd2cSJim Jagielski ,SfxSingleTabDialog( pParent, getRegistrationItems(), RID_SFXPAGE_DBREGISTER )
88*b1cdbd2cSJim Jagielski {
89*b1cdbd2cSJim Jagielski SfxTabPage* page = DbRegistrationOptionsPage::Create( this, getRegistrationItems() );
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski SetTabPage( page );
92*b1cdbd2cSJim Jagielski SetText( page->GetText() );
93*b1cdbd2cSJim Jagielski }
94*b1cdbd2cSJim Jagielski
~DatabaseRegistrationDialog()95*b1cdbd2cSJim Jagielski DatabaseRegistrationDialog::~DatabaseRegistrationDialog()
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski
Execute()99*b1cdbd2cSJim Jagielski short DatabaseRegistrationDialog::Execute()
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski short result = SfxSingleTabDialog::Execute();
102*b1cdbd2cSJim Jagielski if ( result == RET_OK )
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski DBG_ASSERT( GetOutputItemSet(), "DatabaseRegistrationDialog::Execute: no output items!" );
105*b1cdbd2cSJim Jagielski if ( GetOutputItemSet() )
106*b1cdbd2cSJim Jagielski DbRegisteredNamesConfig::SetOptions( *GetOutputItemSet() );
107*b1cdbd2cSJim Jagielski }
108*b1cdbd2cSJim Jagielski return result;
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski // class DbRegistrationOptionsPage --------------------------------------------------
112*b1cdbd2cSJim Jagielski
DbRegistrationOptionsPage(Window * pParent,const SfxItemSet & rSet)113*b1cdbd2cSJim Jagielski DbRegistrationOptionsPage::DbRegistrationOptionsPage( Window* pParent, const SfxItemSet& rSet ) :
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski SfxTabPage( pParent, CUI_RES( RID_SFXPAGE_DBREGISTER), rSet ),
116*b1cdbd2cSJim Jagielski
117*b1cdbd2cSJim Jagielski aStdBox ( this, CUI_RES( GB_STD ) ),
118*b1cdbd2cSJim Jagielski aTypeText ( this, CUI_RES( FT_TYPE ) ),
119*b1cdbd2cSJim Jagielski aPathText ( this, CUI_RES( FT_PATH ) ),
120*b1cdbd2cSJim Jagielski aPathCtrl ( this, CUI_RES( LB_PATH ) ),
121*b1cdbd2cSJim Jagielski m_aNew ( this, CUI_RES( BTN_NEW ) ),
122*b1cdbd2cSJim Jagielski m_aEdit ( this, CUI_RES( BTN_EDIT ) ),
123*b1cdbd2cSJim Jagielski m_aDelete ( this, CUI_RES( BTN_DELETE ) ),
124*b1cdbd2cSJim Jagielski pHeaderBar ( NULL ),
125*b1cdbd2cSJim Jagielski pPathBox ( NULL ),
126*b1cdbd2cSJim Jagielski m_pCurEntry ( NULL ),
127*b1cdbd2cSJim Jagielski m_nOldCount ( 0 ),
128*b1cdbd2cSJim Jagielski m_bModified ( sal_False )
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski m_aNew.SetClickHdl( LINK( this, DbRegistrationOptionsPage, NewHdl ) );
131*b1cdbd2cSJim Jagielski m_aEdit.SetClickHdl( LINK( this, DbRegistrationOptionsPage, EditHdl ) );
132*b1cdbd2cSJim Jagielski m_aDelete.SetClickHdl( LINK( this, DbRegistrationOptionsPage, DeleteHdl ) );
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski Size aBoxSize = aPathCtrl.GetOutputSizePixel();
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski WinBits nBits = WB_SORT | WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP;
138*b1cdbd2cSJim Jagielski pPathBox = new ::svx::OptHeaderTabListBox( &aPathCtrl, nBits );
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski pHeaderBar = new HeaderBar( &aPathCtrl, WB_BUTTONSTYLE | WB_BOTTOMBORDER );
141*b1cdbd2cSJim Jagielski pHeaderBar->SetPosSizePixel( Point( 0, 0 ), Size( aBoxSize.Width(), 16 ) );
142*b1cdbd2cSJim Jagielski pHeaderBar->SetSelectHdl( LINK( this, DbRegistrationOptionsPage, HeaderSelect_Impl ) );
143*b1cdbd2cSJim Jagielski pHeaderBar->SetEndDragHdl( LINK( this, DbRegistrationOptionsPage, HeaderEndDrag_Impl ) );
144*b1cdbd2cSJim Jagielski Size aSz;
145*b1cdbd2cSJim Jagielski aSz.Width() = TAB_WIDTH1;
146*b1cdbd2cSJim Jagielski pHeaderBar->InsertItem( ITEMID_TYPE, aTypeText.GetText(),
147*b1cdbd2cSJim Jagielski LogicToPixel( aSz, MapMode( MAP_APPFONT ) ).Width(),
148*b1cdbd2cSJim Jagielski HIB_LEFT | HIB_VCENTER | HIB_CLICKABLE | HIB_UPARROW );
149*b1cdbd2cSJim Jagielski aSz.Width() = TAB_WIDTH2;
150*b1cdbd2cSJim Jagielski pHeaderBar->InsertItem( ITEMID_PATH, aPathText.GetText(),
151*b1cdbd2cSJim Jagielski LogicToPixel( aSz, MapMode( MAP_APPFONT ) ).Width(),
152*b1cdbd2cSJim Jagielski HIB_LEFT | HIB_VCENTER );
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski static long nTabs[] = {3, 0, TAB_WIDTH1, TAB_WIDTH1 + TAB_WIDTH2 };
155*b1cdbd2cSJim Jagielski Size aHeadSize = pHeaderBar->GetSizePixel();
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski aPathCtrl.SetFocusControl( pPathBox );
158*b1cdbd2cSJim Jagielski pPathBox->SetStyle( pPathBox->GetStyle()|nBits );
159*b1cdbd2cSJim Jagielski pPathBox->SetDoubleClickHdl( LINK( this, DbRegistrationOptionsPage, EditHdl ) );
160*b1cdbd2cSJim Jagielski pPathBox->SetSelectHdl( LINK( this, DbRegistrationOptionsPage, PathSelect_Impl ) );
161*b1cdbd2cSJim Jagielski pPathBox->SetSelectionMode( SINGLE_SELECTION );
162*b1cdbd2cSJim Jagielski pPathBox->SetPosSizePixel( Point( 0, aHeadSize.Height() ),
163*b1cdbd2cSJim Jagielski Size( aBoxSize.Width(), aBoxSize.Height() - aHeadSize.Height() ) );
164*b1cdbd2cSJim Jagielski pPathBox->SetTabs( &nTabs[0], MAP_APPFONT );
165*b1cdbd2cSJim Jagielski pPathBox->InitHeaderBar( pHeaderBar );
166*b1cdbd2cSJim Jagielski pPathBox->SetHighlightRange();
167*b1cdbd2cSJim Jagielski
168*b1cdbd2cSJim Jagielski pPathBox->SetHelpId( HID_DBPATH_CTL_PATH );
169*b1cdbd2cSJim Jagielski pHeaderBar->SetHelpId( HID_DBPATH_HEADERBAR );
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielski pPathBox->Show();
172*b1cdbd2cSJim Jagielski pHeaderBar->Show();
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski FreeResource();
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
178*b1cdbd2cSJim Jagielski
~DbRegistrationOptionsPage()179*b1cdbd2cSJim Jagielski DbRegistrationOptionsPage::~DbRegistrationOptionsPage()
180*b1cdbd2cSJim Jagielski {
181*b1cdbd2cSJim Jagielski // #110603# do not grab focus to a destroyed window !!!
182*b1cdbd2cSJim Jagielski aPathCtrl.SetFocusControl( NULL );
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski pHeaderBar->Hide();
185*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < pPathBox->GetEntryCount(); ++i )
186*b1cdbd2cSJim Jagielski delete static_cast< DatabaseRegistration* >( pPathBox->GetEntry(i)->GetUserData() );
187*b1cdbd2cSJim Jagielski delete pPathBox;
188*b1cdbd2cSJim Jagielski delete pHeaderBar;
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
192*b1cdbd2cSJim Jagielski
Create(Window * pParent,const SfxItemSet & rAttrSet)193*b1cdbd2cSJim Jagielski SfxTabPage* DbRegistrationOptionsPage::Create( Window* pParent,
194*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet )
195*b1cdbd2cSJim Jagielski {
196*b1cdbd2cSJim Jagielski return ( new DbRegistrationOptionsPage( pParent, rAttrSet ) );
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
200*b1cdbd2cSJim Jagielski
FillItemSet(SfxItemSet & rCoreSet)201*b1cdbd2cSJim Jagielski sal_Bool DbRegistrationOptionsPage::FillItemSet( SfxItemSet& rCoreSet )
202*b1cdbd2cSJim Jagielski {
203*b1cdbd2cSJim Jagielski // the settings for the single drivers
204*b1cdbd2cSJim Jagielski sal_Bool bModified = sal_False;
205*b1cdbd2cSJim Jagielski DatabaseRegistrations aRegistrations;
206*b1cdbd2cSJim Jagielski sal_uLong nCount = pPathBox->GetEntryCount();
207*b1cdbd2cSJim Jagielski for ( sal_uLong i = 0; i < nCount; ++i )
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = pPathBox->GetEntry(i);
210*b1cdbd2cSJim Jagielski DatabaseRegistration* pRegistration = static_cast< DatabaseRegistration* >( pEntry->GetUserData() );
211*b1cdbd2cSJim Jagielski if ( pRegistration && pRegistration->sLocation.getLength() )
212*b1cdbd2cSJim Jagielski {
213*b1cdbd2cSJim Jagielski ::rtl::OUString sName( pPathBox->GetEntryText( pEntry, 0 ) );
214*b1cdbd2cSJim Jagielski OFileNotation aTransformer( pRegistration->sLocation );
215*b1cdbd2cSJim Jagielski aRegistrations[ sName ] = DatabaseRegistration( aTransformer.get( OFileNotation::N_URL ), pRegistration->bReadOnly );
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski }
218*b1cdbd2cSJim Jagielski if ( m_nOldCount != aRegistrations.size() || m_bModified )
219*b1cdbd2cSJim Jagielski {
220*b1cdbd2cSJim Jagielski rCoreSet.Put(DatabaseMapItem( SID_SB_DB_REGISTER, aRegistrations ), SID_SB_DB_REGISTER);
221*b1cdbd2cSJim Jagielski bModified = sal_True;
222*b1cdbd2cSJim Jagielski }
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski return bModified;
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
228*b1cdbd2cSJim Jagielski
Reset(const SfxItemSet & rSet)229*b1cdbd2cSJim Jagielski void DbRegistrationOptionsPage::Reset( const SfxItemSet& rSet )
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski // the settings for the single drivers
232*b1cdbd2cSJim Jagielski SFX_ITEMSET_GET( rSet, pRegistrations, DatabaseMapItem, SID_SB_DB_REGISTER, sal_True );
233*b1cdbd2cSJim Jagielski if ( !pRegistrations )
234*b1cdbd2cSJim Jagielski return;
235*b1cdbd2cSJim Jagielski
236*b1cdbd2cSJim Jagielski pPathBox->Clear();
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski const DatabaseRegistrations& rRegistrations = pRegistrations->getRegistrations();
239*b1cdbd2cSJim Jagielski m_nOldCount = rRegistrations.size();
240*b1cdbd2cSJim Jagielski DatabaseRegistrations::const_iterator aIter = rRegistrations.begin();
241*b1cdbd2cSJim Jagielski DatabaseRegistrations::const_iterator aEnd = rRegistrations.end();
242*b1cdbd2cSJim Jagielski for ( ; aIter != aEnd; ++aIter )
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski OFileNotation aTransformer( aIter->second.sLocation );
245*b1cdbd2cSJim Jagielski insertNewEntry( aIter->first, aTransformer.get( OFileNotation::N_SYSTEM ), aIter->second.bReadOnly );
246*b1cdbd2cSJim Jagielski }
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielski String aUserData = GetUserData();
249*b1cdbd2cSJim Jagielski if ( aUserData.Len() )
250*b1cdbd2cSJim Jagielski {
251*b1cdbd2cSJim Jagielski // Spaltenbreite restaurieren
252*b1cdbd2cSJim Jagielski pHeaderBar->SetItemSize( ITEMID_TYPE, aUserData.GetToken(0).ToInt32() );
253*b1cdbd2cSJim Jagielski HeaderEndDrag_Impl( NULL );
254*b1cdbd2cSJim Jagielski // Sortierrichtung restaurieren
255*b1cdbd2cSJim Jagielski sal_Bool bUp = (sal_Bool)(sal_uInt16)aUserData.GetToken(1).ToInt32();
256*b1cdbd2cSJim Jagielski HeaderBarItemBits nBits = pHeaderBar->GetItemBits(ITEMID_TYPE);
257*b1cdbd2cSJim Jagielski
258*b1cdbd2cSJim Jagielski if ( bUp )
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski nBits &= ~HIB_UPARROW;
261*b1cdbd2cSJim Jagielski nBits |= HIB_DOWNARROW;
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski else
264*b1cdbd2cSJim Jagielski {
265*b1cdbd2cSJim Jagielski nBits &= ~HIB_DOWNARROW;
266*b1cdbd2cSJim Jagielski nBits |= HIB_UPARROW;
267*b1cdbd2cSJim Jagielski }
268*b1cdbd2cSJim Jagielski pHeaderBar->SetItemBits( ITEMID_TYPE, nBits );
269*b1cdbd2cSJim Jagielski HeaderSelect_Impl( NULL );
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski
273*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
274*b1cdbd2cSJim Jagielski
FillUserData()275*b1cdbd2cSJim Jagielski void DbRegistrationOptionsPage::FillUserData()
276*b1cdbd2cSJim Jagielski {
277*b1cdbd2cSJim Jagielski String aUserData = String::CreateFromInt32( pHeaderBar->GetItemSize( ITEMID_TYPE ) );
278*b1cdbd2cSJim Jagielski aUserData += ';';
279*b1cdbd2cSJim Jagielski HeaderBarItemBits nBits = pHeaderBar->GetItemBits( ITEMID_TYPE );
280*b1cdbd2cSJim Jagielski sal_Bool bUp = ( ( nBits & HIB_UPARROW ) == HIB_UPARROW );
281*b1cdbd2cSJim Jagielski aUserData += bUp ? '1' : '0';
282*b1cdbd2cSJim Jagielski SetUserData( aUserData );
283*b1cdbd2cSJim Jagielski }
284*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
285*b1cdbd2cSJim Jagielski
IMPL_LINK(DbRegistrationOptionsPage,DeleteHdl,void *,EMPTYARG)286*b1cdbd2cSJim Jagielski IMPL_LINK( DbRegistrationOptionsPage, DeleteHdl, void *, EMPTYARG )
287*b1cdbd2cSJim Jagielski {
288*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = pPathBox->FirstSelected();
289*b1cdbd2cSJim Jagielski if ( pEntry )
290*b1cdbd2cSJim Jagielski {
291*b1cdbd2cSJim Jagielski QueryBox aQuery(this,CUI_RES(QUERY_DELETE_CONFIRM));
292*b1cdbd2cSJim Jagielski if ( aQuery.Execute() == RET_YES )
293*b1cdbd2cSJim Jagielski pPathBox->GetModel()->Remove(pEntry);
294*b1cdbd2cSJim Jagielski }
295*b1cdbd2cSJim Jagielski return 0;
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(DbRegistrationOptionsPage,NewHdl,void *,EMPTYARG)298*b1cdbd2cSJim Jagielski IMPL_LINK( DbRegistrationOptionsPage, NewHdl, void *, EMPTYARG )
299*b1cdbd2cSJim Jagielski {
300*b1cdbd2cSJim Jagielski String sNewName,sNewLocation;
301*b1cdbd2cSJim Jagielski openLinkDialog(sNewName,sNewLocation);
302*b1cdbd2cSJim Jagielski return 0;
303*b1cdbd2cSJim Jagielski }
304*b1cdbd2cSJim Jagielski
305*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
306*b1cdbd2cSJim Jagielski
IMPL_LINK(DbRegistrationOptionsPage,EditHdl,void *,EMPTYARG)307*b1cdbd2cSJim Jagielski IMPL_LINK( DbRegistrationOptionsPage, EditHdl, void *, EMPTYARG )
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = pPathBox->GetCurEntry();
310*b1cdbd2cSJim Jagielski if ( !pEntry )
311*b1cdbd2cSJim Jagielski return 0L;
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski DatabaseRegistration* pOldRegistration = static_cast< DatabaseRegistration* >( pEntry->GetUserData() );
314*b1cdbd2cSJim Jagielski if ( !pOldRegistration || pOldRegistration->bReadOnly )
315*b1cdbd2cSJim Jagielski return 0L;
316*b1cdbd2cSJim Jagielski
317*b1cdbd2cSJim Jagielski String sOldName = pPathBox->GetEntryText(pEntry,0);
318*b1cdbd2cSJim Jagielski m_pCurEntry = pEntry;
319*b1cdbd2cSJim Jagielski openLinkDialog( sOldName, pOldRegistration->sLocation, pEntry );
320*b1cdbd2cSJim Jagielski m_pCurEntry = NULL;
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski return 1L;
323*b1cdbd2cSJim Jagielski }
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
326*b1cdbd2cSJim Jagielski
IMPL_LINK(DbRegistrationOptionsPage,HeaderSelect_Impl,HeaderBar *,pBar)327*b1cdbd2cSJim Jagielski IMPL_LINK( DbRegistrationOptionsPage, HeaderSelect_Impl, HeaderBar*, pBar )
328*b1cdbd2cSJim Jagielski {
329*b1cdbd2cSJim Jagielski if ( pBar && pBar->GetCurItemId() != ITEMID_TYPE )
330*b1cdbd2cSJim Jagielski return 0;
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski HeaderBarItemBits nBits = pHeaderBar->GetItemBits(ITEMID_TYPE);
333*b1cdbd2cSJim Jagielski sal_Bool bUp = ( ( nBits & HIB_UPARROW ) == HIB_UPARROW );
334*b1cdbd2cSJim Jagielski SvSortMode eMode = SortAscending;
335*b1cdbd2cSJim Jagielski
336*b1cdbd2cSJim Jagielski if ( bUp )
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski nBits &= ~HIB_UPARROW;
339*b1cdbd2cSJim Jagielski nBits |= HIB_DOWNARROW;
340*b1cdbd2cSJim Jagielski eMode = SortDescending;
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski else
343*b1cdbd2cSJim Jagielski {
344*b1cdbd2cSJim Jagielski nBits &= ~HIB_DOWNARROW;
345*b1cdbd2cSJim Jagielski nBits |= HIB_UPARROW;
346*b1cdbd2cSJim Jagielski }
347*b1cdbd2cSJim Jagielski pHeaderBar->SetItemBits( ITEMID_TYPE, nBits );
348*b1cdbd2cSJim Jagielski SvTreeList* pModel = pPathBox->GetModel();
349*b1cdbd2cSJim Jagielski pModel->SetSortMode( eMode );
350*b1cdbd2cSJim Jagielski pModel->Resort();
351*b1cdbd2cSJim Jagielski return 1;
352*b1cdbd2cSJim Jagielski }
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
355*b1cdbd2cSJim Jagielski
IMPL_LINK(DbRegistrationOptionsPage,HeaderEndDrag_Impl,HeaderBar *,pBar)356*b1cdbd2cSJim Jagielski IMPL_LINK( DbRegistrationOptionsPage, HeaderEndDrag_Impl, HeaderBar*, pBar )
357*b1cdbd2cSJim Jagielski {
358*b1cdbd2cSJim Jagielski if ( pBar && !pBar->GetCurItemId() )
359*b1cdbd2cSJim Jagielski return 0;
360*b1cdbd2cSJim Jagielski
361*b1cdbd2cSJim Jagielski if ( !pHeaderBar->IsItemMode() )
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski Size aSz;
364*b1cdbd2cSJim Jagielski sal_uInt16 nTabs = pHeaderBar->GetItemCount();
365*b1cdbd2cSJim Jagielski long nTmpSz = 0;
366*b1cdbd2cSJim Jagielski long nWidth = pHeaderBar->GetItemSize(ITEMID_TYPE);
367*b1cdbd2cSJim Jagielski long nBarWidth = pHeaderBar->GetSizePixel().Width();
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski if(nWidth < TAB_WIDTH_MIN)
370*b1cdbd2cSJim Jagielski pHeaderBar->SetItemSize( ITEMID_TYPE, TAB_WIDTH_MIN);
371*b1cdbd2cSJim Jagielski else if ( ( nBarWidth - nWidth ) < TAB_WIDTH_MIN )
372*b1cdbd2cSJim Jagielski pHeaderBar->SetItemSize( ITEMID_TYPE, nBarWidth - TAB_WIDTH_MIN );
373*b1cdbd2cSJim Jagielski
374*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 1; i <= nTabs; ++i )
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski long _nWidth = pHeaderBar->GetItemSize(i);
377*b1cdbd2cSJim Jagielski aSz.Width() = _nWidth + nTmpSz;
378*b1cdbd2cSJim Jagielski nTmpSz += _nWidth;
379*b1cdbd2cSJim Jagielski pPathBox->SetTab( i, PixelToLogic( aSz, MapMode(MAP_APPFONT) ).Width(), MAP_APPFONT );
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski }
382*b1cdbd2cSJim Jagielski return 1;
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
385*b1cdbd2cSJim Jagielski
IMPL_LINK(DbRegistrationOptionsPage,PathSelect_Impl,SvTabListBox *,EMPTYARG)386*b1cdbd2cSJim Jagielski IMPL_LINK( DbRegistrationOptionsPage, PathSelect_Impl, SvTabListBox *, EMPTYARG )
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = pPathBox->FirstSelected();
389*b1cdbd2cSJim Jagielski
390*b1cdbd2cSJim Jagielski bool bReadOnly = true;
391*b1cdbd2cSJim Jagielski if ( pEntry )
392*b1cdbd2cSJim Jagielski {
393*b1cdbd2cSJim Jagielski DatabaseRegistration* pRegistration = static_cast< DatabaseRegistration* >( pEntry->GetUserData() );
394*b1cdbd2cSJim Jagielski bReadOnly = pRegistration->bReadOnly;
395*b1cdbd2cSJim Jagielski }
396*b1cdbd2cSJim Jagielski
397*b1cdbd2cSJim Jagielski m_aEdit.Enable( !bReadOnly );
398*b1cdbd2cSJim Jagielski m_aDelete.Enable( !bReadOnly );
399*b1cdbd2cSJim Jagielski return 0;
400*b1cdbd2cSJim Jagielski }
401*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
insertNewEntry(const::rtl::OUString & _sName,const::rtl::OUString & _sLocation,const bool _bReadOnly)402*b1cdbd2cSJim Jagielski void DbRegistrationOptionsPage::insertNewEntry( const ::rtl::OUString& _sName,const ::rtl::OUString& _sLocation, const bool _bReadOnly )
403*b1cdbd2cSJim Jagielski {
404*b1cdbd2cSJim Jagielski String aStr( _sName );
405*b1cdbd2cSJim Jagielski aStr += '\t';
406*b1cdbd2cSJim Jagielski aStr += String(_sLocation);
407*b1cdbd2cSJim Jagielski
408*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = NULL;
409*b1cdbd2cSJim Jagielski if ( _bReadOnly )
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski sal_Bool bHighContrast = pPathBox->GetDisplayBackground().GetColor().IsDark();
412*b1cdbd2cSJim Jagielski Image aLocked( CUI_RES( bHighContrast ? RID_SVXBMP_LOCK_HC : RID_SVXBMP_LOCK ) );
413*b1cdbd2cSJim Jagielski pEntry = pPathBox->InsertEntry( aStr, aLocked, aLocked );
414*b1cdbd2cSJim Jagielski }
415*b1cdbd2cSJim Jagielski else
416*b1cdbd2cSJim Jagielski {
417*b1cdbd2cSJim Jagielski pEntry = pPathBox->InsertEntry( aStr );
418*b1cdbd2cSJim Jagielski }
419*b1cdbd2cSJim Jagielski
420*b1cdbd2cSJim Jagielski pEntry->SetUserData( new DatabaseRegistration( _sLocation, _bReadOnly ) );
421*b1cdbd2cSJim Jagielski }
422*b1cdbd2cSJim Jagielski
423*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
openLinkDialog(const String & _sOldName,const String & _sOldLocation,SvLBoxEntry * _pEntry)424*b1cdbd2cSJim Jagielski void DbRegistrationOptionsPage::openLinkDialog(const String& _sOldName,const String& _sOldLocation,SvLBoxEntry* _pEntry)
425*b1cdbd2cSJim Jagielski {
426*b1cdbd2cSJim Jagielski ODocumentLinkDialog aDlg(this,_pEntry == NULL);
427*b1cdbd2cSJim Jagielski
428*b1cdbd2cSJim Jagielski aDlg.set(_sOldName,_sOldLocation);
429*b1cdbd2cSJim Jagielski aDlg.setNameValidator(LINK( this, DbRegistrationOptionsPage, NameValidator ) );
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski if ( aDlg.Execute() == RET_OK )
432*b1cdbd2cSJim Jagielski {
433*b1cdbd2cSJim Jagielski String sNewName,sNewLocation;
434*b1cdbd2cSJim Jagielski aDlg.get(sNewName,sNewLocation);
435*b1cdbd2cSJim Jagielski if ( _pEntry == NULL || sNewName != _sOldName || sNewLocation != _sOldLocation )
436*b1cdbd2cSJim Jagielski {
437*b1cdbd2cSJim Jagielski if ( _pEntry )
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski delete static_cast< DatabaseRegistration* >( _pEntry->GetUserData() );
440*b1cdbd2cSJim Jagielski pPathBox->GetModel()->Remove( _pEntry );
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski insertNewEntry( sNewName, sNewLocation, false );
443*b1cdbd2cSJim Jagielski m_bModified = sal_True;
444*b1cdbd2cSJim Jagielski }
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
IMPL_LINK(DbRegistrationOptionsPage,NameValidator,String *,_pName)448*b1cdbd2cSJim Jagielski IMPL_LINK( DbRegistrationOptionsPage, NameValidator, String*, _pName )
449*b1cdbd2cSJim Jagielski {
450*b1cdbd2cSJim Jagielski if ( _pName )
451*b1cdbd2cSJim Jagielski {
452*b1cdbd2cSJim Jagielski sal_uLong nCount = pPathBox->GetEntryCount();
453*b1cdbd2cSJim Jagielski for ( sal_uLong i = 0; i < nCount; ++i )
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski SvLBoxEntry* pEntry = pPathBox->GetEntry(i);
456*b1cdbd2cSJim Jagielski if ( (!m_pCurEntry || m_pCurEntry != pEntry) && pPathBox->GetEntryText(pEntry,0) == *_pName )
457*b1cdbd2cSJim Jagielski return 0L;
458*b1cdbd2cSJim Jagielski }
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski return 1L;
461*b1cdbd2cSJim Jagielski }
462*b1cdbd2cSJim Jagielski //........................................................................
463*b1cdbd2cSJim Jagielski } // namespace svx
464*b1cdbd2cSJim Jagielski //........................................................................
465*b1cdbd2cSJim Jagielski
466*b1cdbd2cSJim Jagielski
467