| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sw.hxx" |
| |
| #ifdef SW_DLLIMPLEMENTATION |
| #undef SW_DLLIMPLEMENTATION |
| #endif |
| |
| |
| |
| #include "cmdid.h" |
| #include <tools/list.hxx> |
| #include "swmodule.hxx" |
| #include "view.hxx" |
| #include "wrtsh.hxx" |
| #include "globals.hrc" |
| #include "helpid.h" |
| |
| |
| #include <sfx2/styfitem.hxx> |
| |
| #include "uitool.hxx" |
| #include "ccoll.hxx" |
| #include "fmtcol.hxx" |
| #include "hintids.hxx" |
| #include "docsh.hxx" |
| #include "docstyle.hxx" |
| #include "hints.hxx" |
| |
| #include "chrdlg.hrc" |
| #include "ccoll.hrc" |
| #include <vcl/svapp.hxx> |
| |
| #include "swuiccoll.hxx" |
| |
| static sal_uInt16 __FAR_DATA aPageRg[] = { |
| FN_COND_COLL, FN_COND_COLL, |
| 0 |
| }; |
| |
| // Achtung im Code wird dieses Array direkt (0, 1, ...) indiziert |
| static long nTabs[] = |
| { 2, // Number of Tabs |
| 0, 100 |
| }; |
| |
| /**************************************************************************** |
| Page: Ctor |
| ****************************************************************************/ |
| |
| |
| SwCondCollPage::SwCondCollPage(Window *pParent, const SfxItemSet &rSet) |
| |
| : SfxTabPage(pParent, SW_RES(TP_CONDCOLL), rSet), |
| aConditionFL( this, SW_RES( FL_CONDITION )), |
| aConditionCB( this, SW_RES( CB_CONDITION ) ), |
| aContextFT ( this, SW_RES( FT_CONTEXT ) ), |
| aUsedFT ( this, SW_RES( FT_USED ) ), |
| aTbLinks( this, SW_RES( TB_CONDCOLLS ) ), |
| aStyleFT ( this, SW_RES( FT_STYLE ) ), |
| aStyleLB ( this, SW_RES( LB_STYLE ) ), |
| aFilterLB ( this, SW_RES( LB_FILTER ) ), |
| aRemovePB ( this, SW_RES( PB_REMOVE ) ), |
| aAssignPB ( this, SW_RES( PB_ASSIGN ) ), |
| sNoTmpl ( SW_RES( STR_NOTEMPL ) ), |
| aStrArr ( SW_RES( STR_REGIONS ) ), |
| rSh(::GetActiveView()->GetWrtShell()), |
| pCmds( SwCondCollItem::GetCmds() ), |
| pFmt(0), |
| |
| bNewTemplate(sal_False) |
| { |
| FreeResource(); |
| SetExchangeSupport(); |
| |
| aRemovePB.SetAccessibleRelationMemberOf(&aConditionFL); |
| aAssignPB.SetAccessibleRelationMemberOf(&aConditionFL); |
| aTbLinks.SetAccessibleRelationLabeledBy(&aConditionCB); |
| |
| // Handler installieren |
| aConditionCB.SetClickHdl( LINK(this, SwCondCollPage, OnOffHdl)); |
| aTbLinks.SetDoubleClickHdl( LINK(this, SwCondCollPage, AssignRemoveHdl )); |
| aStyleLB.SetDoubleClickHdl( LINK(this, SwCondCollPage, AssignRemoveHdl )); |
| aRemovePB.SetClickHdl( LINK(this, SwCondCollPage, AssignRemoveHdl )); |
| aAssignPB.SetClickHdl( LINK(this, SwCondCollPage, AssignRemoveHdl )); |
| aTbLinks.SetSelectHdl( LINK(this, SwCondCollPage, SelectHdl)); |
| aStyleLB.SetSelectHdl( LINK(this, SwCondCollPage, SelectHdl)); |
| aFilterLB.SetSelectHdl( LINK(this, SwCondCollPage, SelectHdl)); |
| |
| aTbLinks.SetStyle(aTbLinks.GetStyle()|WB_HSCROLL|WB_CLIPCHILDREN); |
| aTbLinks.SetSelectionMode( SINGLE_SELECTION ); |
| aTbLinks.SetTabs( &nTabs[0], MAP_APPFONT ); |
| aTbLinks.Resize(); // OS: Hack fuer richtige Selektion |
| aTbLinks.SetSpaceBetweenEntries( 0 ); |
| aTbLinks.SetHelpId(HID_COND_COLL_TABLIST); |
| |
| SfxStyleFamilies aFamilies(SW_RES(DLG_STYLE_DESIGNER)); |
| const SfxStyleFamilyItem* pFamilyItem = 0; |
| sal_uInt16 nCount = aFamilies.Count(); |
| sal_uInt16 i; |
| |
| for( i = 0; i < nCount; ++i) |
| { |
| if(SFX_STYLE_FAMILY_PARA == (sal_uInt16)(pFamilyItem = aFamilies.GetObject(i))->GetFamily()) |
| break; |
| } |
| |
| if( pFamilyItem ) |
| { |
| const SfxStyleFilter& rFilterList = pFamilyItem->GetFilterList(); |
| for( i = 0; i < rFilterList.Count(); ++i) |
| { |
| aFilterLB.InsertEntry(rFilterList.GetObject(i)->aName); |
| sal_uInt16* pFilter = new sal_uInt16(rFilterList.GetObject(i)->nFlags); |
| aFilterLB.SetEntryData(i, pFilter); |
| } |
| } |
| aFilterLB.SelectEntryPos(1); |
| |
| aTbLinks.Show(); |
| |
| } |
| |
| /**************************************************************************** |
| Page: Dtor |
| ****************************************************************************/ |
| |
| |
| __EXPORT SwCondCollPage::~SwCondCollPage() |
| { |
| for(sal_uInt16 i = 0; i < aFilterLB.GetEntryCount(); ++i) |
| delete (sal_uInt16*)aFilterLB.GetEntryData(i); |
| |
| } |
| |
| |
| int __EXPORT SwCondCollPage::DeactivatePage(SfxItemSet * _pSet) |
| { |
| if( _pSet ) |
| FillItemSet(*_pSet); |
| |
| return LEAVE_PAGE; |
| } |
| |
| /**************************************************************************** |
| Page: Factory |
| ****************************************************************************/ |
| |
| |
| SfxTabPage* __EXPORT SwCondCollPage::Create(Window *pParent, const SfxItemSet &rSet) |
| { |
| return new SwCondCollPage(pParent, rSet); |
| } |
| |
| /**************************************************************************** |
| Page: FillItemSet-Overload |
| ****************************************************************************/ |
| |
| |
| sal_Bool __EXPORT SwCondCollPage::FillItemSet(SfxItemSet &rSet) |
| { |
| sal_Bool bModified = sal_True; |
| SwCondCollItem aCondItem; |
| for(sal_uInt16 i = 0; i < aStrArr.Count(); i++) |
| { |
| String sEntry = aTbLinks.GetEntryText(i, 1); |
| aCondItem.SetStyle( &sEntry, i); |
| } |
| rSet.Put(aCondItem); |
| return bModified; |
| } |
| |
| /**************************************************************************** |
| Page: Reset-Overload |
| ****************************************************************************/ |
| |
| |
| void __EXPORT SwCondCollPage::Reset(const SfxItemSet &/*rSet*/) |
| { |
| if(bNewTemplate) |
| aConditionCB.Enable(); |
| if(RES_CONDTXTFMTCOLL == pFmt->Which()) |
| aConditionCB.Check(); |
| OnOffHdl(&aConditionCB); |
| |
| aTbLinks.Clear(); |
| |
| SfxStyleSheetBasePool* pPool = rSh.GetView().GetDocShell()->GetStyleSheetPool(); |
| pPool->SetSearchMask(SFX_STYLE_FAMILY_PARA, SFXSTYLEBIT_ALL); |
| aStyleLB.Clear(); |
| const SfxStyleSheetBase* pBase = pPool->First(); |
| while( pBase ) |
| { |
| if(!pFmt || pBase->GetName() != pFmt->GetName()) |
| aStyleLB.InsertEntry(pBase->GetName()); |
| pBase = pPool->Next(); |
| } |
| aStyleLB.SelectEntryPos(0); |
| |
| for( sal_uInt16 n = 0; n < aStrArr.Count(); n++) |
| { |
| String aEntry( aStrArr.GetString(n) ); |
| aEntry += '\t'; |
| |
| const SwCollCondition* pCond = 0; |
| if( pFmt && RES_CONDTXTFMTCOLL == pFmt->Which() && |
| 0 != ( pCond = ((SwConditionTxtFmtColl*)pFmt)-> |
| HasCondition( SwCollCondition( 0, pCmds[n].nCnd, pCmds[n].nSubCond ) ) ) |
| && pCond->GetTxtFmtColl() ) |
| { |
| aEntry += pCond->GetTxtFmtColl()->GetName(); |
| } |
| |
| SvLBoxEntry* pE = aTbLinks.InsertEntryToColumn( aEntry, n ); |
| if(0 == n) |
| aTbLinks.Select(pE); |
| } |
| |
| } |
| |
| /**************************************************************************** |
| |
| ****************************************************************************/ |
| |
| |
| sal_uInt16* __EXPORT SwCondCollPage::GetRanges() |
| { |
| return aPageRg; |
| } |
| |
| |
| /**************************************************************************** |
| |
| ****************************************************************************/ |
| |
| |
| IMPL_LINK( SwCondCollPage, OnOffHdl, CheckBox*, pBox ) |
| { |
| const sal_Bool bEnable = pBox->IsChecked(); |
| aContextFT.Enable( bEnable ); |
| aUsedFT .Enable( bEnable ); |
| aTbLinks .EnableList( bEnable != sal_False ); |
| aStyleFT .Enable( bEnable ); |
| aStyleLB .Enable( bEnable ); |
| aFilterLB .Enable( bEnable ); |
| aRemovePB .Enable( bEnable ); |
| aAssignPB .Enable( bEnable ); |
| if( bEnable ) |
| SelectHdl(0); |
| return 0; |
| } |
| |
| /**************************************************************************** |
| |
| ****************************************************************************/ |
| |
| |
| IMPL_LINK( SwCondCollPage, AssignRemoveHdl, PushButton*, pBtn) |
| { |
| SvLBoxEntry* pE = aTbLinks.FirstSelected(); |
| sal_uLong nPos; |
| if( !pE || LISTBOX_ENTRY_NOTFOUND == |
| ( nPos = aTbLinks.GetModel()->GetAbsPos( pE ) ) ) |
| { |
| ASSERT( pE, "wo kommt der leere Eintrag her?" ); |
| return 0; |
| } |
| |
| String sSel = aStrArr.GetString( sal_uInt16(nPos) ); |
| sSel += '\t'; |
| |
| const sal_Bool bAssEnabled = pBtn != &aRemovePB && aAssignPB.IsEnabled(); |
| aAssignPB.Enable( !bAssEnabled ); |
| aRemovePB.Enable( bAssEnabled ); |
| if ( bAssEnabled ) |
| sSel += aStyleLB.GetSelectEntry(); |
| |
| aTbLinks.SetUpdateMode(sal_False); |
| aTbLinks.GetModel()->Remove(pE); |
| pE = aTbLinks.InsertEntryToColumn(sSel, nPos); |
| aTbLinks.Select(pE); |
| aTbLinks.MakeVisible(pE); |
| aTbLinks.SetUpdateMode(sal_True); |
| return 0; |
| } |
| |
| /**************************************************************************** |
| |
| ****************************************************************************/ |
| |
| |
| IMPL_LINK( SwCondCollPage, SelectHdl, ListBox*, pBox) |
| { |
| if(pBox == &aFilterLB) |
| { |
| aStyleLB.Clear(); |
| sal_uInt16 nSearchFlags = pBox->GetSelectEntryPos(); |
| nSearchFlags = *(sal_uInt16*)aFilterLB.GetEntryData(nSearchFlags); |
| SfxStyleSheetBasePool* pPool = rSh.GetView().GetDocShell()->GetStyleSheetPool(); |
| pPool->SetSearchMask(SFX_STYLE_FAMILY_PARA, nSearchFlags); |
| const SfxStyleSheetBase* pBase = pPool->First(); |
| while( pBase ) |
| { |
| if(!pFmt || pBase->GetName() != pFmt->GetName()) |
| aStyleLB.InsertEntry(pBase->GetName()); |
| pBase = pPool->Next(); |
| } |
| aStyleLB.SelectEntryPos(0); |
| SelectHdl(&aStyleLB); |
| |
| } |
| else |
| { |
| String sTbEntry; |
| SvLBoxEntry* pE = aTbLinks.FirstSelected(); |
| if(pE) |
| sTbEntry = aTbLinks.GetEntryText(pE); |
| sTbEntry = sTbEntry.GetToken(1, '\t'); |
| String sStyle = aStyleLB.GetSelectEntry(); |
| |
| aAssignPB.Enable( sStyle != sTbEntry && aConditionCB.IsChecked() ); |
| |
| if(pBox != &aStyleLB) |
| aRemovePB.Enable( aConditionCB.IsChecked() && sTbEntry.Len() ); |
| } |
| return 0; |
| } |
| |
| /**************************************************************************** |
| |
| ****************************************************************************/ |
| |
| |
| void SwCondCollPage::SetCollection( SwFmt* pFormat, sal_Bool bNew ) |
| { |
| pFmt = pFormat; |
| bNewTemplate = bNew; |
| } |