INTEGRATION: CWS odbmacros2 (1.16.44); FILE MERGED

2008/02/05 07:31:15 fs 1.16.44.4: #i10000#
2008/02/04 13:08:50 fs 1.16.44.3: RESYNC: (1.16-1.17); FILE MERGED
2008/01/15 09:52:42 fs 1.16.44.2: some re-factoring of OWizardMachine, RoadmapWizard and derived classes, to prepare the migration UI for #i49133#
2008/01/15 07:18:39 fs 1.16.44.1: #i67987# use a roadmap in this wizard
This commit is contained in:
Kurt Zenker 2008-03-06 17:35:51 +00:00
parent d3d04fb38f
commit 32322d9210

View file

@ -4,9 +4,9 @@
*
* $RCSfile: abspilot.cxx,v $
*
* $Revision: 1.17 $
* $Revision: 1.18 $
*
* last change: $Author: ihi $ $Date: 2008-01-14 14:33:11 $
* last change: $Author: kz $ $Date: 2008-03-06 18:35:51 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@ -90,8 +90,10 @@ namespace abp
#define STATE_MANUAL_FIELD_MAPPING 3
#define STATE_FINAL_CONFIRM 4
#define PATH_DYN_TABLE_SELECTION 1 // path where we dynamically decide whether we need table selection
#define PATH_LDAP 2
#define PATH_COMPLETE 1
#define PATH_NO_SETTINGS 2
#define PATH_NO_FIELDS 3
#define PATH_NO_SETTINGS_NO_FIELDS 4
using namespace ::svt;
using namespace ::com::sun::star::uno;
@ -103,11 +105,7 @@ namespace abp
//---------------------------------------------------------------------
OAddessBookSourcePilot::OAddessBookSourcePilot(Window* _pParent, const Reference< XMultiServiceFactory >& _rxORB)
:OAddessBookSourcePilot_Base( _pParent, ModuleRes( RID_DLG_ADDRESSBOOKSOURCEPILOT ),
#if defined( ABP_USE_ROADMAP )
WZB_HELP | WZB_FINISH | WZB_CANCEL | WZB_NEXT | WZB_PREVIOUS, ResId( STR_ROADMAP_TITLE ) )
#else
WZB_HELP | WZB_FINISH | WZB_CANCEL | WZB_NEXT | WZB_PREVIOUS )
#endif
,m_xORB(_rxORB)
,m_aNewDataSource(_rxORB)
,m_eNewDataSourceType( AST_INVALID )
@ -116,9 +114,7 @@ namespace abp
ShowButtonFixedLine(sal_True);
#if defined( ABP_USE_ROADMAP )
// we have two paths: One with, and one without table selection
declarePath( PATH_DYN_TABLE_SELECTION,
declarePath( PATH_COMPLETE,
STATE_SELECT_ABTYPE,
STATE_INVOKE_ADMIN_DIALOG,
STATE_TABLE_SELECTION,
@ -126,24 +122,26 @@ namespace abp
STATE_FINAL_CONFIRM,
WZS_INVALID_STATE
);
declarePath( PATH_LDAP,
declarePath( PATH_NO_SETTINGS,
STATE_SELECT_ABTYPE,
STATE_INVOKE_ADMIN_DIALOG,
STATE_TABLE_SELECTION,
STATE_MANUAL_FIELD_MAPPING,
STATE_FINAL_CONFIRM,
WZS_INVALID_STATE
);
declarePath( PATH_NO_FIELDS,
STATE_SELECT_ABTYPE,
STATE_INVOKE_ADMIN_DIALOG,
STATE_TABLE_SELECTION,
STATE_FINAL_CONFIRM,
WZS_INVALID_STATE
);
declarePath( PATH_NO_SETTINGS_NO_FIELDS,
STATE_SELECT_ABTYPE,
STATE_TABLE_SELECTION,
STATE_FINAL_CONFIRM,
WZS_INVALID_STATE
);
// Note that in theory, we could make only one path out of it. But, to determine whether we
// need a table selection page, we need to establish the connection. This is done immediately
// before the pre-table-selection page is left.
// As a result, if we would have only one path, then the user could click the "Table selection"
// in the roadmap, and it could happen that we only at this very moment that we do *not need*
// this page at all - which would look pretty strange to the user.
// unless told otherwise, don't allow traveling to the last page
enableState( STATE_FINAL_CONFIRM, false );
#else
enableHeader( Bitmap( ModuleRes( BMP_HEADERIMAGE ) ) );
#endif
m_pPrevPage->SetHelpId(HID_ABSPILOT_PREVIOUS);
m_pNextPage->SetHelpId(HID_ABSPILOT_NEXT);
@ -164,16 +162,18 @@ namespace abp
m_aSettings.eType = AST_OTHER;
#endif
m_aSettings.sDataSourceName = String(ModuleRes(RID_STR_DEFAULT_NAME));
m_aSettings.bRegisterDataSource = sal_False;
m_aSettings.bRegisterDataSource = false;
m_aSettings.bIgnoreNoTable = false;
defaultButton(WZB_NEXT);
enableButtons(WZB_FINISH, sal_False);
ActivatePage();
typeSelectionChanged( m_aSettings.eType );
}
#if defined( ABP_USE_ROADMAP )
//---------------------------------------------------------------------
String OAddessBookSourcePilot::getStateDisplayName( WizardState _nState )
String OAddessBookSourcePilot::getStateDisplayName( WizardState _nState ) const
{
USHORT nResId = 0;
switch ( _nState )
@ -190,12 +190,11 @@ namespace abp
if ( nResId )
{
svt::OLocalResourceAccess aAccess( ModuleRes( RID_DLG_ADDRESSBOOKSOURCEPILOT ), RSC_MODALDIALOG );
sDisplayName = String( ResId( nResId ) );
sDisplayName = String( ModuleRes( nResId ) );
}
return sDisplayName;
}
#endif
//---------------------------------------------------------------------
void OAddessBookSourcePilot::implCommitAll()
@ -269,11 +268,9 @@ namespace abp
{
switch ( _nState )
{
#if defined( ABP_USE_ROADMAP )
case STATE_SELECT_ABTYPE:
implUpdateTypeDependentStates( static_cast< TypeSelectionPage* >( getPage( STATE_SELECT_ABTYPE ) )->getSelectedType() );
implUpdateRoadmap( static_cast< TypeSelectionPage* >( GetPage( STATE_SELECT_ABTYPE ) )->getSelectedType() );
break;
#endif
case STATE_FINAL_CONFIRM:
if ( !needManualFieldMapping( ) )
@ -288,7 +285,6 @@ namespace abp
OAddessBookSourcePilot_Base::enterState(_nState);
}
#if defined( ABP_USE_ROADMAP )
//---------------------------------------------------------------------
sal_Bool OAddessBookSourcePilot::prepareLeaveCurrentState( CommitPageReason _eReason )
{
@ -298,6 +294,8 @@ namespace abp
if ( _eReason == eTravelBackward )
return sal_True;
sal_Bool bAllow = sal_True;
switch ( getCurrentState() )
{
case STATE_SELECT_ABTYPE:
@ -309,40 +307,28 @@ namespace abp
case STATE_INVOKE_ADMIN_DIALOG:
if ( !connectToDataSource( sal_False ) )
{
// connecting did not succeed -> do not allow proceeding, and do not
// allow the final page
enableState( STATE_FINAL_CONFIRM, false );
return sal_False;
}
enableState( STATE_FINAL_CONFIRM, true );
if ( m_aSettings.eType == AST_LDAP )
// connecting did not succeed -> do not allow proceeding
bAllow = sal_False;
break;
}
// ........................................................
// now that we connected to the data source, check whether we need the "table selection" page
const StringBag& aTables = m_aNewDataSource.getTableNames();
enableState( STATE_TABLE_SELECTION, aTables.size() > 1 );
bool bNeedFieldMapping = needManualFieldMapping( m_aSettings.eType );
if ( aTables.size() == 0 )
if ( aTables.empty() )
{
if ( _eReason == eValidateNoUI )
// cannot ask the user
return sal_False;
QueryBox aQuery( this, ModuleRes( RID_QRY_NOTABLES ) );
if ( RET_YES == aQuery.Execute() )
{ // the user chose to use this data source, though there are no tables
bNeedFieldMapping = false;
if ( ( _eReason == eValidateNoUI )
|| ( RET_YES != QueryBox( this, ModuleRes( RID_QRY_NOTABLES ) ).Execute() )
)
{
// cannot ask the user, or the user chose to use this data source, though there are no tables
bAllow = sal_False;
break;
}
else
return sal_False;
}
enableState( STATE_MANUAL_FIELD_MAPPING, bNeedFieldMapping );
// from now on, we're definately on the "dynamic table selection" path
activatePath( PATH_DYN_TABLE_SELECTION, true );
m_aSettings.bIgnoreNoTable = true;
}
if ( aTables.size() == 1 )
// remember the one and only table we have
@ -351,9 +337,9 @@ namespace abp
break;
}
return sal_True;
implUpdateRoadmap( m_aSettings.eType );
return bAllow;
}
#endif
//---------------------------------------------------------------------
void OAddessBookSourcePilot::implDefaultTableName()
@ -493,108 +479,58 @@ namespace abp
}
}
#if defined( ABP_USE_ROADMAP )
//---------------------------------------------------------------------
void OAddessBookSourcePilot::implUpdateTypeDependentStates( AddressSourceType _eType )
void OAddessBookSourcePilot::implUpdateRoadmap( AddressSourceType _eType )
{
enableState( STATE_INVOKE_ADMIN_DIALOG, needAdminInvokationPage( _eType ) );
enableState( STATE_MANUAL_FIELD_MAPPING, needManualFieldMapping( _eType ) );
bool bSettingsPage = needAdminInvokationPage( _eType );
bool bTablesPage = needTableSelection( _eType );
bool bFieldsPage = needManualFieldMapping( _eType );
bool bConnected = m_aNewDataSource.isConnected();
bool bCanSkipTables =
( m_aNewDataSource.hasTable( m_aSettings.sSelectedTable )
|| m_aSettings.bIgnoreNoTable
);
enableState( STATE_INVOKE_ADMIN_DIALOG, bSettingsPage );
enableState( STATE_TABLE_SELECTION,
bTablesPage && ( bConnected ? !bCanSkipTables : !bSettingsPage )
// if we do not need a settings page, we connect upon "Next" on the first page
);
enableState( STATE_MANUAL_FIELD_MAPPING,
bFieldsPage && bConnected && m_aNewDataSource.hasTable( m_aSettings.sSelectedTable )
);
enableState( STATE_FINAL_CONFIRM,
bConnected && bCanSkipTables
);
}
#endif
//---------------------------------------------------------------------
void OAddessBookSourcePilot::typeSelectionChanged( AddressSourceType /*_eType*/ )
void OAddessBookSourcePilot::typeSelectionChanged( AddressSourceType _eType )
{
#if defined( ABP_USE_ROADMAP )
implUpdateTypeDependentStates( _eType );
enableState( STATE_FINAL_CONFIRM, false );
// for LDAP, there is no "table selection" page
if ( _eType == AST_LDAP )
activatePath( PATH_LDAP, true );
PathId nCurrentPathID( PATH_COMPLETE );
bool bSettingsPage = needAdminInvokationPage( _eType );
bool bFieldsPage = needManualFieldMapping( _eType );
if ( !bSettingsPage )
if ( !bFieldsPage )
nCurrentPathID = PATH_NO_SETTINGS_NO_FIELDS;
else
nCurrentPathID = PATH_NO_SETTINGS;
else
activatePath( PATH_DYN_TABLE_SELECTION, false );
#endif
if ( !bFieldsPage )
nCurrentPathID = PATH_NO_FIELDS;
else
nCurrentPathID = PATH_COMPLETE;
activatePath( nCurrentPathID, true );
m_aNewDataSource.disconnect();
m_aSettings.bIgnoreNoTable = false;
implUpdateRoadmap( _eType );
}
#if !defined( ABP_USE_ROADMAP )
//---------------------------------------------------------------------
WizardTypes::WizardState OAddessBookSourcePilot::determineNextState(WizardState _nCurrentState)
{
switch (_nCurrentState)
{
case STATE_SELECT_ABTYPE:
if ( needAdminInvokationPage() )
{
// ........................................................
// create the new data source
implCreateDataSource( );
return STATE_INVOKE_ADMIN_DIALOG;
}
// _NO_ break !!!
case STATE_INVOKE_ADMIN_DIALOG:
{
// determining the next state here is somewhat more complex: it depends on the type selected,
// and on the number of tables in the data source specified by the user
// ........................................................
// create the new data source
implCreateDataSource( );
// ........................................................
// if we're here, we have all settings necessary for connecting to the data source
if ( !connectToDataSource( sal_False ) )
// connecting did not succeed -> do not allow traveling (indicated by returning WZS_INVALID_STATE)
return WZS_INVALID_STATE;
// ........................................................
// get the tables of the connection
const StringBag& aTables = m_aNewDataSource.getTableNames();
if ( aTables.size() > 1 )
// in the next step, we need to determine the primary address table
return STATE_TABLE_SELECTION;
// ........................................................
// do we have any tables ?
if ( 0 == aTables.size() )
{ // ... no
QueryBox aQuery( this, ModuleRes( RID_QRY_NOTABLES ) );
if ( RET_YES == aQuery.Execute() )
{ // but the user chose to use this data source, anyway
// -> go to the final page (no field mapping possible at all ...)
return STATE_FINAL_CONFIRM;
}
// not allowed to leave the page
return WZS_INVALID_STATE;
}
// remember the one and only table we have
m_aSettings.sSelectedTable = *aTables.begin();
}
// _NO_ break !!!
case STATE_TABLE_SELECTION:
// ........................................................
// do we need a field mapping provided by the user?
if ( needManualFieldMapping( ) )
return STATE_MANUAL_FIELD_MAPPING;
// ........................................................
// we're nearly done ...
return STATE_FINAL_CONFIRM;
case STATE_MANUAL_FIELD_MAPPING:
return STATE_FINAL_CONFIRM;
}
return WZS_INVALID_STATE;
}
#endif
//.........................................................................
} // namespace abp
//.........................................................................