1*2a97ec55SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*2a97ec55SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*2a97ec55SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*2a97ec55SAndrew Rist * distributed with this work for additional information 6*2a97ec55SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*2a97ec55SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*2a97ec55SAndrew Rist * "License"); you may not use this file except in compliance 9*2a97ec55SAndrew Rist * with the License. You may obtain a copy of the License at 10*2a97ec55SAndrew Rist * 11*2a97ec55SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*2a97ec55SAndrew Rist * 13*2a97ec55SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*2a97ec55SAndrew Rist * software distributed under the License is distributed on an 15*2a97ec55SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*2a97ec55SAndrew Rist * KIND, either express or implied. See the License for the 17*2a97ec55SAndrew Rist * specific language governing permissions and limitations 18*2a97ec55SAndrew Rist * under the License. 19*2a97ec55SAndrew Rist * 20*2a97ec55SAndrew Rist *************************************************************/ 21*2a97ec55SAndrew Rist 22*2a97ec55SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_extensions.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 29cdf0e10cSrcweir #include <com/sun/star/awt/PosSize.hpp> 30cdf0e10cSrcweir #include <com/sun/star/sdbc/XRowSet.hpp> 31cdf0e10cSrcweir #include <com/sun/star/sdb/XColumn.hpp> 32cdf0e10cSrcweir #include <com/sun/star/sdb/CommandType.hpp> 33cdf0e10cSrcweir #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> 34cdf0e10cSrcweir #include <com/sun/star/form/ListSourceType.hpp> 35cdf0e10cSrcweir #include <com/sun/star/awt/XWindow.hpp> 36cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx> 37cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx> // helper for implementations 38cdf0e10cSrcweir #include "general.hxx" 39cdf0e10cSrcweir #include "sections.hrc" 40cdf0e10cSrcweir #include "bibresid.hxx" 41cdf0e10cSrcweir #include "datman.hxx" 42cdf0e10cSrcweir #include "bibconfig.hxx" 43cdf0e10cSrcweir #include "bibprop.hrc" 44cdf0e10cSrcweir #include "bib.hrc" 45cdf0e10cSrcweir #include "bibmod.hxx" 46cdf0e10cSrcweir #include "bibtools.hxx" 47cdf0e10cSrcweir #include "bibliography.hrc" 48cdf0e10cSrcweir #include <tools/debug.hxx> 49cdf0e10cSrcweir #include <vcl/mnemonic.hxx> 50cdf0e10cSrcweir #include <vcl/svapp.hxx> 51cdf0e10cSrcweir #include <vcl/i18nhelp.hxx> 52cdf0e10cSrcweir #include <vcl/mnemonic.hxx> 53cdf0e10cSrcweir #include <algorithm> 54cdf0e10cSrcweir #include <functional> 55cdf0e10cSrcweir #include <vector> 56cdf0e10cSrcweir #include <tools/urlobj.hxx> 57cdf0e10cSrcweir 58cdf0e10cSrcweir using namespace ::com::sun::star; 59cdf0e10cSrcweir using namespace ::com::sun::star::uno; 60cdf0e10cSrcweir using namespace ::com::sun::star::form; 61cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 62cdf0e10cSrcweir using namespace ::rtl; 63cdf0e10cSrcweir 64cdf0e10cSrcweir #define C2U(cChar) OUString::createFromAscii(cChar) 65cdf0e10cSrcweir #define C2S(cChar) String::CreateFromAscii(cChar) 66cdf0e10cSrcweir #define DISTANCE_CONTROL_TO_FIXEDTEXT 5 67cdf0e10cSrcweir 68cdf0e10cSrcweir ::Point lcl_MovePoint(const FixedText& rFixedText) 69cdf0e10cSrcweir { 70cdf0e10cSrcweir ::Point aRet(rFixedText.GetPosPixel()); 71cdf0e10cSrcweir aRet.X() += rFixedText.GetSizePixel().Width(); 72cdf0e10cSrcweir aRet.X() += DISTANCE_CONTROL_TO_FIXEDTEXT; 73cdf0e10cSrcweir return aRet; 74cdf0e10cSrcweir } 75cdf0e10cSrcweir 76cdf0e10cSrcweir //----------------------------------------------------------------------------- 77cdf0e10cSrcweir OUString lcl_GetColumnName( const Mapping* pMapping, sal_uInt16 nIndexPos ) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir BibConfig* pBibConfig = BibModul::GetConfig(); 80cdf0e10cSrcweir OUString sRet = pBibConfig->GetDefColumnName(nIndexPos); 81cdf0e10cSrcweir if(pMapping) 82cdf0e10cSrcweir for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++) 83cdf0e10cSrcweir { 84cdf0e10cSrcweir if(pMapping->aColumnPairs[i].sLogicalColumnName == sRet) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir sRet = pMapping->aColumnPairs[i].sRealColumnName; 87cdf0e10cSrcweir break; 88cdf0e10cSrcweir } 89cdf0e10cSrcweir } 90cdf0e10cSrcweir return sRet; 91cdf0e10cSrcweir } 92cdf0e10cSrcweir /* -----------------------------04.01.00 10:54-------------------------------- 93cdf0e10cSrcweir 94cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 95cdf0e10cSrcweir class BibPosListener :public cppu::WeakImplHelper1 <sdbc::XRowSetListener> 96cdf0e10cSrcweir { 97cdf0e10cSrcweir BibGeneralPage* pParentPage; 98cdf0e10cSrcweir public: 99cdf0e10cSrcweir BibPosListener(BibGeneralPage* pParent); 100cdf0e10cSrcweir 101cdf0e10cSrcweir //XPositioningListener 102cdf0e10cSrcweir virtual void SAL_CALL cursorMoved(const lang::EventObject& event) throw( uno::RuntimeException ); 103cdf0e10cSrcweir virtual void SAL_CALL rowChanged(const lang::EventObject& /*event*/) throw( uno::RuntimeException ){ /* not interested in */ } 104cdf0e10cSrcweir virtual void SAL_CALL rowSetChanged(const lang::EventObject& /*event*/) throw( uno::RuntimeException ){ /* not interested in */ } 105cdf0e10cSrcweir 106cdf0e10cSrcweir //XEventListener 107cdf0e10cSrcweir virtual void SAL_CALL disposing(const lang::EventObject& Source) throw( uno::RuntimeException ); 108cdf0e10cSrcweir 109cdf0e10cSrcweir }; 110cdf0e10cSrcweir /* -----------------------------04.01.00 10:57-------------------------------- 111cdf0e10cSrcweir 112cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 113cdf0e10cSrcweir BibPosListener::BibPosListener(BibGeneralPage* pParent) : 114cdf0e10cSrcweir pParentPage(pParent) 115cdf0e10cSrcweir { 116cdf0e10cSrcweir } 117cdf0e10cSrcweir /* -----------------------------04.01.00 10:57-------------------------------- 118cdf0e10cSrcweir 119cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 120cdf0e10cSrcweir void BibPosListener::cursorMoved(const lang::EventObject& /*aEvent*/) throw( uno::RuntimeException ) 121cdf0e10cSrcweir { 122cdf0e10cSrcweir try 123cdf0e10cSrcweir { 124cdf0e10cSrcweir uno::Reference< form::XBoundComponent > xLstBox = pParentPage->GetTypeListBoxModel(); 125cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xPropSet(xLstBox, UNO_QUERY); 126cdf0e10cSrcweir if(xPropSet.is()) 127cdf0e10cSrcweir { 128cdf0e10cSrcweir BibConfig* pBibConfig = BibModul::GetConfig(); 129cdf0e10cSrcweir BibDataManager* pDatMan = pParentPage->GetDataManager(); 130cdf0e10cSrcweir BibDBDescriptor aDesc; 131cdf0e10cSrcweir aDesc.sDataSource = pDatMan->getActiveDataSource(); 132cdf0e10cSrcweir aDesc.sTableOrQuery = pDatMan->getActiveDataTable(); 133cdf0e10cSrcweir aDesc.nCommandType = CommandType::TABLE; 134cdf0e10cSrcweir 135cdf0e10cSrcweir const Mapping* pMapping = pBibConfig->GetMapping(aDesc); 136cdf0e10cSrcweir OUString sTypeMapping = pBibConfig->GetDefColumnName(AUTHORITYTYPE_POS); 137cdf0e10cSrcweir if(pMapping) 138cdf0e10cSrcweir { 139cdf0e10cSrcweir for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++) 140cdf0e10cSrcweir { 141cdf0e10cSrcweir if(pMapping->aColumnPairs[nEntry].sLogicalColumnName == sTypeMapping) 142cdf0e10cSrcweir { 143cdf0e10cSrcweir sTypeMapping = pMapping->aColumnPairs[nEntry].sRealColumnName; 144cdf0e10cSrcweir break; 145cdf0e10cSrcweir } 146cdf0e10cSrcweir } 147cdf0e10cSrcweir } 148cdf0e10cSrcweir rtl::OUString uTypeMapping = sTypeMapping; 149cdf0e10cSrcweir 150cdf0e10cSrcweir uno::Reference< form::XForm > xForm = pDatMan->getForm(); 151cdf0e10cSrcweir uno::Reference< sdbcx::XColumnsSupplier > xSupplyCols(xForm, UNO_QUERY); 152cdf0e10cSrcweir uno::Reference< container::XNameAccess > xValueAcc; 153cdf0e10cSrcweir if (xSupplyCols.is()) 154cdf0e10cSrcweir xValueAcc = xSupplyCols->getColumns(); 155cdf0e10cSrcweir 156cdf0e10cSrcweir sal_Int16 nTempVal = -1; 157cdf0e10cSrcweir if(xValueAcc.is() && xValueAcc->hasByName(uTypeMapping)) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir uno::Any aVal = xValueAcc->getByName(uTypeMapping); 160cdf0e10cSrcweir uno::Reference< uno::XInterface > xInt = *(uno::Reference< uno::XInterface > *)aVal.getValue(); 161cdf0e10cSrcweir uno::Reference< sdb::XColumn > xCol(xInt, UNO_QUERY); 162cdf0e10cSrcweir DBG_ASSERT(xCol.is(), "BibPosListener::positioned : invalid column (no sdb::XColumn) !"); 163cdf0e10cSrcweir if (xCol.is()) 164cdf0e10cSrcweir { 165cdf0e10cSrcweir nTempVal = xCol->getShort(); 166cdf0e10cSrcweir // getShort returns zero if the value is not a number 167cdf0e10cSrcweir if (!nTempVal || xCol->wasNull()) 168cdf0e10cSrcweir { 169cdf0e10cSrcweir rtl::OUString sTempVal = xCol->getString(); 170cdf0e10cSrcweir if(sTempVal != rtl::OUString('0')) 171cdf0e10cSrcweir nTempVal = -1; 172cdf0e10cSrcweir } 173cdf0e10cSrcweir } 174cdf0e10cSrcweir } 175cdf0e10cSrcweir if(nTempVal < 0 || nTempVal >= TYPE_COUNT) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir uno::Any aSel; 178cdf0e10cSrcweir uno::Sequence<sal_Int16> aSelSeq(1); 179cdf0e10cSrcweir sal_Int16* pArr = aSelSeq.getArray(); 180cdf0e10cSrcweir pArr[0] = TYPE_COUNT; 181cdf0e10cSrcweir aSel.setValue(&aSelSeq, ::getCppuType((Sequence<sal_Int16>*)0)); 182cdf0e10cSrcweir xPropSet->setPropertyValue(C2U("SelectedItems"), aSel); 183cdf0e10cSrcweir } 184cdf0e10cSrcweir } 185cdf0e10cSrcweir } 186cdf0e10cSrcweir catch(Exception& rEx) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir (void) rEx; // make compiler happy 189cdf0e10cSrcweir DBG_ERROR("BibPosListener::positioned: something went wrong !"); 190cdf0e10cSrcweir } 191cdf0e10cSrcweir } 192cdf0e10cSrcweir /* -----------------------------04.01.00 11:28-------------------------------- 193cdf0e10cSrcweir 194cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 195cdf0e10cSrcweir void BibPosListener::disposing(const lang::EventObject& /*Source*/) throw( uno::RuntimeException ) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir } 198cdf0e10cSrcweir 199cdf0e10cSrcweir /* -----------------16.11.99 13:06------------------- 200cdf0e10cSrcweir 201cdf0e10cSrcweir --------------------------------------------------*/ 202cdf0e10cSrcweir BibGeneralPage::BibGeneralPage(Window* pParent, BibDataManager* pMan): 203cdf0e10cSrcweir BibTabPage(pParent,BibResId(RID_TP_GENERAL)), 204cdf0e10cSrcweir aControlParentWin(this, WB_DIALOGCONTROL), 205cdf0e10cSrcweir aIdentifierFT(&aControlParentWin, BibResId(FT_IDENTIFIER )), 206cdf0e10cSrcweir aAuthTypeFT(&aControlParentWin, BibResId(FT_AUTHTYPE )), 207cdf0e10cSrcweir aYearFT(&aControlParentWin, BibResId(FT_YEAR )), 208cdf0e10cSrcweir aAuthorFT(&aControlParentWin, BibResId(FT_AUTHOR )), 209cdf0e10cSrcweir aTitleFT(&aControlParentWin, BibResId(FT_TITLE )), 210cdf0e10cSrcweir aPublisherFT(&aControlParentWin, BibResId(FT_PUBLISHER )), 211cdf0e10cSrcweir aAddressFT(&aControlParentWin, BibResId(FT_ADDRESS )), 212cdf0e10cSrcweir aISBNFT(&aControlParentWin, BibResId(FT_ISBN )), 213cdf0e10cSrcweir aChapterFT(&aControlParentWin, BibResId(FT_CHAPTER )), 214cdf0e10cSrcweir aPagesFT(&aControlParentWin, BibResId(FT_PAGE )), 215cdf0e10cSrcweir aFirstFL(&aControlParentWin, BibResId(FL_1 )), 216cdf0e10cSrcweir aEditorFT(&aControlParentWin, BibResId(FT_EDITOR )), 217cdf0e10cSrcweir aEditionFT(&aControlParentWin, BibResId(FT_EDITION )), 218cdf0e10cSrcweir aBooktitleFT(&aControlParentWin, BibResId(FT_BOOKTITLE )), 219cdf0e10cSrcweir aVolumeFT(&aControlParentWin, BibResId(FT_VOLUME )), 220cdf0e10cSrcweir aHowpublishedFT(&aControlParentWin, BibResId(FT_HOWPUBLISHED )), 221cdf0e10cSrcweir aOrganizationsFT(&aControlParentWin,BibResId(FT_ORGANIZATION )), 222cdf0e10cSrcweir aInstitutionFT(&aControlParentWin, BibResId(FT_INSTITUTION )), 223cdf0e10cSrcweir aSchoolFT(&aControlParentWin, BibResId(FT_SCHOOL )), 224cdf0e10cSrcweir aReportTypeFT(&aControlParentWin, BibResId(FT_REPORT )), 225cdf0e10cSrcweir aMonthFT(&aControlParentWin, BibResId(FT_MONTH )), 226cdf0e10cSrcweir aSecondFL(&aControlParentWin, BibResId(FL_2 )), 227cdf0e10cSrcweir aJournalFT(&aControlParentWin, BibResId(FT_JOURNAL )), 228cdf0e10cSrcweir aNumberFT(&aControlParentWin, BibResId(FT_NUMBER )), 229cdf0e10cSrcweir aSeriesFT(&aControlParentWin, BibResId(FT_SERIES )), 230cdf0e10cSrcweir aAnnoteFT(&aControlParentWin, BibResId(FT_ANNOTE )), 231cdf0e10cSrcweir aNoteFT(&aControlParentWin, BibResId(FT_NOTE )), 232cdf0e10cSrcweir aURLFT(&aControlParentWin, BibResId(FT_URL )), 233cdf0e10cSrcweir aThirdFL(&aControlParentWin, BibResId(FL_3 )), 234cdf0e10cSrcweir aCustom1FT(&aControlParentWin, BibResId(FT_CUSTOM1 )), 235cdf0e10cSrcweir aCustom2FT(&aControlParentWin, BibResId(FT_CUSTOM2 )), 236cdf0e10cSrcweir aCustom3FT(&aControlParentWin, BibResId(FT_CUSTOM3 )), 237cdf0e10cSrcweir aCustom4FT(&aControlParentWin, BibResId(FT_CUSTOM4 )), 238cdf0e10cSrcweir aCustom5FT(&aControlParentWin, BibResId(FT_CUSTOM5 )), 239cdf0e10cSrcweir aHoriScroll(this, WB_HORZ), 240cdf0e10cSrcweir aVertScroll(this, WB_VERT), 241cdf0e10cSrcweir sErrorPrefix(BibResId(ST_ERROR_PREFIX)), 242cdf0e10cSrcweir pDatMan(pMan) 243cdf0e10cSrcweir { 244cdf0e10cSrcweir aControlParentWin.Show(); 245cdf0e10cSrcweir aControlParentWin.SetHelpId(HID_BIB_CONTROL_PARENT); 246cdf0e10cSrcweir aStdSize = GetOutputSizePixel(); 247cdf0e10cSrcweir 248cdf0e10cSrcweir aBibTypeArr[0] = String(BibResId(ST_TYPE_ARTICLE)); 249cdf0e10cSrcweir aBibTypeArr[1] = String(BibResId(ST_TYPE_BOOK)); 250cdf0e10cSrcweir aBibTypeArr[2] = String(BibResId(ST_TYPE_BOOKLET)); 251cdf0e10cSrcweir aBibTypeArr[3] = String(BibResId(ST_TYPE_CONFERENCE)); 252cdf0e10cSrcweir aBibTypeArr[4] = String(BibResId(ST_TYPE_INBOOK )); 253cdf0e10cSrcweir aBibTypeArr[5] = String(BibResId(ST_TYPE_INCOLLECTION)); 254cdf0e10cSrcweir aBibTypeArr[6] = String(BibResId(ST_TYPE_INPROCEEDINGS)); 255cdf0e10cSrcweir aBibTypeArr[7] = String(BibResId(ST_TYPE_JOURNAL )); 256cdf0e10cSrcweir aBibTypeArr[8] = String(BibResId(ST_TYPE_MANUAL )); 257cdf0e10cSrcweir aBibTypeArr[9] = String(BibResId(ST_TYPE_MASTERSTHESIS)); 258cdf0e10cSrcweir aBibTypeArr[10] = String(BibResId(ST_TYPE_MISC )); 259cdf0e10cSrcweir aBibTypeArr[11] = String(BibResId(ST_TYPE_PHDTHESIS )); 260cdf0e10cSrcweir aBibTypeArr[12] = String(BibResId(ST_TYPE_PROCEEDINGS )); 261cdf0e10cSrcweir aBibTypeArr[13] = String(BibResId(ST_TYPE_TECHREPORT )); 262cdf0e10cSrcweir aBibTypeArr[14] = String(BibResId(ST_TYPE_UNPUBLISHED )); 263cdf0e10cSrcweir aBibTypeArr[15] = String(BibResId(ST_TYPE_EMAIL )); 264cdf0e10cSrcweir aBibTypeArr[16] = String(BibResId(ST_TYPE_WWW )); 265cdf0e10cSrcweir aBibTypeArr[17] = String(BibResId(ST_TYPE_CUSTOM1 )); 266cdf0e10cSrcweir aBibTypeArr[18] = String(BibResId(ST_TYPE_CUSTOM2 )); 267cdf0e10cSrcweir aBibTypeArr[19] = String(BibResId(ST_TYPE_CUSTOM3 )); 268cdf0e10cSrcweir aBibTypeArr[20] = String(BibResId(ST_TYPE_CUSTOM4 )); 269cdf0e10cSrcweir aBibTypeArr[21] = String(BibResId(ST_TYPE_CUSTOM5 )); 270cdf0e10cSrcweir 271cdf0e10cSrcweir FreeResource(); 272cdf0e10cSrcweir 273cdf0e10cSrcweir InitFixedTexts(); 274cdf0e10cSrcweir 275cdf0e10cSrcweir aBasePos = aIdentifierFT.GetPosPixel(); 276cdf0e10cSrcweir 277cdf0e10cSrcweir sal_Int16* pMap = nFT2CtrlMap; 278cdf0e10cSrcweir for( sal_uInt16 i = 0 ; i < FIELD_COUNT ; ++i, ++pMap ) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir aControls[ i ] = 0; 281cdf0e10cSrcweir *pMap = -1; 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir AdjustScrollbars(); 285cdf0e10cSrcweir Link aScrollLnk(LINK(this, BibGeneralPage, ScrollHdl)); 286cdf0e10cSrcweir aHoriScroll.SetScrollHdl( aScrollLnk ); 287cdf0e10cSrcweir aVertScroll.SetScrollHdl( aScrollLnk ); 288cdf0e10cSrcweir aHoriScroll.SetLineSize(10); 289cdf0e10cSrcweir aVertScroll.SetLineSize(10); 290cdf0e10cSrcweir aHoriScroll.SetPageSize( aIdentifierFT.GetSizePixel().Width()); 291cdf0e10cSrcweir aVertScroll.SetPageSize( 292cdf0e10cSrcweir aPublisherFT.GetPosPixel().Y() - aIdentifierFT.GetPosPixel().Y()); 293cdf0e10cSrcweir aHoriScroll.Show(); 294cdf0e10cSrcweir aVertScroll.Show(); 295cdf0e10cSrcweir 296cdf0e10cSrcweir BibConfig* pBibConfig = BibModul::GetConfig(); 297cdf0e10cSrcweir BibDBDescriptor aDesc; 298cdf0e10cSrcweir aDesc.sDataSource = pDatMan->getActiveDataSource(); 299cdf0e10cSrcweir aDesc.sTableOrQuery = pDatMan->getActiveDataTable(); 300cdf0e10cSrcweir aDesc.nCommandType = CommandType::TABLE; 301cdf0e10cSrcweir const Mapping* pMapping = pBibConfig->GetMapping(aDesc); 302cdf0e10cSrcweir 303cdf0e10cSrcweir xCtrlContnr = VCLUnoHelper::CreateControlContainer(&aControlParentWin); 304cdf0e10cSrcweir 305cdf0e10cSrcweir xMgr = comphelper::getProcessServiceFactory(); 306cdf0e10cSrcweir // the control should be a bit smaller than the fixed text 307cdf0e10cSrcweir Size aControlSize(aIdentifierFT.GetSizePixel()); 308cdf0e10cSrcweir aControlSize.Width() = aControlSize.Width() * 8 / 10; 309cdf0e10cSrcweir 310cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, IDENTIFIER_POS ), lcl_MovePoint( aIdentifierFT ), 311cdf0e10cSrcweir aControlSize, sTableErrorString, aIdentifierFT.GetText(), 312cdf0e10cSrcweir HID_BIB_IDENTIFIER_POS, 0 ); 313cdf0e10cSrcweir 314cdf0e10cSrcweir sTypeColumnName = lcl_GetColumnName(pMapping, AUTHORITYTYPE_POS); 315cdf0e10cSrcweir 316cdf0e10cSrcweir AddControlWithError( sTypeColumnName, lcl_MovePoint(aAuthTypeFT ), aControlSize, sTableErrorString, 317cdf0e10cSrcweir aAuthTypeFT.GetText(), HID_BIB_AUTHORITYTYPE_POS, 1 ); 318cdf0e10cSrcweir 319cdf0e10cSrcweir ::Point aYearPos = lcl_MovePoint(aYearFT); 320cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, YEAR_POS ), aYearPos, 321cdf0e10cSrcweir aControlSize, sTableErrorString, aYearFT.GetText(), HID_BIB_YEAR_POS, 4 ); 322cdf0e10cSrcweir 323cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName(pMapping, AUTHOR_POS), lcl_MovePoint(aAuthorFT), 324cdf0e10cSrcweir aControlSize, sTableErrorString, aAuthorFT.GetText(), HID_BIB_AUTHOR_POS, 2 ); 325cdf0e10cSrcweir 326cdf0e10cSrcweir ::Point aTitlePos( lcl_MovePoint( aTitleFT ) ); 327cdf0e10cSrcweir ::Size aTitleSize = aTitleFT.GetSizePixel(); 328cdf0e10cSrcweir aTitleSize.Width() = aYearPos.X() + aControlSize.Width() - aTitlePos.X(); 329cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName(pMapping, TITLE_POS), aTitlePos, aTitleSize, sTableErrorString, 330cdf0e10cSrcweir aTitleFT.GetText(), HID_BIB_TITLE_POS, 22 ); 331cdf0e10cSrcweir 332cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, PUBLISHER_POS ), lcl_MovePoint( aPublisherFT), 333cdf0e10cSrcweir aControlSize, sTableErrorString, aPublisherFT.GetText(), HID_BIB_PUBLISHER_POS, 5 ); 334cdf0e10cSrcweir 335cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, ADDRESS_POS ), lcl_MovePoint( aAddressFT ), 336cdf0e10cSrcweir aControlSize, sTableErrorString, aAddressFT.GetText(), HID_BIB_ADDRESS_POS, 7 ); 337cdf0e10cSrcweir 338cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, ISBN_POS ), lcl_MovePoint( aISBNFT ), 339cdf0e10cSrcweir aControlSize, sTableErrorString, aISBNFT.GetText(), HID_BIB_ISBN_POS, 6 ); 340cdf0e10cSrcweir 341cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, CHAPTER_POS ), lcl_MovePoint(aChapterFT), 342cdf0e10cSrcweir aControlSize, sTableErrorString, aChapterFT.GetText(), HID_BIB_CHAPTER_POS, 10 ); 343cdf0e10cSrcweir 344cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, PAGES_POS ), lcl_MovePoint( aPagesFT ), 345cdf0e10cSrcweir aControlSize, sTableErrorString, aPagesFT.GetText(), HID_BIB_PAGES_POS, 19 ); 346cdf0e10cSrcweir 347cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, EDITOR_POS ), lcl_MovePoint( aEditorFT ), 348cdf0e10cSrcweir aControlSize, sTableErrorString, aEditorFT.GetText(), HID_BIB_EDITOR_POS, 12 ); 349cdf0e10cSrcweir 350cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, EDITION_POS ), lcl_MovePoint(aEditionFT), 351cdf0e10cSrcweir aControlSize, sTableErrorString, aEditionFT.GetText(), HID_BIB_EDITION_POS, 11 ); 352cdf0e10cSrcweir 353cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName(pMapping, BOOKTITLE_POS), lcl_MovePoint(aBooktitleFT), 354cdf0e10cSrcweir aControlSize, sTableErrorString, aBooktitleFT.GetText(), HID_BIB_BOOKTITLE_POS, 9 ); 355cdf0e10cSrcweir 356cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, VOLUME_POS ), lcl_MovePoint( aVolumeFT ), 357cdf0e10cSrcweir aControlSize, sTableErrorString, aVolumeFT.GetText(), HID_BIB_VOLUME_POS, 24 ); 358cdf0e10cSrcweir 359cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, HOWPUBLISHED_POS ), lcl_MovePoint( aHowpublishedFT ), 360cdf0e10cSrcweir aControlSize, sTableErrorString, aHowpublishedFT.GetText(), HID_BIB_HOWPUBLISHED_POS, 13 ); 361cdf0e10cSrcweir 362cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, ORGANIZATIONS_POS ), lcl_MovePoint( aOrganizationsFT ), 363cdf0e10cSrcweir aControlSize, sTableErrorString, aOrganizationsFT.GetText(), HID_BIB_ORGANIZATIONS_POS, 18 ); 364cdf0e10cSrcweir 365cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, INSTITUTION_POS ), lcl_MovePoint( aInstitutionFT ), 366cdf0e10cSrcweir aControlSize, sTableErrorString, aInstitutionFT.GetText(), HID_BIB_INSTITUTION_POS, 14 ); 367cdf0e10cSrcweir 368cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, SCHOOL_POS ), lcl_MovePoint( aSchoolFT ), 369cdf0e10cSrcweir aControlSize, sTableErrorString, aSchoolFT.GetText(), HID_BIB_SCHOOL_POS, 20 ); 370cdf0e10cSrcweir 371cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, REPORTTYPE_POS ), lcl_MovePoint( aReportTypeFT ), 372cdf0e10cSrcweir aControlSize, sTableErrorString, aReportTypeFT.GetText(), HID_BIB_REPORTTYPE_POS, 23 ); 373cdf0e10cSrcweir 374cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, MONTH_POS ), lcl_MovePoint( aMonthFT ), 375cdf0e10cSrcweir aControlSize, sTableErrorString, aMonthFT.GetText(), HID_BIB_MONTH_POS, 3 ); 376cdf0e10cSrcweir 377cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, JOURNAL_POS ), lcl_MovePoint( aJournalFT ), 378cdf0e10cSrcweir aControlSize, sTableErrorString, aJournalFT.GetText(), HID_BIB_JOURNAL_POS, 15 ); 379cdf0e10cSrcweir 380cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, NUMBER_POS ), lcl_MovePoint( aNumberFT ), 381cdf0e10cSrcweir aControlSize, sTableErrorString, aNumberFT.GetText(), HID_BIB_NUMBER_POS, 17 ); 382cdf0e10cSrcweir 383cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, SERIES_POS ), lcl_MovePoint( aSeriesFT ), 384cdf0e10cSrcweir aControlSize, sTableErrorString, aSeriesFT.GetText(), HID_BIB_SERIES_POS, 21 ); 385cdf0e10cSrcweir 386cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, ANNOTE_POS ), lcl_MovePoint( aAnnoteFT ), 387cdf0e10cSrcweir aControlSize, sTableErrorString, aAnnoteFT.GetText(), HID_BIB_ANNOTE_POS, 8 ); 388cdf0e10cSrcweir 389cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, NOTE_POS ), lcl_MovePoint( aNoteFT ), 390cdf0e10cSrcweir aControlSize, sTableErrorString, aNoteFT.GetText(), HID_BIB_NOTE_POS, 16 ); 391cdf0e10cSrcweir 392cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, URL_POS ), lcl_MovePoint( aURLFT ), 393cdf0e10cSrcweir aControlSize, sTableErrorString, aURLFT.GetText(), HID_BIB_URL_POS, 25 ); 394cdf0e10cSrcweir 395cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM1_POS ), lcl_MovePoint( aCustom1FT ), 396cdf0e10cSrcweir aControlSize, sTableErrorString, aCustom1FT.GetText(), HID_BIB_CUSTOM1_POS, 26 ); 397cdf0e10cSrcweir 398cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM2_POS ), lcl_MovePoint( aCustom2FT ), 399cdf0e10cSrcweir aControlSize, sTableErrorString, aCustom2FT.GetText(), HID_BIB_CUSTOM2_POS, 27 ); 400cdf0e10cSrcweir 401cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM3_POS ), lcl_MovePoint( aCustom3FT ), 402cdf0e10cSrcweir aControlSize, sTableErrorString, aCustom3FT.GetText(), HID_BIB_CUSTOM3_POS, 28 ); 403cdf0e10cSrcweir 404cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM4_POS ), lcl_MovePoint( aCustom4FT ), 405cdf0e10cSrcweir aControlSize, sTableErrorString, aCustom4FT.GetText(), HID_BIB_CUSTOM4_POS, 29 ); 406cdf0e10cSrcweir 407cdf0e10cSrcweir AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM5_POS ), lcl_MovePoint( aCustom5FT ), 408cdf0e10cSrcweir aControlSize, sTableErrorString, aCustom5FT.GetText(), HID_BIB_CUSTOM5_POS, 30 ); 409cdf0e10cSrcweir 410cdf0e10cSrcweir xPosListener = new BibPosListener(this); 411cdf0e10cSrcweir uno::Reference< sdbc::XRowSet > xRowSet(pDatMan->getForm(), UNO_QUERY); 412cdf0e10cSrcweir if(xRowSet.is()) 413cdf0e10cSrcweir xRowSet->addRowSetListener(xPosListener); 414cdf0e10cSrcweir uno::Reference< form::runtime::XFormController > xFormCtrl = pDatMan->GetFormController(); 415cdf0e10cSrcweir xFormCtrl->setContainer(xCtrlContnr); 416cdf0e10cSrcweir xFormCtrl->activateTabOrder(); 417cdf0e10cSrcweir 418cdf0e10cSrcweir if(sTableErrorString.Len()) 419cdf0e10cSrcweir sTableErrorString.Insert(sErrorPrefix, 0); 420cdf0e10cSrcweir } 421cdf0e10cSrcweir //----------------------------------------------------------------------------- 422cdf0e10cSrcweir BibGeneralPage::~BibGeneralPage() 423cdf0e10cSrcweir { 424cdf0e10cSrcweir if (pDatMan && xPosListener.is()) 425cdf0e10cSrcweir { 426cdf0e10cSrcweir uno::Reference< sdbc::XRowSet > xRowSet(pDatMan->getForm(), UNO_QUERY); 427cdf0e10cSrcweir if(xRowSet.is()) 428cdf0e10cSrcweir xRowSet->removeRowSetListener(xPosListener); 429cdf0e10cSrcweir } 430cdf0e10cSrcweir } 431cdf0e10cSrcweir /* -----------------------------14.04.00 13:11-------------------------------- 432cdf0e10cSrcweir 433cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 434cdf0e10cSrcweir void BibGeneralPage::RemoveListeners() 435cdf0e10cSrcweir { 436cdf0e10cSrcweir for(sal_uInt16 i = 0; i < FIELD_COUNT; i++) 437cdf0e10cSrcweir { 438cdf0e10cSrcweir if(aControls[i].is()) 439cdf0e10cSrcweir { 440cdf0e10cSrcweir uno::Reference< awt::XWindow > xCtrWin(aControls[i], uno::UNO_QUERY ); 441cdf0e10cSrcweir xCtrWin->removeFocusListener( this ); 442cdf0e10cSrcweir aControls[i] = 0; 443cdf0e10cSrcweir } 444cdf0e10cSrcweir } 445cdf0e10cSrcweir } 446cdf0e10cSrcweir /* -----------------------------21.01.00 17:05-------------------------------- 447cdf0e10cSrcweir 448cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 449cdf0e10cSrcweir void BibGeneralPage::CommitActiveControl() 450cdf0e10cSrcweir { 451cdf0e10cSrcweir uno::Reference< form::runtime::XFormController > xFormCtrl = pDatMan->GetFormController(); 452cdf0e10cSrcweir uno::Reference< awt::XControl > xCurr = xFormCtrl->getCurrentControl(); 453cdf0e10cSrcweir if(xCurr.is()) 454cdf0e10cSrcweir { 455cdf0e10cSrcweir uno::Reference< awt::XControlModel > xModel = xCurr->getModel(); 456cdf0e10cSrcweir uno::Reference< form::XBoundComponent > xBound(xModel, UNO_QUERY); 457cdf0e10cSrcweir if(xBound.is()) 458cdf0e10cSrcweir xBound->commit(); 459cdf0e10cSrcweir } 460cdf0e10cSrcweir } 461cdf0e10cSrcweir //----------------------------------------------------------------------------- 462cdf0e10cSrcweir void BibGeneralPage::AddControlWithError( const OUString& rColumnName, const ::Point& rPos, const ::Size& rSize, 463cdf0e10cSrcweir String& rErrorString, String aColumnUIName, const rtl::OString& sHelpId, sal_uInt16 nIndexInFTArray ) 464cdf0e10cSrcweir { 465cdf0e10cSrcweir // adds also the XControl and creates a map entry in nFT2CtrlMap[] for mapping between control and FT 466cdf0e10cSrcweir 467cdf0e10cSrcweir sal_Int16 nIndex = -1; 468cdf0e10cSrcweir uno::Reference< awt::XControlModel > xTmp = AddXControl(rColumnName, rPos, rSize, sHelpId, nIndex ); 469cdf0e10cSrcweir if( xTmp.is() ) 470cdf0e10cSrcweir { 471cdf0e10cSrcweir DBG_ASSERT( nIndexInFTArray < FIELD_COUNT, "*BibGeneralPage::AddControlWithError(): wrong array index!" ); 472cdf0e10cSrcweir DBG_ASSERT( nFT2CtrlMap[ nIndexInFTArray ] < 0, "+BibGeneralPage::AddControlWithError(): index already in use!" ); 473cdf0e10cSrcweir 474cdf0e10cSrcweir nFT2CtrlMap[ nIndexInFTArray ] = nIndex; 475cdf0e10cSrcweir } 476cdf0e10cSrcweir else 477cdf0e10cSrcweir { 478cdf0e10cSrcweir if( rErrorString.Len() ) 479cdf0e10cSrcweir rErrorString += '\n'; 480cdf0e10cSrcweir 481cdf0e10cSrcweir rErrorString += MnemonicGenerator::EraseAllMnemonicChars( aColumnUIName ); 482cdf0e10cSrcweir } 483cdf0e10cSrcweir } 484cdf0e10cSrcweir //----------------------------------------------------------------------------- 485cdf0e10cSrcweir uno::Reference< awt::XControlModel > BibGeneralPage::AddXControl( 486cdf0e10cSrcweir const String& rName, 487cdf0e10cSrcweir ::Point rPos, ::Size rSize, const rtl::OString& sHelpId, sal_Int16& rIndex ) 488cdf0e10cSrcweir { 489cdf0e10cSrcweir uno::Reference< awt::XControlModel > xCtrModel; 490cdf0e10cSrcweir try 491cdf0e10cSrcweir { 492cdf0e10cSrcweir sal_Bool bTypeListBox = sTypeColumnName == rName; 493cdf0e10cSrcweir xCtrModel = pDatMan->loadControlModel(rName, bTypeListBox); 494cdf0e10cSrcweir if ( xCtrModel.is() && xMgr.is()) 495cdf0e10cSrcweir { 496cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xPropSet( xCtrModel, UNO_QUERY ); 497cdf0e10cSrcweir 498cdf0e10cSrcweir if( xPropSet.is()) 499cdf0e10cSrcweir { 500cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo(); 501cdf0e10cSrcweir 502cdf0e10cSrcweir uno::Any aAny = xPropSet->getPropertyValue( C2U("DefaultControl") ); 503cdf0e10cSrcweir rtl::OUString aControlName; 504cdf0e10cSrcweir aAny >>= aControlName; 505cdf0e10cSrcweir 506cdf0e10cSrcweir rtl::OUString uProp(C2U("HelpURL")); 507cdf0e10cSrcweir if(xPropInfo->hasPropertyByName(uProp)) 508cdf0e10cSrcweir { 509cdf0e10cSrcweir ::rtl::OUString sId = ::rtl::OUString::createFromAscii( INET_HID_SCHEME ); 510cdf0e10cSrcweir DBG_ASSERT( INetURLObject( rtl::OStringToOUString( sHelpId, RTL_TEXTENCODING_UTF8 ) ).GetProtocol() == INET_PROT_NOT_VALID, "Wrong HelpId!" ); 511cdf0e10cSrcweir sId += ::rtl::OUString( sHelpId, sHelpId.getLength(), RTL_TEXTENCODING_UTF8 ); 512cdf0e10cSrcweir xPropSet->setPropertyValue( uProp, makeAny( sId ) ); 513cdf0e10cSrcweir } 514cdf0e10cSrcweir 515cdf0e10cSrcweir if(bTypeListBox) 516cdf0e10cSrcweir { 517cdf0e10cSrcweir //uno::Reference< beans::XPropertySet > xPropSet(xControl, UNO_QUERY); 518cdf0e10cSrcweir aAny <<= (sal_Int16)1; 519cdf0e10cSrcweir xPropSet->setPropertyValue(C2U("BoundColumn"), aAny); 520cdf0e10cSrcweir ListSourceType eSet = ListSourceType_VALUELIST; 521cdf0e10cSrcweir aAny.setValue( &eSet, ::getCppuType((const ListSourceType*)0) ); 522cdf0e10cSrcweir xPropSet->setPropertyValue(C2U("ListSourceType"), aAny); 523cdf0e10cSrcweir 524cdf0e10cSrcweir uno::Sequence<rtl::OUString> aListSource(TYPE_COUNT); 525cdf0e10cSrcweir rtl::OUString* pListSourceArr = aListSource.getArray(); 526cdf0e10cSrcweir //pListSourceArr[0] = C2U("select TypeName, TypeIndex from TypeNms"); 527cdf0e10cSrcweir for(sal_uInt16 i = 0; i < TYPE_COUNT; i++) 528cdf0e10cSrcweir pListSourceArr[i] = String::CreateFromInt32(i); 529cdf0e10cSrcweir aAny.setValue(&aListSource, ::getCppuType((uno::Sequence<rtl::OUString>*)0)); 530cdf0e10cSrcweir 531cdf0e10cSrcweir xPropSet->setPropertyValue(C2U("ListSource"), aAny); 532cdf0e10cSrcweir 533cdf0e10cSrcweir uno::Sequence<rtl::OUString> aValues(TYPE_COUNT + 1); 534cdf0e10cSrcweir rtl::OUString* pValuesArr = aValues.getArray(); 535cdf0e10cSrcweir for(sal_uInt16 j = 0; j < TYPE_COUNT; j++) 536cdf0e10cSrcweir pValuesArr[j] = aBibTypeArr[j]; 537cdf0e10cSrcweir // empty string if an invalid value no values is set 538cdf0e10cSrcweir pValuesArr[TYPE_COUNT] = rtl::OUString(); 539cdf0e10cSrcweir 540cdf0e10cSrcweir aAny.setValue(&aValues, ::getCppuType((uno::Sequence<rtl::OUString>*)0)); 541cdf0e10cSrcweir 542cdf0e10cSrcweir xPropSet->setPropertyValue(C2U("StringItemList"), aAny); 543cdf0e10cSrcweir 544cdf0e10cSrcweir sal_Bool bTrue = sal_True; 545cdf0e10cSrcweir aAny.setValue( &bTrue, ::getBooleanCppuType() ); 546cdf0e10cSrcweir xPropSet->setPropertyValue( C2U("Dropdown"), aAny ); 547cdf0e10cSrcweir 548cdf0e10cSrcweir aControlName = C2U("com.sun.star.form.control.ListBox"); 549cdf0e10cSrcweir xLBModel = Reference< form::XBoundComponent >(xCtrModel, UNO_QUERY); 550cdf0e10cSrcweir 551cdf0e10cSrcweir } 552cdf0e10cSrcweir 553cdf0e10cSrcweir uno::Reference< awt::XControl > xControl(xMgr->createInstance( aControlName ), UNO_QUERY ); 554cdf0e10cSrcweir if ( xControl.is() ) 555cdf0e10cSrcweir { 556cdf0e10cSrcweir xControl->setModel( xCtrModel); 557cdf0e10cSrcweir 558cdf0e10cSrcweir // Peer als Child zu dem FrameWindow 559cdf0e10cSrcweir xCtrlContnr->addControl(rName, xControl); 560cdf0e10cSrcweir uno::Reference< awt::XWindow > xCtrWin(xControl, UNO_QUERY ); 561cdf0e10cSrcweir xCtrWin->addFocusListener( this ); 562cdf0e10cSrcweir rIndex = -1; // -> implies, that not found 563cdf0e10cSrcweir for(sal_uInt16 i = 0; i < FIELD_COUNT; i++) 564cdf0e10cSrcweir if(!aControls[i].is()) 565cdf0e10cSrcweir { 566cdf0e10cSrcweir aControls[i] = xCtrWin; 567cdf0e10cSrcweir rIndex = sal_Int16( i ); 568cdf0e10cSrcweir break; 569cdf0e10cSrcweir } 570cdf0e10cSrcweir xCtrWin->setVisible( sal_True ); 571cdf0e10cSrcweir xControl->setDesignMode( sal_True ); 572cdf0e10cSrcweir // initially switch on the desing mode - switch it off _after_ loading the form 573cdf0e10cSrcweir // 17.10.2001 - 93107 - frank.schoenheit@sun.com 574cdf0e10cSrcweir 575cdf0e10cSrcweir xCtrWin->setPosSize(rPos.X(), rPos.Y(), rSize.Width(), 576cdf0e10cSrcweir rSize.Height(), awt::PosSize::POSSIZE); 577cdf0e10cSrcweir } 578cdf0e10cSrcweir } 579cdf0e10cSrcweir } 580cdf0e10cSrcweir } 581cdf0e10cSrcweir catch(Exception& rEx) 582cdf0e10cSrcweir { 583cdf0e10cSrcweir (void) rEx; // make compiler happy 584cdf0e10cSrcweir DBG_ERROR("BibGeneralPage::AddXControl: something went wrong !"); 585cdf0e10cSrcweir } 586cdf0e10cSrcweir return xCtrModel; 587cdf0e10cSrcweir } 588cdf0e10cSrcweir 589cdf0e10cSrcweir void BibGeneralPage::AdjustScrollbars() 590cdf0e10cSrcweir { 591cdf0e10cSrcweir long nVertScrollWidth = aVertScroll.GetSizePixel().Width(); 592cdf0e10cSrcweir long nHoriScrollHeight = aHoriScroll.GetSizePixel().Height(); 593cdf0e10cSrcweir ::Size aOutSize(GetOutputSizePixel()); 594cdf0e10cSrcweir sal_Bool bHoriVisible = aOutSize.Width() <= aStdSize.Width(); 595cdf0e10cSrcweir sal_Bool bVertVisible = (aOutSize.Height()-(bHoriVisible ? nHoriScrollHeight : 0)) <= (aStdSize.Height()); 596cdf0e10cSrcweir aHoriScroll.Show(bHoriVisible); 597cdf0e10cSrcweir aVertScroll.Show(bVertVisible); 598cdf0e10cSrcweir 599cdf0e10cSrcweir if(bHoriVisible) 600cdf0e10cSrcweir { 601cdf0e10cSrcweir ::Size aHoriSize(aOutSize.Width() - (bVertVisible ? nVertScrollWidth : 0), 602cdf0e10cSrcweir nHoriScrollHeight); 603cdf0e10cSrcweir aHoriScroll.SetSizePixel(aHoriSize); 604cdf0e10cSrcweir aHoriScroll.SetRange( Range(0, aStdSize.Width())); 605cdf0e10cSrcweir aHoriScroll.SetVisibleSize( aHoriSize.Width() - (bVertVisible ? nVertScrollWidth : 0)); 606cdf0e10cSrcweir } 607cdf0e10cSrcweir if(bVertVisible) 608cdf0e10cSrcweir { 609cdf0e10cSrcweir ::Size aVertSize(nHoriScrollHeight, aOutSize.Height() - 610cdf0e10cSrcweir (bHoriVisible ? nHoriScrollHeight : 0)); 611cdf0e10cSrcweir aVertScroll.SetSizePixel(aVertSize); 612cdf0e10cSrcweir aVertScroll.SetRange( Range(0, aStdSize.Height())); 613cdf0e10cSrcweir aVertScroll.SetVisibleSize( aVertSize.Height() ); 614cdf0e10cSrcweir } 615cdf0e10cSrcweir 616cdf0e10cSrcweir ::Size aSize(8, 8); 617cdf0e10cSrcweir aSize = LogicToPixel(aSize, MapMode(MAP_APPFONT)); 618cdf0e10cSrcweir ::Size aScrollSize(aOutSize.Width() - aSize.Height(), aSize.Height()); 619cdf0e10cSrcweir ::Point aScrollPos(0, aOutSize.Height() - aSize.Height()); 620cdf0e10cSrcweir aHoriScroll.SetPosSizePixel(aScrollPos, aScrollSize); 621cdf0e10cSrcweir 622cdf0e10cSrcweir aScrollPos.X() = aOutSize.Width() - aSize.Width(); 623cdf0e10cSrcweir aScrollPos.Y() = 0; 624cdf0e10cSrcweir aScrollSize.Width() = aSize.Width(); 625cdf0e10cSrcweir aScrollSize.Height() = aOutSize.Height() - aSize.Height(); 626cdf0e10cSrcweir aVertScroll.SetPosSizePixel(aScrollPos, aScrollSize); 627cdf0e10cSrcweir 628cdf0e10cSrcweir ::Size aControlParentWinSz(aOutSize); 629cdf0e10cSrcweir if(bHoriVisible) 630cdf0e10cSrcweir aControlParentWinSz.Height() -= aSize.Height(); 631cdf0e10cSrcweir if(bVertVisible) 632cdf0e10cSrcweir aControlParentWinSz.Width() -= aSize.Width(); 633cdf0e10cSrcweir aControlParentWin.SetSizePixel(aControlParentWinSz); 634cdf0e10cSrcweir } 635cdf0e10cSrcweir 636cdf0e10cSrcweir void BibGeneralPage::Resize() 637cdf0e10cSrcweir { 638cdf0e10cSrcweir AdjustScrollbars(); 639cdf0e10cSrcweir ScrollHdl(&aVertScroll); 640cdf0e10cSrcweir ScrollHdl(&aHoriScroll); 641cdf0e10cSrcweir Window::Resize(); 642cdf0e10cSrcweir } 643cdf0e10cSrcweir 644cdf0e10cSrcweir void BibGeneralPage::InitFixedTexts( void ) 645cdf0e10cSrcweir { 646cdf0e10cSrcweir String aFixedStrings[ FIELD_COUNT ] = 647cdf0e10cSrcweir { 648cdf0e10cSrcweir String( BibResId( ST_IDENTIFIER ) ), 649cdf0e10cSrcweir String( BibResId( ST_AUTHTYPE ) ), 650cdf0e10cSrcweir String( BibResId( ST_AUTHOR ) ), 651cdf0e10cSrcweir String( BibResId( ST_TITLE ) ), 652cdf0e10cSrcweir String( BibResId( ST_MONTH ) ), 653cdf0e10cSrcweir String( BibResId( ST_YEAR ) ), 654cdf0e10cSrcweir String( BibResId( ST_ISBN ) ), 655cdf0e10cSrcweir String( BibResId( ST_BOOKTITLE ) ), 656cdf0e10cSrcweir String( BibResId( ST_CHAPTER ) ), 657cdf0e10cSrcweir String( BibResId( ST_EDITION ) ), 658cdf0e10cSrcweir String( BibResId( ST_EDITOR ) ), 659cdf0e10cSrcweir String( BibResId( ST_HOWPUBLISHED ) ), 660cdf0e10cSrcweir String( BibResId( ST_INSTITUTION ) ), 661cdf0e10cSrcweir String( BibResId( ST_JOURNAL ) ), 662cdf0e10cSrcweir String( BibResId( ST_NOTE ) ), 663cdf0e10cSrcweir String( BibResId( ST_ANNOTE ) ), 664cdf0e10cSrcweir String( BibResId( ST_NUMBER ) ), 665cdf0e10cSrcweir String( BibResId( ST_ORGANIZATION ) ), 666cdf0e10cSrcweir String( BibResId( ST_PAGE ) ), 667cdf0e10cSrcweir String( BibResId( ST_PUBLISHER ) ), 668cdf0e10cSrcweir String( BibResId( ST_ADDRESS ) ), 669cdf0e10cSrcweir String( BibResId( ST_SCHOOL ) ), 670cdf0e10cSrcweir String( BibResId( ST_SERIES ) ), 671cdf0e10cSrcweir String( BibResId( ST_REPORT ) ), 672cdf0e10cSrcweir String( BibResId( ST_VOLUME ) ), 673cdf0e10cSrcweir String( BibResId( ST_URL ) ), 674cdf0e10cSrcweir String( BibResId( ST_CUSTOM1 ) ), 675cdf0e10cSrcweir String( BibResId( ST_CUSTOM2 ) ), 676cdf0e10cSrcweir String( BibResId( ST_CUSTOM3 ) ), 677cdf0e10cSrcweir String( BibResId( ST_CUSTOM4 ) ), 678cdf0e10cSrcweir String( BibResId( ST_CUSTOM5 ) ) 679cdf0e10cSrcweir }; 680cdf0e10cSrcweir 681cdf0e10cSrcweir aFixedTexts[0] = &aIdentifierFT; 682cdf0e10cSrcweir aFixedTexts[1] = &aAuthTypeFT; 683cdf0e10cSrcweir aFixedTexts[2] = &aAuthorFT; 684cdf0e10cSrcweir aFixedTexts[3] = &aTitleFT; 685cdf0e10cSrcweir aFixedTexts[4] = &aMonthFT; 686cdf0e10cSrcweir aFixedTexts[5] = &aYearFT; 687cdf0e10cSrcweir aFixedTexts[6] = &aISBNFT; 688cdf0e10cSrcweir aFixedTexts[7] = &aBooktitleFT; 689cdf0e10cSrcweir aFixedTexts[8] = &aChapterFT; 690cdf0e10cSrcweir aFixedTexts[9] = &aEditionFT; 691cdf0e10cSrcweir aFixedTexts[10] = &aEditorFT; 692cdf0e10cSrcweir aFixedTexts[11] = &aHowpublishedFT; 693cdf0e10cSrcweir aFixedTexts[12] = &aInstitutionFT; 694cdf0e10cSrcweir aFixedTexts[13] = &aJournalFT; 695cdf0e10cSrcweir aFixedTexts[14] = &aNoteFT; 696cdf0e10cSrcweir aFixedTexts[15] = &aAnnoteFT; 697cdf0e10cSrcweir aFixedTexts[16] = &aNumberFT; 698cdf0e10cSrcweir aFixedTexts[17] = &aOrganizationsFT; 699cdf0e10cSrcweir aFixedTexts[18] = &aPagesFT; 700cdf0e10cSrcweir aFixedTexts[19] = &aPublisherFT; 701cdf0e10cSrcweir aFixedTexts[20] = &aAddressFT; 702cdf0e10cSrcweir aFixedTexts[21] = &aSchoolFT; 703cdf0e10cSrcweir aFixedTexts[22] = &aSeriesFT; 704cdf0e10cSrcweir aFixedTexts[23] = &aReportTypeFT; 705cdf0e10cSrcweir aFixedTexts[24] = &aVolumeFT; 706cdf0e10cSrcweir aFixedTexts[25] = &aURLFT; 707cdf0e10cSrcweir aFixedTexts[26] = &aCustom1FT; 708cdf0e10cSrcweir aFixedTexts[27] = &aCustom2FT; 709cdf0e10cSrcweir aFixedTexts[28] = &aCustom3FT; 710cdf0e10cSrcweir aFixedTexts[29] = &aCustom4FT; 711cdf0e10cSrcweir aFixedTexts[30] = &aCustom5FT; 712cdf0e10cSrcweir 713cdf0e10cSrcweir int i; 714cdf0e10cSrcweir 715cdf0e10cSrcweir MnemonicGenerator aMnemonicGenerator; 716cdf0e10cSrcweir // init mnemonics, first register all strings 717cdf0e10cSrcweir for( i = 0 ; i < FIELD_COUNT ; ++i ) 718cdf0e10cSrcweir aMnemonicGenerator.RegisterMnemonic( aFixedStrings[ i ] ); 719cdf0e10cSrcweir 720cdf0e10cSrcweir // ... then get all strings 721cdf0e10cSrcweir for( i = 0 ; i < FIELD_COUNT ; ++i ) 722cdf0e10cSrcweir aMnemonicGenerator.CreateMnemonic( aFixedStrings[ i ] ); 723cdf0e10cSrcweir 724cdf0e10cSrcweir // set texts 725cdf0e10cSrcweir for( i = 0 ; i < FIELD_COUNT ; ++i ) 726cdf0e10cSrcweir aFixedTexts[ i ]->SetText( aFixedStrings[ i ] ); 727cdf0e10cSrcweir } 728cdf0e10cSrcweir 729cdf0e10cSrcweir IMPL_LINK(BibGeneralPage, ScrollHdl, ScrollBar*, pScroll) 730cdf0e10cSrcweir { 731cdf0e10cSrcweir sal_Bool bVertical = &aVertScroll == pScroll; 732cdf0e10cSrcweir long nOffset = 0; 733cdf0e10cSrcweir long nCurrentOffset = 0; 734cdf0e10cSrcweir if(bVertical) 735cdf0e10cSrcweir nCurrentOffset = aFixedTexts[0]->GetPosPixel().Y() - aBasePos.Y(); 736cdf0e10cSrcweir else 737cdf0e10cSrcweir nCurrentOffset = aFixedTexts[0]->GetPosPixel().X() - aBasePos.X(); 738cdf0e10cSrcweir nOffset = pScroll->IsVisible() ? pScroll->GetThumbPos() + nCurrentOffset : nCurrentOffset;; 739cdf0e10cSrcweir 740cdf0e10cSrcweir for(sal_uInt16 i = 0; i < FIELD_COUNT; i++) 741cdf0e10cSrcweir { 742cdf0e10cSrcweir ::Point aPos = aFixedTexts[i]->GetPosPixel(); 743cdf0e10cSrcweir if(bVertical) 744cdf0e10cSrcweir aPos.Y() -= nOffset; 745cdf0e10cSrcweir else 746cdf0e10cSrcweir aPos.X() -= nOffset; 747cdf0e10cSrcweir aFixedTexts[i]->SetPosPixel(aPos); 748cdf0e10cSrcweir if(aControls[i].is()) 749cdf0e10cSrcweir { 750cdf0e10cSrcweir awt::Rectangle aRect = aControls[i]->getPosSize(); 751cdf0e10cSrcweir long nX = aRect.X; 752cdf0e10cSrcweir long nY = aRect.Y; 753cdf0e10cSrcweir if(bVertical) 754cdf0e10cSrcweir nY -= nOffset; 755cdf0e10cSrcweir else 756cdf0e10cSrcweir nX -= nOffset; 757cdf0e10cSrcweir aControls[i]->setPosSize(nX, nY, 0, 0, awt::PosSize::POS); 758cdf0e10cSrcweir } 759cdf0e10cSrcweir } 760cdf0e10cSrcweir return 0; 761cdf0e10cSrcweir } 762cdf0e10cSrcweir 763cdf0e10cSrcweir void BibGeneralPage::focusGained(const awt::FocusEvent& rEvent) throw( uno::RuntimeException ) 764cdf0e10cSrcweir { 765cdf0e10cSrcweir Reference<awt::XWindow> xCtrWin(rEvent.Source, UNO_QUERY ); 766cdf0e10cSrcweir if(xCtrWin.is()) 767cdf0e10cSrcweir { 768cdf0e10cSrcweir ::Size aOutSize = aControlParentWin.GetOutputSizePixel(); 769cdf0e10cSrcweir awt::Rectangle aRect = xCtrWin->getPosSize(); 770cdf0e10cSrcweir long nX = aRect.X; 771cdf0e10cSrcweir if(nX < 0) 772cdf0e10cSrcweir { 773cdf0e10cSrcweir // left of the visible area 774cdf0e10cSrcweir aHoriScroll.SetThumbPos(aHoriScroll.GetThumbPos() + nX); 775cdf0e10cSrcweir ScrollHdl(&aHoriScroll); 776cdf0e10cSrcweir } 777cdf0e10cSrcweir else if(nX > aOutSize.Width()) 778cdf0e10cSrcweir { 779cdf0e10cSrcweir // right of the visible area 780cdf0e10cSrcweir aHoriScroll.SetThumbPos(aHoriScroll.GetThumbPos() + nX - aOutSize.Width() + aFixedTexts[0]->GetSizePixel().Width()); 781cdf0e10cSrcweir ScrollHdl(&aHoriScroll); 782cdf0e10cSrcweir } 783cdf0e10cSrcweir long nY = aRect.Y; 784cdf0e10cSrcweir if(nY < 0) 785cdf0e10cSrcweir { 786cdf0e10cSrcweir // below the visible area 787cdf0e10cSrcweir aVertScroll.SetThumbPos(aVertScroll.GetThumbPos() + nY); 788cdf0e10cSrcweir ScrollHdl(&aVertScroll); 789cdf0e10cSrcweir } 790cdf0e10cSrcweir else if(nY > aOutSize.Height()) 791cdf0e10cSrcweir { 792cdf0e10cSrcweir // over the visible area 793cdf0e10cSrcweir aVertScroll.SetThumbPos(aVertScroll.GetThumbPos() + nY - aOutSize.Height()+ aFixedTexts[0]->GetSizePixel().Height()); 794cdf0e10cSrcweir ScrollHdl(&aVertScroll); 795cdf0e10cSrcweir } 796cdf0e10cSrcweir } 797cdf0e10cSrcweir } 798cdf0e10cSrcweir 799cdf0e10cSrcweir void BibGeneralPage::focusLost(const awt::FocusEvent& ) throw( uno::RuntimeException ) 800cdf0e10cSrcweir { 801cdf0e10cSrcweir CommitActiveControl(); 802cdf0e10cSrcweir } 803cdf0e10cSrcweir 804cdf0e10cSrcweir void BibGeneralPage::disposing(const lang::EventObject& /*Source*/) throw( uno::RuntimeException ) 805cdf0e10cSrcweir { 806cdf0e10cSrcweir } 807cdf0e10cSrcweir 808cdf0e10cSrcweir void BibGeneralPage::GetFocus() 809cdf0e10cSrcweir { 810cdf0e10cSrcweir Reference< awt::XWindow >* pxControl = aControls; 811cdf0e10cSrcweir 812cdf0e10cSrcweir for( int i = FIELD_COUNT ; i ; --i, ++pxControl ) 813cdf0e10cSrcweir { 814cdf0e10cSrcweir if( pxControl->is() ) 815cdf0e10cSrcweir { 816cdf0e10cSrcweir ( *pxControl )->setFocus(); 817cdf0e10cSrcweir return; 818cdf0e10cSrcweir } 819cdf0e10cSrcweir } 820cdf0e10cSrcweir 821cdf0e10cSrcweir // fallback 822cdf0e10cSrcweir aControlParentWin.GrabFocus(); 823cdf0e10cSrcweir } 824cdf0e10cSrcweir 825cdf0e10cSrcweir sal_Bool BibGeneralPage::HandleShortCutKey( const KeyEvent& rKeyEvent ) 826cdf0e10cSrcweir { 827cdf0e10cSrcweir DBG_ASSERT( KEY_MOD2 == rKeyEvent.GetKeyCode().GetModifier(), "+BibGeneralPage::HandleShortCutKey(): this is not for me!" ); 828cdf0e10cSrcweir 829cdf0e10cSrcweir const vcl::I18nHelper& rI18nHelper = Application::GetSettings().GetUILocaleI18nHelper(); 830cdf0e10cSrcweir const xub_Unicode c = rKeyEvent.GetCharCode(); 831cdf0e10cSrcweir sal_Bool bHandled = sal_False; 832cdf0e10cSrcweir 833cdf0e10cSrcweir sal_Int16 i; 834cdf0e10cSrcweir 835cdf0e10cSrcweir typedef std::vector< sal_Int16 > sal_Int16_vector; 836cdf0e10cSrcweir 837cdf0e10cSrcweir sal_Int16_vector::size_type nFocused = 0xFFFF; // index of focused in vector, no one focused initial 838cdf0e10cSrcweir DBG_ASSERT( nFocused > 0, "*BibGeneralPage::HandleShortCutKey(): size_type works not as expected!" ); 839cdf0e10cSrcweir 840cdf0e10cSrcweir sal_Int16_vector aMatchList; 841cdf0e10cSrcweir 842cdf0e10cSrcweir for( i = 0 ; i < FIELD_COUNT ; ++i ) 843cdf0e10cSrcweir { 844cdf0e10cSrcweir if( rI18nHelper.MatchMnemonic( aFixedTexts[ i ]->GetText(), c ) ) 845cdf0e10cSrcweir { 846cdf0e10cSrcweir bHandled = sal_True; 847cdf0e10cSrcweir sal_Int16 nCtrlIndex = nFT2CtrlMap[ i ]; 848cdf0e10cSrcweir 849cdf0e10cSrcweir if( nCtrlIndex >= 0 ) 850cdf0e10cSrcweir { // store index of control 851cdf0e10cSrcweir DBG_ASSERT( aControls[ nCtrlIndex ].is(), "-BibGeneralPage::HandleShortCutKey(): valid index and no control?" ); 852cdf0e10cSrcweir 853cdf0e10cSrcweir uno::Reference< awt::XControl > xControl( aControls[ nCtrlIndex ], UNO_QUERY ); 854cdf0e10cSrcweir DBG_ASSERT( xControl.is(), "-BibGeneralPage::HandleShortCutKey(): a control wich is not a control!" ); 855cdf0e10cSrcweir 856cdf0e10cSrcweir Window* pWindow = VCLUnoHelper::GetWindow( xControl->getPeer() ); 857cdf0e10cSrcweir 858cdf0e10cSrcweir if( pWindow ) 859cdf0e10cSrcweir { 860cdf0e10cSrcweir aMatchList.push_back( nCtrlIndex ); 861cdf0e10cSrcweir if( pWindow->HasChildPathFocus() ) 862cdf0e10cSrcweir { // save focused control 863cdf0e10cSrcweir DBG_ASSERT( nFocused == 0xFFFF, "+BibGeneralPage::HandleShortCutKey(): more than one with focus?!" ); 864cdf0e10cSrcweir DBG_ASSERT( aMatchList.size() > 0, "+BibGeneralPage::HandleShortCutKey(): push_back and no content?!" ); 865cdf0e10cSrcweir nFocused = aMatchList.size() - 1; 866cdf0e10cSrcweir } 867cdf0e10cSrcweir } 868cdf0e10cSrcweir } 869cdf0e10cSrcweir } 870cdf0e10cSrcweir } 871cdf0e10cSrcweir 872cdf0e10cSrcweir if( bHandled ) 873cdf0e10cSrcweir { 874cdf0e10cSrcweir DBG_ASSERT( aMatchList.size() > 0, "*BibGeneralPage::HandleShortCutKey(): be prepared to crash..." ); 875cdf0e10cSrcweir 876cdf0e10cSrcweir if( nFocused >= ( aMatchList.size() - 1 ) ) 877cdf0e10cSrcweir // >=... includes 0xFFFF 878cdf0e10cSrcweir // no one or last focused, take first 879cdf0e10cSrcweir nFocused = 0; 880cdf0e10cSrcweir else 881cdf0e10cSrcweir // take next one 882cdf0e10cSrcweir nFocused++; 883cdf0e10cSrcweir 884cdf0e10cSrcweir aControls[ aMatchList[ nFocused ] ]->setFocus(); 885cdf0e10cSrcweir } 886cdf0e10cSrcweir 887cdf0e10cSrcweir return bHandled; 888cdf0e10cSrcweir } 889