12503e1a5SAriel Constenla-Haile /************************************************************** 22503e1a5SAriel Constenla-Haile * 32503e1a5SAriel Constenla-Haile * Licensed to the Apache Software Foundation (ASF) under one 42503e1a5SAriel Constenla-Haile * or more contributor license agreements. See the NOTICE file 52503e1a5SAriel Constenla-Haile * distributed with this work for additional information 62503e1a5SAriel Constenla-Haile * regarding copyright ownership. The ASF licenses this file 72503e1a5SAriel Constenla-Haile * to you under the Apache License, Version 2.0 (the 82503e1a5SAriel Constenla-Haile * "License"); you may not use this file except in compliance 92503e1a5SAriel Constenla-Haile * with the License. You may obtain a copy of the License at 102503e1a5SAriel Constenla-Haile * 112503e1a5SAriel Constenla-Haile * http://www.apache.org/licenses/LICENSE-2.0 122503e1a5SAriel Constenla-Haile * 132503e1a5SAriel Constenla-Haile * Unless required by applicable law or agreed to in writing, 142503e1a5SAriel Constenla-Haile * software distributed under the License is distributed on an 152503e1a5SAriel Constenla-Haile * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 162503e1a5SAriel Constenla-Haile * KIND, either express or implied. See the License for the 172503e1a5SAriel Constenla-Haile * specific language governing permissions and limitations 182503e1a5SAriel Constenla-Haile * under the License. 192503e1a5SAriel Constenla-Haile * 202503e1a5SAriel Constenla-Haile *************************************************************/ 212503e1a5SAriel Constenla-Haile 22*bfea5108SArmin Le Grand // MARKER(update_precomp.py): autogen include statement, do not remove 23*bfea5108SArmin Le Grand #include "precompiled_framework.hxx" 24*bfea5108SArmin Le Grand 252503e1a5SAriel Constenla-Haile #include <uielement/statusbarmerger.hxx> 262503e1a5SAriel Constenla-Haile 272503e1a5SAriel Constenla-Haile using rtl::OUString; 282503e1a5SAriel Constenla-Haile using com::sun::star::frame::XFrame; 292503e1a5SAriel Constenla-Haile using com::sun::star::uno::Reference; 302503e1a5SAriel Constenla-Haile using com::sun::star::beans::PropertyValue; 312503e1a5SAriel Constenla-Haile using com::sun::star::uno::Sequence; 322503e1a5SAriel Constenla-Haile 332503e1a5SAriel Constenla-Haile namespace framework 342503e1a5SAriel Constenla-Haile { 352503e1a5SAriel Constenla-Haile namespace { 362503e1a5SAriel Constenla-Haile 372503e1a5SAriel Constenla-Haile static const char MERGE_STATUSBAR_URL[] = "URL"; 382503e1a5SAriel Constenla-Haile static const char MERGE_STATUSBAR_TITLE[] = "Title"; 392503e1a5SAriel Constenla-Haile static const char MERGE_STATUSBAR_CONTEXT[] = "Context"; 402503e1a5SAriel Constenla-Haile static const char MERGE_STATUSBAR_ALIGN[] = "Alignment"; 412503e1a5SAriel Constenla-Haile static const char MERGE_STATUSBAR_AUTOSIZE[] = "AutoSize"; 422503e1a5SAriel Constenla-Haile static const char MERGE_STATUSBAR_OWNERDRAW[] = "OwnerDraw"; 432503e1a5SAriel Constenla-Haile static const char MERGE_STATUSBAR_WIDTH[] = "Width"; 442503e1a5SAriel Constenla-Haile 452503e1a5SAriel Constenla-Haile static const char STATUSBAR_ALIGN_LEFT[] = "left"; 462503e1a5SAriel Constenla-Haile static const char STATUSBAR_ALIGN_CENTER[] = "center"; 472503e1a5SAriel Constenla-Haile static const char STATUSBAR_ALIGN_RIGHT[] = "right"; 482503e1a5SAriel Constenla-Haile 492503e1a5SAriel Constenla-Haile static const char MERGECOMMAND_ADDAFTER[] = "AddAfter"; 502503e1a5SAriel Constenla-Haile static const char MERGECOMMAND_ADDBEFORE[] = "AddBefore"; 512503e1a5SAriel Constenla-Haile static const char MERGECOMMAND_REPLACE[] = "Replace"; 522503e1a5SAriel Constenla-Haile static const char MERGECOMMAND_REMOVE[] = "Remove"; 532503e1a5SAriel Constenla-Haile 542503e1a5SAriel Constenla-Haile static const char MERGEFALLBACK_ADDLAST[] = "AddLast"; 552503e1a5SAriel Constenla-Haile static const char MERGEFALLBACK_ADDFIRST[] = "AddFirst"; 562503e1a5SAriel Constenla-Haile static const char MERGEFALLBACK_IGNORE[] = "Ignore"; 572503e1a5SAriel Constenla-Haile 582503e1a5SAriel Constenla-Haile 592503e1a5SAriel Constenla-Haile static void lcl_ConvertSequenceToValues( 602503e1a5SAriel Constenla-Haile const Sequence< PropertyValue > &rSequence, 612503e1a5SAriel Constenla-Haile AddonStatusbarItem &rItem ) 622503e1a5SAriel Constenla-Haile { 632503e1a5SAriel Constenla-Haile OUString sAlignment; 642503e1a5SAriel Constenla-Haile sal_Bool bAutoSize = sal_False; 652503e1a5SAriel Constenla-Haile sal_Bool bOwnerDraw = sal_False; 662503e1a5SAriel Constenla-Haile 672503e1a5SAriel Constenla-Haile PropertyValue aPropVal; 682503e1a5SAriel Constenla-Haile for ( sal_Int32 i = 0; i < rSequence.getLength(); i++ ) 692503e1a5SAriel Constenla-Haile { 702503e1a5SAriel Constenla-Haile aPropVal = rSequence[i]; 712503e1a5SAriel Constenla-Haile if ( aPropVal.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGE_STATUSBAR_URL ) ) ) 722503e1a5SAriel Constenla-Haile aPropVal.Value >>= rItem.aCommandURL; 732503e1a5SAriel Constenla-Haile else if ( aPropVal.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGE_STATUSBAR_TITLE ) ) ) 742503e1a5SAriel Constenla-Haile aPropVal.Value >>= rItem.aLabel; 752503e1a5SAriel Constenla-Haile else if ( aPropVal.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGE_STATUSBAR_CONTEXT ) ) ) 762503e1a5SAriel Constenla-Haile aPropVal.Value >>= rItem.aContext; 772503e1a5SAriel Constenla-Haile else if ( aPropVal.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGE_STATUSBAR_ALIGN ) ) ) 782503e1a5SAriel Constenla-Haile aPropVal.Value >>= sAlignment; 792503e1a5SAriel Constenla-Haile else if ( aPropVal.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGE_STATUSBAR_AUTOSIZE ) ) ) 802503e1a5SAriel Constenla-Haile aPropVal.Value >>= bAutoSize; 812503e1a5SAriel Constenla-Haile else if ( aPropVal.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGE_STATUSBAR_OWNERDRAW ) ) ) 822503e1a5SAriel Constenla-Haile aPropVal.Value >>= bOwnerDraw; 832503e1a5SAriel Constenla-Haile else if ( aPropVal.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGE_STATUSBAR_WIDTH ) ) ) 842503e1a5SAriel Constenla-Haile { 852503e1a5SAriel Constenla-Haile sal_Int32 aWidth = 0; 862503e1a5SAriel Constenla-Haile aPropVal.Value >>= aWidth; 872503e1a5SAriel Constenla-Haile rItem.nWidth = sal_uInt16( aWidth ); 882503e1a5SAriel Constenla-Haile } 892503e1a5SAriel Constenla-Haile } 902503e1a5SAriel Constenla-Haile 912503e1a5SAriel Constenla-Haile sal_uInt16 nItemBits(0); 922503e1a5SAriel Constenla-Haile if ( bAutoSize ) 932503e1a5SAriel Constenla-Haile nItemBits |= SIB_AUTOSIZE; 942503e1a5SAriel Constenla-Haile if ( bOwnerDraw ) 952503e1a5SAriel Constenla-Haile nItemBits |= SIB_USERDRAW; 962503e1a5SAriel Constenla-Haile if ( sAlignment.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( STATUSBAR_ALIGN_CENTER ))) 972503e1a5SAriel Constenla-Haile nItemBits |= SIB_CENTER; 982503e1a5SAriel Constenla-Haile else if ( sAlignment.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( STATUSBAR_ALIGN_RIGHT ))) 992503e1a5SAriel Constenla-Haile nItemBits |= SIB_RIGHT; 1002503e1a5SAriel Constenla-Haile else 1012503e1a5SAriel Constenla-Haile // if unset, defaults to left alignment 1022503e1a5SAriel Constenla-Haile nItemBits |= SIB_LEFT; 1032503e1a5SAriel Constenla-Haile rItem.nItemBits = nItemBits; 1042503e1a5SAriel Constenla-Haile } 1052503e1a5SAriel Constenla-Haile 1062503e1a5SAriel Constenla-Haile static void lcl_CreateStatusbarItem( StatusBar* pStatusbar, 1072503e1a5SAriel Constenla-Haile sal_uInt16 nPos, 1082503e1a5SAriel Constenla-Haile sal_uInt16 nItemId, 1092503e1a5SAriel Constenla-Haile const AddonStatusbarItem& rAddonItem ) 1102503e1a5SAriel Constenla-Haile { 1112503e1a5SAriel Constenla-Haile pStatusbar->InsertItem( nItemId, 1122503e1a5SAriel Constenla-Haile rAddonItem.nWidth, 1132503e1a5SAriel Constenla-Haile rAddonItem.nItemBits, 1142503e1a5SAriel Constenla-Haile STATUSBAR_OFFSET, 1152503e1a5SAriel Constenla-Haile nPos ); 1162503e1a5SAriel Constenla-Haile pStatusbar->SetItemCommand( nItemId, rAddonItem.aCommandURL ); 1172503e1a5SAriel Constenla-Haile pStatusbar->SetQuickHelpText( nItemId, rAddonItem.aLabel ); 1182503e1a5SAriel Constenla-Haile pStatusbar->SetAccessibleName( nItemId, rAddonItem.aLabel ); 1192503e1a5SAriel Constenla-Haile 1202503e1a5SAriel Constenla-Haile // add-on specific data 1212503e1a5SAriel Constenla-Haile AddonStatusbarItemData *pUserData = new AddonStatusbarItemData; 1222503e1a5SAriel Constenla-Haile pUserData->aLabel = rAddonItem.aLabel; 1232503e1a5SAriel Constenla-Haile pUserData->nItemBits = rAddonItem.nItemBits; 1242503e1a5SAriel Constenla-Haile pStatusbar->SetItemData( nItemId, pUserData ); 1252503e1a5SAriel Constenla-Haile } 1262503e1a5SAriel Constenla-Haile 1272503e1a5SAriel Constenla-Haile static bool lcl_MergeItems( StatusBar* pStatusbar, 1282503e1a5SAriel Constenla-Haile sal_uInt16 nPos, 1292503e1a5SAriel Constenla-Haile sal_uInt16 nModIndex, 1302503e1a5SAriel Constenla-Haile sal_uInt16& rItemId, 1312503e1a5SAriel Constenla-Haile const ::rtl::OUString& rModuleIdentifier, 1322503e1a5SAriel Constenla-Haile const AddonStatusbarItemContainer& rAddonItems ) 1332503e1a5SAriel Constenla-Haile { 134*bfea5108SArmin Le Grand OSL_ENSURE(rAddonItems.size() <= 0xffff, "Caution: Not all items get handled (!)"); 135*bfea5108SArmin Le Grand const sal_uInt16 nSize( static_cast< sal_uInt16 >(rAddonItems.size()) ); 1362503e1a5SAriel Constenla-Haile for ( sal_Int32 i = 0; i < nSize; i++ ) 1372503e1a5SAriel Constenla-Haile { 1382503e1a5SAriel Constenla-Haile const AddonStatusbarItem& rItem = rAddonItems[i]; 1392503e1a5SAriel Constenla-Haile if ( !StatusbarMerger::IsCorrectContext( rItem.aContext, rModuleIdentifier ) ) 1402503e1a5SAriel Constenla-Haile continue; 1412503e1a5SAriel Constenla-Haile 1422503e1a5SAriel Constenla-Haile sal_uInt16 nInsPos = nPos + nModIndex + i; 1432503e1a5SAriel Constenla-Haile if ( nInsPos > pStatusbar->GetItemCount() ) 1442503e1a5SAriel Constenla-Haile nInsPos = STATUSBAR_APPEND; 1452503e1a5SAriel Constenla-Haile 1462503e1a5SAriel Constenla-Haile lcl_CreateStatusbarItem( pStatusbar, nInsPos, rItemId, rItem ); 1472503e1a5SAriel Constenla-Haile ++rItemId; 1482503e1a5SAriel Constenla-Haile } 1492503e1a5SAriel Constenla-Haile 1502503e1a5SAriel Constenla-Haile return true; 1512503e1a5SAriel Constenla-Haile } 1522503e1a5SAriel Constenla-Haile 1532503e1a5SAriel Constenla-Haile static bool lcl_ReplaceItem( StatusBar* pStatusbar, 1542503e1a5SAriel Constenla-Haile sal_uInt16 nPos, 1552503e1a5SAriel Constenla-Haile sal_uInt16& rItemId, 1562503e1a5SAriel Constenla-Haile const ::rtl::OUString& rModuleIdentifier, 1572503e1a5SAriel Constenla-Haile const AddonStatusbarItemContainer& rAddonToolbarItems ) 1582503e1a5SAriel Constenla-Haile { 1592503e1a5SAriel Constenla-Haile pStatusbar->RemoveItem( pStatusbar->GetItemId( nPos ) ); 1602503e1a5SAriel Constenla-Haile return lcl_MergeItems( pStatusbar, nPos, 0, rItemId, rModuleIdentifier, rAddonToolbarItems ); 1612503e1a5SAriel Constenla-Haile } 1622503e1a5SAriel Constenla-Haile 1632503e1a5SAriel Constenla-Haile static bool lcl_RemoveItems( StatusBar* pStatusbar, 1642503e1a5SAriel Constenla-Haile sal_uInt16 nPos, 1652503e1a5SAriel Constenla-Haile const ::rtl::OUString& rMergeCommandParameter ) 1662503e1a5SAriel Constenla-Haile { 1672503e1a5SAriel Constenla-Haile sal_Int32 nCount = rMergeCommandParameter.toInt32(); 1682503e1a5SAriel Constenla-Haile if ( nCount > 0 ) 1692503e1a5SAriel Constenla-Haile { 1702503e1a5SAriel Constenla-Haile for ( sal_Int32 i = 0; i < nCount; i++ ) 1712503e1a5SAriel Constenla-Haile { 1722503e1a5SAriel Constenla-Haile if ( nPos < pStatusbar->GetItemCount() ) 1732503e1a5SAriel Constenla-Haile pStatusbar->RemoveItem( nPos ); 1742503e1a5SAriel Constenla-Haile } 1752503e1a5SAriel Constenla-Haile } 1762503e1a5SAriel Constenla-Haile return true; 1772503e1a5SAriel Constenla-Haile } 1782503e1a5SAriel Constenla-Haile 1792503e1a5SAriel Constenla-Haile /* 1802503e1a5SAriel Constenla-Haile static ::cppu::OWeakObject* CreateController( 1812503e1a5SAriel Constenla-Haile ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMGR, 1822503e1a5SAriel Constenla-Haile ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xFrame, 1832503e1a5SAriel Constenla-Haile StatusBar* pStatusbar, 1842503e1a5SAriel Constenla-Haile const ::rtl::OUString& rCommandURL, 1852503e1a5SAriel Constenla-Haile sal_uInt16 nId, 1862503e1a5SAriel Constenla-Haile sal_uInt16 nWidth, 1872503e1a5SAriel Constenla-Haile const ::rtl::OUString& rControlType ); 1882503e1a5SAriel Constenla-Haile 1892503e1a5SAriel Constenla-Haile */ 1902503e1a5SAriel Constenla-Haile } 1912503e1a5SAriel Constenla-Haile 1922503e1a5SAriel Constenla-Haile bool StatusbarMerger::IsCorrectContext( 1932503e1a5SAriel Constenla-Haile const OUString& rContext, 1942503e1a5SAriel Constenla-Haile const OUString& rModuleIdentifier ) 1952503e1a5SAriel Constenla-Haile { 1962503e1a5SAriel Constenla-Haile return (( rContext.getLength() == 0 ) || ( rContext.indexOf( rModuleIdentifier ) >= 0 )); 1972503e1a5SAriel Constenla-Haile } 1982503e1a5SAriel Constenla-Haile 1992503e1a5SAriel Constenla-Haile bool StatusbarMerger::ConvertSeqSeqToVector( 2002503e1a5SAriel Constenla-Haile const Sequence< Sequence< PropertyValue > > &rSequence, 2012503e1a5SAriel Constenla-Haile AddonStatusbarItemContainer& rContainer ) 2022503e1a5SAriel Constenla-Haile { 2032503e1a5SAriel Constenla-Haile for ( sal_Int32 i = 0; i < rSequence.getLength(); i++ ) 2042503e1a5SAriel Constenla-Haile { 2052503e1a5SAriel Constenla-Haile AddonStatusbarItem aStatusBarItem; 2062503e1a5SAriel Constenla-Haile lcl_ConvertSequenceToValues( rSequence[i], aStatusBarItem ); 2072503e1a5SAriel Constenla-Haile rContainer.push_back( aStatusBarItem ); 2082503e1a5SAriel Constenla-Haile } 2092503e1a5SAriel Constenla-Haile 2102503e1a5SAriel Constenla-Haile return true; 2112503e1a5SAriel Constenla-Haile } 2122503e1a5SAriel Constenla-Haile 2132503e1a5SAriel Constenla-Haile sal_uInt16 StatusbarMerger::FindReferencePos( 2142503e1a5SAriel Constenla-Haile StatusBar* pStatusbar, 2152503e1a5SAriel Constenla-Haile const OUString& rReferencePoint ) 2162503e1a5SAriel Constenla-Haile { 2172503e1a5SAriel Constenla-Haile for ( sal_uInt16 nPos = 0; nPos < pStatusbar->GetItemCount(); nPos++ ) 2182503e1a5SAriel Constenla-Haile { 2192503e1a5SAriel Constenla-Haile const ::rtl::OUString rCmd = pStatusbar->GetItemCommand( pStatusbar->GetItemId( nPos ) ); 2202503e1a5SAriel Constenla-Haile if ( rReferencePoint == rCmd ) 2212503e1a5SAriel Constenla-Haile return nPos; 2222503e1a5SAriel Constenla-Haile } 2232503e1a5SAriel Constenla-Haile 2242503e1a5SAriel Constenla-Haile return STATUSBAR_ITEM_NOTFOUND; 2252503e1a5SAriel Constenla-Haile } 2262503e1a5SAriel Constenla-Haile 2272503e1a5SAriel Constenla-Haile bool StatusbarMerger::ProcessMergeOperation( 2282503e1a5SAriel Constenla-Haile StatusBar* pStatusbar, 2292503e1a5SAriel Constenla-Haile sal_uInt16 nPos, 2302503e1a5SAriel Constenla-Haile sal_uInt16& rItemId, 2312503e1a5SAriel Constenla-Haile const ::rtl::OUString& rModuleIdentifier, 2322503e1a5SAriel Constenla-Haile const ::rtl::OUString& rMergeCommand, 2332503e1a5SAriel Constenla-Haile const ::rtl::OUString& rMergeCommandParameter, 2342503e1a5SAriel Constenla-Haile const AddonStatusbarItemContainer& rItems ) 2352503e1a5SAriel Constenla-Haile { 2362503e1a5SAriel Constenla-Haile if ( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_ADDAFTER ) ) ) 2372503e1a5SAriel Constenla-Haile return lcl_MergeItems( pStatusbar, nPos, 1, rItemId, rModuleIdentifier, rItems ); 2382503e1a5SAriel Constenla-Haile else if ( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_ADDBEFORE ) ) ) 2392503e1a5SAriel Constenla-Haile return lcl_MergeItems( pStatusbar, nPos, 0, rItemId, rModuleIdentifier, rItems ); 2402503e1a5SAriel Constenla-Haile else if ( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_REPLACE ) ) ) 2412503e1a5SAriel Constenla-Haile return lcl_ReplaceItem( pStatusbar, nPos, rItemId, rModuleIdentifier, rItems ); 2422503e1a5SAriel Constenla-Haile else if ( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_REMOVE ) ) ) 2432503e1a5SAriel Constenla-Haile return lcl_RemoveItems( pStatusbar, nPos, rMergeCommandParameter ); 2442503e1a5SAriel Constenla-Haile 2452503e1a5SAriel Constenla-Haile return false; 2462503e1a5SAriel Constenla-Haile } 2472503e1a5SAriel Constenla-Haile 2482503e1a5SAriel Constenla-Haile bool StatusbarMerger::ProcessMergeFallback( 2492503e1a5SAriel Constenla-Haile StatusBar* pStatusbar, 2502503e1a5SAriel Constenla-Haile sal_uInt16 /*nPos*/, 2512503e1a5SAriel Constenla-Haile sal_uInt16& rItemId, 2522503e1a5SAriel Constenla-Haile const ::rtl::OUString& rModuleIdentifier, 2532503e1a5SAriel Constenla-Haile const ::rtl::OUString& rMergeCommand, 2542503e1a5SAriel Constenla-Haile const ::rtl::OUString& rMergeFallback, 2552503e1a5SAriel Constenla-Haile const AddonStatusbarItemContainer& rItems ) 2562503e1a5SAriel Constenla-Haile { 2572503e1a5SAriel Constenla-Haile // fallback IGNORE or REPLACE/REMOVE item not found 2582503e1a5SAriel Constenla-Haile if (( rMergeFallback.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGEFALLBACK_IGNORE ))) || 2592503e1a5SAriel Constenla-Haile ( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_REPLACE ))) || 2602503e1a5SAriel Constenla-Haile ( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_REMOVE ))) ) 2612503e1a5SAriel Constenla-Haile { 2622503e1a5SAriel Constenla-Haile return true; 2632503e1a5SAriel Constenla-Haile } 2642503e1a5SAriel Constenla-Haile else if (( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_ADDBEFORE ))) || 2652503e1a5SAriel Constenla-Haile ( rMergeCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGECOMMAND_ADDAFTER ))) ) 2662503e1a5SAriel Constenla-Haile { 2672503e1a5SAriel Constenla-Haile if ( rMergeFallback.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGEFALLBACK_ADDFIRST ))) 2682503e1a5SAriel Constenla-Haile return lcl_MergeItems( pStatusbar, 0, 0, rItemId, rModuleIdentifier, rItems ); 2692503e1a5SAriel Constenla-Haile else if ( rMergeFallback.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( MERGEFALLBACK_ADDLAST ))) 2702503e1a5SAriel Constenla-Haile return lcl_MergeItems( pStatusbar, STATUSBAR_APPEND, 0, rItemId, rModuleIdentifier, rItems ); 2712503e1a5SAriel Constenla-Haile } 2722503e1a5SAriel Constenla-Haile 2732503e1a5SAriel Constenla-Haile return false; 2742503e1a5SAriel Constenla-Haile } 2752503e1a5SAriel Constenla-Haile 2762503e1a5SAriel Constenla-Haile 2772503e1a5SAriel Constenla-Haile } 278