xref: /aoo4110/main/cui/source/options/dbregister.cxx (revision b1cdbd2c)
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