LCOV - code coverage report
Current view: top level - sw/source/ui/misc - glossary.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 604 0.0 %
Date: 2014-11-03 Functions: 0 59 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <hintids.hxx>
      21             : 
      22             : #include <vcl/menu.hxx>
      23             : #include <vcl/layout.hxx>
      24             : #include <vcl/help.hxx>
      25             : #include <svl/stritem.hxx>
      26             : #include <unotools/pathoptions.hxx>
      27             : #include <unotools/lingucfg.hxx>
      28             : #include <sfx2/request.hxx>
      29             : #include <sfx2/fcontnr.hxx>
      30             : 
      31             : #include <svx/svxdlg.hxx>
      32             : #include <svx/dialogs.hrc>
      33             : #include <editeng/acorrcfg.hxx>
      34             : #include <sfx2/viewfrm.hxx>
      35             : #include <unocrsr.hxx>
      36             : #include <unotools.hxx>
      37             : #include <comphelper/processfactory.hxx>
      38             : #include <comphelper/string.hxx>
      39             : #include <ucbhelper/content.hxx>
      40             : #include <com/sun/star/text/AutoTextContainer.hpp>
      41             : #include <com/sun/star/ui/dialogs/XFilePicker.hpp>
      42             : #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
      43             : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
      44             : #include <svl/urihelper.hxx>
      45             : #include <unotools/charclass.hxx>
      46             : #include <svtools/treelistentry.hxx>
      47             : #include <swwait.hxx>
      48             : #include <swtypes.hxx>
      49             : #include <wrtsh.hxx>
      50             : #include <view.hxx>
      51             : #include <basesh.hxx>
      52             : #include <glossary.hxx>
      53             : #include <gloshdl.hxx>
      54             : #include <glosbib.hxx>
      55             : #include <initui.hxx>
      56             : #include <glosdoc.hxx>
      57             : #include <macassgn.hxx>
      58             : #include <swevent.hxx>
      59             : #include <docsh.hxx>
      60             : #include <shellio.hxx>
      61             : 
      62             : #include <cmdid.h>
      63             : #include <helpid.h>
      64             : #include <swerror.h>
      65             : #include <globals.hrc>
      66             : #include <misc.hrc>
      67             : #include <swmodule.hxx>
      68             : #include <sfx2/filedlghelper.hxx>
      69             : 
      70             : #include <boost/scoped_ptr.hpp>
      71             : 
      72             : #include "access.hrc"
      73             : 
      74             : using namespace ::com::sun::star;
      75             : using namespace ::com::sun::star::lang;
      76             : using namespace ::com::sun::star::uno;
      77             : using namespace ::com::sun::star::text;
      78             : using namespace ::com::sun::star::ucb;
      79             : using namespace ::com::sun::star::ui::dialogs;
      80             : using namespace ::ucbhelper;
      81             : using namespace ::sfx2;
      82             : 
      83           0 : static OUString lcl_GetValidShortCut( const OUString& rName )
      84             : {
      85           0 :     const sal_Int32 nSz = rName.getLength();
      86             : 
      87           0 :     if ( 0 == nSz )
      88           0 :         return rName;
      89             : 
      90           0 :     sal_Int32 nStart = 1;
      91           0 :     while( rName[nStart-1]==' ' && nStart < nSz )
      92           0 :         nStart++;
      93             : 
      94           0 :     OUString aBuf = OUString(rName[nStart-1]);
      95             : 
      96           0 :     for( ; nStart < nSz; ++nStart )
      97             :     {
      98           0 :         if( rName[nStart-1]==' ' && rName[nStart]!=' ')
      99           0 :             aBuf += OUString(rName[nStart]);
     100             :     }
     101           0 :     return aBuf;
     102             : }
     103             : 
     104           0 : struct GroupUserData
     105             : {
     106             :     OUString    sGroupName;
     107             :     sal_uInt16  nPathIdx;
     108             :     bool        bReadonly;
     109             : 
     110           0 :     GroupUserData()
     111             :         : nPathIdx(0),
     112           0 :           bReadonly(false)  {}
     113             : };
     114             : 
     115             : // dialog for new block name
     116           0 : class SwNewGlosNameDlg : public ModalDialog
     117             : {
     118             :     Edit*        m_pNewName;
     119             :     TextFilter   m_aNoSpaceFilter;
     120             :     Edit*        m_pNewShort;
     121             :     OKButton*    m_pOk;
     122             :     Edit*        m_pOldName;
     123             :     Edit*        m_pOldShort;
     124             : 
     125             : protected:
     126             :     DECL_LINK( Modify, Edit * );
     127             :     DECL_LINK(Rename, void *);
     128             : 
     129             : public:
     130             :     SwNewGlosNameDlg( vcl::Window* pParent,
     131             :                       const OUString& rOldName,
     132             :                       const OUString& rOldShort );
     133             : 
     134           0 :     OUString GetNewName()  const { return m_pNewName->GetText(); }
     135           0 :     OUString GetNewShort() const { return m_pNewShort->GetText(); }
     136             : };
     137             : 
     138           0 : SwNewGlosNameDlg::SwNewGlosNameDlg(vcl::Window* pParent,
     139             :                             const OUString& rOldName,
     140             :                             const OUString& rOldShort )
     141             :     : ModalDialog(pParent, "RenameAutoTextDialog",
     142           0 :         "modules/swriter/ui/renameautotextdialog.ui")
     143             : {
     144           0 :     get(m_pNewName, "newname");
     145           0 :     get(m_pNewShort, "newsc");
     146           0 :     m_pNewShort->SetTextFilter(&m_aNoSpaceFilter);
     147           0 :     get(m_pOk, "ok");
     148           0 :     get(m_pOldName, "oldname");
     149           0 :     get(m_pOldShort, "oldsc");
     150             : 
     151           0 :     m_pOldName->SetText( rOldName );
     152           0 :     m_pOldShort->SetText( rOldShort );
     153           0 :     m_pNewName->SetModifyHdl(LINK(this, SwNewGlosNameDlg, Modify ));
     154           0 :     m_pNewShort->SetModifyHdl(LINK(this, SwNewGlosNameDlg, Modify ));
     155           0 :     m_pOk->SetClickHdl(LINK(this, SwNewGlosNameDlg, Rename ));
     156           0 :     m_pNewName->GrabFocus();
     157           0 : }
     158             : 
     159             : // query / set currently set group
     160           0 : OUString SwGlossaryDlg::GetCurrGroup()
     161             : {
     162           0 :     if( !::GetCurrGlosGroup().isEmpty() )
     163           0 :         return ::GetCurrGlosGroup();
     164           0 :     return SwGlossaries::GetDefName();
     165             : }
     166             : 
     167           0 : void SwGlossaryDlg::SetActGroup(const OUString &rGrp)
     168             : {
     169           0 :     ::SetCurrGlosGroup(rGrp);
     170           0 : }
     171             : 
     172           0 : SwGlossaryDlg::SwGlossaryDlg(SfxViewFrame* pViewFrame,
     173             :                             SwGlossaryHdl * pGlosHdl, SwWrtShell *pWrtShell)
     174           0 :     : SvxStandardDialog(&pViewFrame->GetWindow(), "AutoTextDialog",
     175             :         "modules/swriter/ui/autotext.ui")
     176             :     , sReadonlyPath(SW_RESSTR(STR_READONLY_PATH))
     177             :     , pExampleFrame(0)
     178             :     , pGlossaryHdl(pGlosHdl)
     179             :     , bResume(false)
     180           0 :     , bSelection(pWrtShell->IsSelection())
     181             :     , bReadOnly(false)
     182             :     , bIsOld(false)
     183             :     , bIsDocReadOnly(false)
     184           0 :     , pSh(pWrtShell)
     185             : {
     186           0 :     get(m_pInsertTipCB, "inserttip");
     187           0 :     get(m_pNameED, "name");
     188           0 :     get(m_pShortNameLbl, "shortnameft");
     189           0 :     get(m_pShortNameEdit, "shortname");
     190           0 :     m_pShortNameEdit->SetTextFilter(&m_aNoSpaceFilter);
     191           0 :     get(m_pCategoryBox, "category");
     192           0 :     get(m_pFileRelCB, "relfile");
     193           0 :     get(m_pNetRelCB, "relnet");
     194           0 :     get(m_pInsertBtn, "insert");
     195           0 :     get(m_pBibBtn, "categories");
     196           0 :     get(m_pPathBtn, "path");
     197           0 :     get(m_pExampleWIN, "example");
     198           0 :     get(m_pEditBtn, "autotext");
     199             : 
     200           0 :     SvtLinguConfig aLocalLinguConfig;
     201             : 
     202           0 :     PopupMenu *pMenu = m_pEditBtn->GetPopupMenu();
     203             :     assert(pMenu);
     204           0 :     pMenu->SetActivateHdl(LINK(this,SwGlossaryDlg,EnableHdl));
     205           0 :     pMenu->SetSelectHdl(LINK(this,SwGlossaryDlg,MenuHdl));
     206           0 :     m_pEditBtn->SetSelectHdl(LINK(this,SwGlossaryDlg,EditHdl));
     207           0 :     m_pPathBtn->SetClickHdl(LINK(this, SwGlossaryDlg, PathHdl));
     208             : 
     209           0 :     m_pNameED->SetModifyHdl(LINK(this,SwGlossaryDlg,NameModify));
     210           0 :     m_pShortNameEdit->SetModifyHdl(LINK(this,SwGlossaryDlg,NameModify));
     211             : 
     212           0 :     m_pCategoryBox->SetDoubleClickHdl(LINK(this,SwGlossaryDlg, NameDoubleClick));
     213           0 :     m_pCategoryBox->SetSelectHdl(LINK(this,SwGlossaryDlg,GrpSelect));
     214           0 :     m_pBibBtn->SetClickHdl(LINK(this,SwGlossaryDlg,BibHdl));
     215             : 
     216           0 :     m_pInsertBtn->SetClickHdl(LINK(this,SwGlossaryDlg,InsertHdl));
     217             : 
     218           0 :     ShowPreview();
     219             : 
     220           0 :     bIsDocReadOnly = pSh->GetView().GetDocShell()->IsReadOnly() ||
     221           0 :                       pSh->HasReadonlySel();
     222           0 :     if( bIsDocReadOnly )
     223           0 :         m_pInsertBtn->Enable(false);
     224           0 :     m_pNameED->GrabFocus();
     225           0 :     m_pCategoryBox->SetStyle(m_pCategoryBox->GetStyle()|WB_HASBUTTONS|WB_HASBUTTONSATROOT|WB_HSCROLL|WB_VSCROLL|WB_CLIPCHILDREN|WB_SORT);
     226           0 :     m_pCategoryBox->GetModel()->SetSortMode(SortAscending);
     227           0 :     m_pCategoryBox->SetHighlightRange();   // select over full width
     228           0 :     m_pCategoryBox->SetNodeDefaultImages( );
     229             : 
     230           0 :     Init();
     231           0 : }
     232             : 
     233           0 : SwGlossaryDlg::~SwGlossaryDlg()
     234             : {
     235           0 :     m_pCategoryBox->Clear();
     236           0 :     delete pExampleFrame;
     237           0 : }
     238             : 
     239             : // select new group
     240           0 : IMPL_LINK( SwGlossaryDlg, GrpSelect, SvTreeListBox *, pBox )
     241             : {
     242           0 :     SvTreeListEntry* pEntry = pBox->FirstSelected();
     243           0 :     if(!pEntry)
     244           0 :         return 0;
     245           0 :     SvTreeListEntry* pParent = pBox->GetParent(pEntry) ? pBox->GetParent(pEntry) : pEntry;
     246           0 :     GroupUserData* pGroupData = (GroupUserData*)pParent->GetUserData();
     247             :     ::SetCurrGlosGroup(pGroupData->sGroupName
     248           0 :         + OUString(GLOS_DELIM)
     249           0 :         + OUString::number(pGroupData->nPathIdx));
     250           0 :     pGlossaryHdl->SetCurGroup(::GetCurrGlosGroup());
     251             :     // set current text block
     252           0 :     bReadOnly = pGlossaryHdl->IsReadOnly();
     253           0 :     EnableShortName( !bReadOnly );
     254           0 :     m_pEditBtn->Enable(!bReadOnly);
     255           0 :     bIsOld = pGlossaryHdl->IsOld();
     256           0 :     if( pParent != pEntry)
     257             :     {
     258           0 :         OUString aName(pBox->GetEntryText(pEntry));
     259           0 :         m_pNameED->SetText(aName);
     260           0 :         m_pShortNameEdit->SetText(*reinterpret_cast<OUString*>(pEntry->GetUserData()));
     261           0 :         m_pInsertBtn->Enable( !bIsDocReadOnly);
     262           0 :         ShowAutoText(::GetCurrGlosGroup(), m_pShortNameEdit->GetText());
     263             :     }
     264             :     else
     265             :     {
     266           0 :         m_pNameED->SetText("");
     267           0 :         m_pShortNameEdit->SetText("");
     268           0 :         m_pShortNameEdit->Enable(false);
     269           0 :         ShowAutoText("", "");
     270             :     }
     271             :     // update controls
     272           0 :     NameModify(m_pShortNameEdit);
     273           0 :     if( SfxRequest::HasMacroRecorder( pSh->GetView().GetViewFrame() ) )
     274             :     {
     275           0 :         SfxRequest aReq( pSh->GetView().GetViewFrame(), FN_SET_ACT_GLOSSARY );
     276           0 :         OUString sTemp(::GetCurrGlosGroup());
     277             :         // the zeroth path is not being recorded!
     278           0 :         if (sTemp.getToken(1, GLOS_DELIM).startsWith("0"))
     279           0 :             sTemp = sTemp.getToken(0, GLOS_DELIM);
     280           0 :         aReq.AppendItem(SfxStringItem(FN_SET_ACT_GLOSSARY, sTemp));
     281           0 :         aReq.Done();
     282             :     }
     283           0 :     return 0;
     284             : }
     285             : 
     286           0 : void SwGlossaryDlg::Apply()
     287             : {
     288           0 :     const OUString aGlosName(m_pShortNameEdit->GetText());
     289           0 :     if (!aGlosName.isEmpty())
     290             :     {
     291           0 :         pGlossaryHdl->InsertGlossary(aGlosName);
     292             :     }
     293           0 :     if( SfxRequest::HasMacroRecorder( pSh->GetView().GetViewFrame() ) )
     294             :     {
     295           0 :         SfxRequest aReq( pSh->GetView().GetViewFrame(), FN_INSERT_GLOSSARY );
     296           0 :         OUString sTemp(::GetCurrGlosGroup());
     297             :         // the zeroth path is not being recorded!
     298           0 :         if (sTemp.getToken(1, GLOS_DELIM).startsWith("0"))
     299           0 :             sTemp = sTemp.getToken(0, GLOS_DELIM);
     300           0 :         aReq.AppendItem(SfxStringItem(FN_INSERT_GLOSSARY, sTemp));
     301           0 :         aReq.AppendItem(SfxStringItem(FN_PARAM_1, aGlosName));
     302           0 :         aReq.Done();
     303           0 :     }
     304           0 : }
     305             : 
     306           0 : void SwGlossaryDlg::EnableShortName(bool bOn)
     307             : {
     308           0 :     m_pShortNameLbl->Enable(bOn);
     309           0 :     m_pShortNameEdit->Enable(bOn);
     310           0 : }
     311             : 
     312             : // does the title exist in the selected group?
     313           0 : SvTreeListEntry* SwGlossaryDlg::DoesBlockExist(const OUString& rBlock,
     314             :                 const OUString& rShort)
     315             : {
     316             :     // look for possible entry in TreeListBox
     317           0 :     SvTreeListEntry* pEntry = m_pCategoryBox->FirstSelected();
     318           0 :     if(pEntry)
     319             :     {
     320           0 :         if(m_pCategoryBox->GetParent(pEntry))
     321           0 :             pEntry = m_pCategoryBox->GetParent(pEntry);
     322           0 :         sal_uInt32 nChildCount = m_pCategoryBox->GetChildCount( pEntry );
     323           0 :         for(sal_uInt32 i = 0; i < nChildCount; i++)
     324             :         {
     325           0 :             SvTreeListEntry* pChild = m_pCategoryBox->GetEntry( pEntry, i );
     326           0 :             if (rBlock == m_pCategoryBox->GetEntryText(pChild) &&
     327           0 :                 (rShort.isEmpty() ||
     328           0 :                  rShort==*reinterpret_cast<OUString*>(pChild->GetUserData()))
     329             :                )
     330             :             {
     331           0 :                 return pChild;
     332             :             }
     333             :         }
     334             :     }
     335           0 :     return 0;
     336             : }
     337             : 
     338           0 : IMPL_LINK( SwGlossaryDlg, NameModify, Edit *, pEdit )
     339             : {
     340           0 :     const OUString aName(m_pNameED->GetText());
     341           0 :     bool bNameED = pEdit == m_pNameED;
     342           0 :     if( aName.isEmpty() )
     343             :     {
     344           0 :         if(bNameED)
     345           0 :             m_pShortNameEdit->SetText(aName);
     346           0 :         m_pInsertBtn->Enable(false);
     347           0 :         return 0;
     348             :     }
     349           0 :     const bool bNotFound = !DoesBlockExist(aName, bNameED ? OUString() : pEdit->GetText());
     350           0 :     if(bNameED)
     351             :     {
     352             :             // did the text get in to the Listbbox in the Edit with a click?
     353           0 :         if(bNotFound)
     354             :         {
     355           0 :             m_pShortNameEdit->SetText( lcl_GetValidShortCut( aName ) );
     356           0 :             EnableShortName();
     357             :         }
     358             :         else
     359             :         {
     360           0 :             m_pShortNameEdit->SetText(pGlossaryHdl->GetGlossaryShortName(aName));
     361           0 :             EnableShortName(!bReadOnly);
     362             :         }
     363           0 :         m_pInsertBtn->Enable(!bNotFound && !bIsDocReadOnly);
     364             :     }
     365             :     else
     366             :     {
     367             :         //ShortNameEdit
     368           0 :         if(!bNotFound)
     369             :         {
     370           0 :             bool bEnable = !bNotFound;
     371           0 :             bEnable &= !bIsDocReadOnly;
     372           0 :             m_pInsertBtn->Enable(bEnable);
     373             :         }
     374             :     }
     375           0 :     return 0;
     376             : }
     377             : 
     378           0 : IMPL_LINK_INLINE_START( SwGlossaryDlg, NameDoubleClick, SvTreeListBox*, pBox )
     379             : {
     380           0 :     SvTreeListEntry* pEntry = pBox->FirstSelected();
     381           0 :     if(pBox->GetParent(pEntry) && !bIsDocReadOnly)
     382           0 :         EndDialog( RET_OK );
     383           0 :     return 0;
     384             : }
     385           0 : IMPL_LINK_INLINE_END( SwGlossaryDlg, NameDoubleClick, SvTreeListBox*, pBox )
     386             : 
     387           0 : IMPL_LINK( SwGlossaryDlg, EnableHdl, Menu *, pMn )
     388             : {
     389           0 :     SvTreeListEntry* pEntry = m_pCategoryBox->FirstSelected();
     390             : 
     391           0 :     const OUString aEditText(m_pNameED->GetText());
     392           0 :     const bool bHasEntry = !aEditText.isEmpty() && !m_pShortNameEdit->GetText().isEmpty();
     393           0 :     const bool bExists = 0 != DoesBlockExist(aEditText, m_pShortNameEdit->GetText());
     394           0 :     const bool bIsGroup = pEntry && !m_pCategoryBox->GetParent(pEntry);
     395           0 :     pMn->EnableItem("new", bSelection && bHasEntry && !bExists);
     396           0 :     pMn->EnableItem("newtext", bSelection && bHasEntry && !bExists);
     397           0 :     pMn->EnableItem("copy", bExists && !bIsGroup);
     398           0 :     pMn->EnableItem("replace", bSelection && bExists && !bIsGroup && !bIsOld );
     399           0 :     pMn->EnableItem("replacetext", bSelection && bExists && !bIsGroup && !bIsOld );
     400           0 :     pMn->EnableItem("edit", bExists && !bIsGroup );
     401           0 :     pMn->EnableItem("rename", bExists && !bIsGroup );
     402           0 :     pMn->EnableItem("delete", bExists && !bIsGroup );
     403           0 :     pMn->EnableItem("macro", bExists && !bIsGroup && !bIsOld &&
     404           0 :                                     !pGlossaryHdl->IsReadOnly() );
     405           0 :     pMn->EnableItem("import", bIsGroup && !bIsOld && !pGlossaryHdl->IsReadOnly() );
     406           0 :     return 1;
     407             : }
     408             : 
     409           0 : IMPL_LINK( SwGlossaryDlg, MenuHdl, Menu *, pMn )
     410             : {
     411           0 :     OString sItemIdent(pMn->GetCurItemIdent());
     412             : 
     413           0 :     if (sItemIdent == "replace")
     414             :     {
     415           0 :         pGlossaryHdl->NewGlossary(m_pNameED->GetText(),
     416           0 :                                   m_pShortNameEdit->GetText(),
     417           0 :                                   false, false);
     418             :     }
     419           0 :     else if (sItemIdent == "replacetext")
     420             :     {
     421           0 :         pGlossaryHdl->NewGlossary(m_pNameED->GetText(),
     422           0 :                                   m_pShortNameEdit->GetText(),
     423           0 :                                   false, true);
     424             :     }
     425           0 :     else if (sItemIdent == "new" || sItemIdent == "newtext")
     426             :     {
     427           0 :         bool bNoAttr = sItemIdent == "newtext";
     428             : 
     429           0 :         const OUString aStr(m_pNameED->GetText());
     430           0 :         const OUString aShortName(m_pShortNameEdit->GetText());
     431           0 :         if(pGlossaryHdl->HasShortName(aShortName))
     432             :         {
     433           0 :             MessageDialog(this, SW_RES(STR_DOUBLE_SHORTNAME), VCL_MESSAGE_INFO).Execute();
     434           0 :             m_pShortNameEdit->SetSelection(Selection(0, SELECTION_MAX));
     435           0 :             m_pShortNameEdit->GrabFocus();
     436           0 :             return 1;
     437             :         }
     438           0 :         if(pGlossaryHdl->NewGlossary(aStr, aShortName, false, bNoAttr ))
     439             :         {
     440           0 :             SvTreeListEntry* pEntry = m_pCategoryBox->FirstSelected();
     441           0 :             if(m_pCategoryBox->GetParent(pEntry))
     442           0 :                 pEntry = m_pCategoryBox->GetParent(pEntry);
     443             : 
     444           0 :             SvTreeListEntry* pChild = m_pCategoryBox->InsertEntry(aStr, pEntry);
     445           0 :             pChild->SetUserData(new OUString(aShortName));
     446           0 :             m_pNameED->SetText(aStr);
     447           0 :             m_pShortNameEdit->SetText(aShortName);
     448           0 :             NameModify(m_pNameED);       // for toggling the buttons
     449             : 
     450           0 :             if( SfxRequest::HasMacroRecorder( pSh->GetView().GetViewFrame() ) )
     451             :             {
     452           0 :                 SfxRequest aReq(pSh->GetView().GetViewFrame(), FN_NEW_GLOSSARY);
     453           0 :                 OUString sTemp(::GetCurrGlosGroup());
     454             :                 // the zeroth path is not being recorded!
     455           0 :                 if (sTemp.getToken(1, GLOS_DELIM).startsWith("0"))
     456           0 :                     sTemp = sTemp.getToken(0, GLOS_DELIM);
     457           0 :                 aReq.AppendItem(SfxStringItem(FN_NEW_GLOSSARY, sTemp));
     458           0 :                 aReq.AppendItem(SfxStringItem(FN_PARAM_1, aShortName));
     459           0 :                 aReq.AppendItem(SfxStringItem(FN_PARAM_2, aStr));
     460           0 :                 aReq.Done();
     461             :             }
     462           0 :         }
     463             :     }
     464           0 :     else if (sItemIdent == "copy")
     465             :     {
     466           0 :         pGlossaryHdl->CopyToClipboard(*pSh, m_pShortNameEdit->GetText());
     467             :     }
     468           0 :     else if (sItemIdent == "rename")
     469             :     {
     470           0 :         m_pShortNameEdit->SetText(pGlossaryHdl->GetGlossaryShortName(m_pNameED->GetText()));
     471           0 :         boost::scoped_ptr<SwNewGlosNameDlg> pNewNameDlg(new SwNewGlosNameDlg(this, m_pNameED->GetText(),
     472           0 :                                                                              m_pShortNameEdit->GetText() ));
     473           0 :         if( RET_OK == pNewNameDlg->Execute() &&
     474           0 :             pGlossaryHdl->Rename( m_pShortNameEdit->GetText(),
     475             :                                     pNewNameDlg->GetNewShort(),
     476           0 :                                     pNewNameDlg->GetNewName()))
     477             :         {
     478           0 :             SvTreeListEntry* pEntry = m_pCategoryBox->FirstSelected();
     479             :             SvTreeListEntry* pNewEntry = m_pCategoryBox->InsertEntry(
     480           0 :                     pNewNameDlg->GetNewName(), m_pCategoryBox->GetParent(pEntry));
     481           0 :             pNewEntry->SetUserData(new OUString(pNewNameDlg->GetNewShort()));
     482           0 :             delete reinterpret_cast<OUString*>(pEntry->GetUserData());
     483           0 :             m_pCategoryBox->GetModel()->Remove(pEntry);
     484           0 :             m_pCategoryBox->Select(pNewEntry);
     485           0 :             m_pCategoryBox->MakeVisible(pNewEntry);
     486             :         }
     487           0 :         GrpSelect(m_pCategoryBox);
     488             :     }
     489           0 :     else if (sItemIdent == "delete")
     490             :     {
     491           0 :         MessageDialog aQuery(this, SW_RES(STR_QUERY_DELETE), VCL_MESSAGE_QUESTION, VCL_BUTTONS_YES_NO);
     492           0 :         if (RET_YES == aQuery.Execute())
     493             :         {
     494           0 :             const OUString aShortName(m_pShortNameEdit->GetText());
     495           0 :             const OUString aTitle(m_pNameED->GetText());
     496           0 :             if (!aTitle.isEmpty() && pGlossaryHdl->DelGlossary(aShortName))
     497             :             {
     498           0 :                 SvTreeListEntry* pChild = DoesBlockExist(aTitle, aShortName);
     499             :                 OSL_ENSURE(pChild, "entry not found!");
     500           0 :                 SvTreeListEntry* pParent = m_pCategoryBox->GetParent(pChild);
     501           0 :                 m_pCategoryBox->Select(pParent);
     502             : 
     503           0 :                 m_pCategoryBox->GetModel()->Remove(pChild);
     504           0 :                 m_pNameED->SetText(OUString());
     505           0 :                 NameModify(m_pNameED);
     506           0 :             }
     507           0 :         }
     508             :     }
     509           0 :     else if (sItemIdent == "macro")
     510             :     {
     511           0 :         SfxItemSet aSet( pSh->GetAttrPool(), RES_FRMMACRO, RES_FRMMACRO, SID_EVENTCONFIG, SID_EVENTCONFIG, 0 );
     512             : 
     513           0 :         SvxMacro aStart(aEmptyOUStr, aEmptyOUStr, STARBASIC);
     514           0 :         SvxMacro aEnd(aEmptyOUStr, aEmptyOUStr, STARBASIC);
     515           0 :         pGlossaryHdl->GetMacros(m_pShortNameEdit->GetText(), aStart, aEnd );
     516             : 
     517           0 :         SvxMacroItem aItem(RES_FRMMACRO);
     518           0 :         if( aStart.HasMacro() )
     519           0 :             aItem.SetMacro( SW_EVENT_START_INS_GLOSSARY, aStart );
     520           0 :         if( aEnd.HasMacro() )
     521           0 :             aItem.SetMacro( SW_EVENT_END_INS_GLOSSARY, aEnd );
     522             : 
     523           0 :         aSet.Put( aItem );
     524           0 :         aSet.Put( SwMacroAssignDlg::AddEvents( MACASSGN_AUTOTEXT ) );
     525             : 
     526             :         const SfxPoolItem* pItem;
     527           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     528             :         boost::scoped_ptr<SfxAbstractDialog> pMacroDlg(pFact->CreateSfxDialog( this, aSet,
     529           0 :             pSh->GetView().GetViewFrame()->GetFrame().GetFrameInterface(), SID_EVENTCONFIG ));
     530           0 :         if ( pMacroDlg && pMacroDlg->Execute() == RET_OK &&
     531           0 :             SfxItemState::SET == pMacroDlg->GetOutputItemSet()->GetItemState( RES_FRMMACRO, false, &pItem ) )
     532             :         {
     533           0 :             const SvxMacroTableDtor& rTbl = ((SvxMacroItem*)pItem)->GetMacroTable();
     534           0 :             pGlossaryHdl->SetMacros( m_pShortNameEdit->GetText(),
     535             :                                         rTbl.Get( SW_EVENT_START_INS_GLOSSARY ),
     536           0 :                                         rTbl.Get( SW_EVENT_END_INS_GLOSSARY ) );
     537           0 :         }
     538             :     }
     539           0 :     else if (sItemIdent == "import")
     540             :     {
     541             :         // call the FileOpenDialog do find WinWord - Files with templates
     542           0 :         FileDialogHelper aDlgHelper( TemplateDescription::FILEOPEN_SIMPLE, 0 );
     543           0 :         uno::Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker();
     544             : 
     545           0 :         SvtPathOptions aPathOpt;
     546           0 :         xFP->setDisplayDirectory(aPathOpt.GetWorkPath() );
     547             : 
     548           0 :         uno::Reference<XFilterManager> xFltMgr(xFP, UNO_QUERY);
     549           0 :         SfxFilterMatcher aMatcher( OUString::createFromAscii(SwDocShell::Factory().GetShortName()) );
     550           0 :         SfxFilterMatcherIter aIter( aMatcher );
     551           0 :         const SfxFilter* pFilter = aIter.First();
     552           0 :         while ( pFilter )
     553             :         {
     554           0 :             if( pFilter->GetUserData() == FILTER_WW8 )
     555             :             {
     556           0 :                 xFltMgr->appendFilter( pFilter->GetUIName(),
     557           0 :                             pFilter->GetWildcard().getGlob() );
     558           0 :                 xFltMgr->setCurrentFilter( pFilter->GetUIName() ) ;
     559             :             }
     560             : 
     561           0 :             pFilter = aIter.Next();
     562             :         }
     563             : 
     564           0 :         if( aDlgHelper.Execute() == ERRCODE_NONE )
     565             :         {
     566           0 :             if( pGlossaryHdl->ImportGlossaries( xFP->getFiles().getConstArray()[0] ))
     567           0 :                 Init();
     568             :             else
     569             :             {
     570           0 :                 MessageDialog(this, SW_RES( STR_NO_GLOSSARIES ), VCL_MESSAGE_INFO).Execute();
     571             :             }
     572           0 :         }
     573             :     }
     574             :     else
     575             :     {
     576           0 :         return 0;
     577             :     }
     578           0 :     return 1;
     579             : }
     580             : 
     581             : // dialog manage regions
     582           0 : IMPL_LINK_NOARG(SwGlossaryDlg, BibHdl)
     583             : {
     584           0 :     SwGlossaries* pGloss = ::GetGlossaries();
     585           0 :     if( pGloss->IsGlosPathErr() )
     586           0 :         pGloss->ShowError();
     587             :     else
     588             :     {
     589             :         //check if at least one glossary path is write enabled
     590           0 :         SvtPathOptions aPathOpt;
     591           0 :         const OUString sGlosPath( aPathOpt.GetAutoTextPath() );
     592           0 :         const sal_Int32 nPaths = comphelper::string::getTokenCount(sGlosPath, ';');
     593           0 :         bool bIsWritable = false;
     594           0 :         for(sal_Int32 nPath = 0; nPath < nPaths; nPath++)
     595             :         {
     596             :             const OUString sPath = URIHelper::SmartRel2Abs(
     597             :                 INetURLObject(), sGlosPath.getToken(nPath, ';'),
     598           0 :                 URIHelper::GetMaybeFileHdl());
     599             :             try
     600             :             {
     601             :                 Content aTestContent( sPath,
     602             :                             uno::Reference< XCommandEnvironment >(),
     603           0 :                             comphelper::getProcessComponentContext() );
     604           0 :                 Any aAny = aTestContent.getPropertyValue( "IsReadOnly" );
     605           0 :                 if(aAny.hasValue())
     606             :                 {
     607           0 :                     bIsWritable = !*(sal_Bool*)aAny.getValue();
     608           0 :                 }
     609             :             }
     610           0 :             catch (const Exception&)
     611             :             {
     612             :             }
     613           0 :             if(bIsWritable)
     614           0 :                 break;
     615           0 :         }
     616           0 :         if(bIsWritable)
     617             :         {
     618             : 
     619           0 :             boost::scoped_ptr<SwGlossaryGroupDlg> pDlg(new SwGlossaryGroupDlg( this, pGloss->GetPathArray(), pGlossaryHdl ));
     620           0 :             if ( RET_OK == pDlg->Execute() )
     621             :             {
     622           0 :                 Init();
     623             :                 //if new groups were created - select one of them
     624           0 :                 const OUString sNewGroup = pDlg->GetCreatedGroupName();
     625           0 :                 SvTreeListEntry* pEntry = m_pCategoryBox->First();
     626           0 :                 while (!sNewGroup.isEmpty() && pEntry)
     627             :                 {
     628           0 :                     if(!m_pCategoryBox->GetParent(pEntry))
     629             :                     {
     630           0 :                         GroupUserData* pGroupData = (GroupUserData*)pEntry->GetUserData();
     631             :                         const OUString sGroup = pGroupData->sGroupName
     632           0 :                             + OUString(GLOS_DELIM)
     633           0 :                             + OUString::number(pGroupData->nPathIdx);
     634           0 :                         if(sGroup == sNewGroup)
     635             :                         {
     636           0 :                             m_pCategoryBox->Select(pEntry);
     637           0 :                             m_pCategoryBox->MakeVisible(pEntry);
     638           0 :                             GrpSelect(m_pCategoryBox);
     639           0 :                             break;
     640           0 :                         }
     641             :                     }
     642           0 :                     pEntry = m_pCategoryBox->Next(pEntry);
     643           0 :                 }
     644             : 
     645           0 :             }
     646             :         }
     647             :         else
     648             :         {
     649           0 :             MessageDialog aBox(this, sReadonlyPath, VCL_MESSAGE_QUESTION, VCL_BUTTONS_YES_NO);
     650             : 
     651           0 :             if(RET_YES == aBox.Execute())
     652           0 :                 PathHdl(m_pPathBtn);
     653           0 :         }
     654             :     }
     655           0 :     return 0;
     656             : }
     657             : 
     658             : // initialisation; from Ctor and after editing regions
     659           0 : void SwGlossaryDlg::Init()
     660             : {
     661           0 :     m_pCategoryBox->SetUpdateMode( false );
     662           0 :     m_pCategoryBox->Clear();
     663             :     // display text block regions
     664           0 :     const size_t nCnt = pGlossaryHdl->GetGroupCnt();
     665           0 :     SvTreeListEntry* pSelEntry = 0;
     666           0 :     const OUString sSelStr(::GetCurrGlosGroup().getToken(0, GLOS_DELIM));
     667           0 :     const sal_Int32 nSelPath = ::GetCurrGlosGroup().getToken(1, GLOS_DELIM).toInt32();
     668             :     // #i66304# - "My AutoText" comes from mytexts.bau, but should be translated
     669           0 :     const OUString sMyAutoTextEnglish("My AutoText");
     670           0 :     const OUString sMyAutoTextTranslated(SW_RES(STR_MY_AUTOTEXT));
     671           0 :     for(size_t nId = 0; nId < nCnt; ++nId )
     672             :     {
     673           0 :         OUString sTitle;
     674           0 :         OUString sGroupName(pGlossaryHdl->GetGroupName(nId, &sTitle));
     675           0 :         if(sGroupName.isEmpty())
     676           0 :             continue;
     677           0 :         if(sTitle.isEmpty())
     678           0 :             sTitle = sGroupName.getToken( 0, GLOS_DELIM );
     679           0 :         if(sTitle == sMyAutoTextEnglish)
     680           0 :             sTitle = sMyAutoTextTranslated;
     681           0 :         SvTreeListEntry* pEntry = m_pCategoryBox->InsertEntry( sTitle );
     682           0 :         const sal_Int32 nPath = sGroupName.getToken( 1, GLOS_DELIM ).toInt32();
     683             : 
     684           0 :         GroupUserData* pData = new GroupUserData;
     685           0 :         pData->sGroupName = sGroupName.getToken(0, GLOS_DELIM);
     686           0 :         pData->nPathIdx = static_cast< sal_uInt16 >(nPath);
     687           0 :         pData->bReadonly = pGlossaryHdl->IsReadOnly(&sGroupName);
     688             : 
     689           0 :         pEntry->SetUserData(pData);
     690           0 :         if(sSelStr == pData->sGroupName && nSelPath == nPath)
     691           0 :             pSelEntry = pEntry;
     692             : 
     693             :         // fill entries for the groups
     694             :         {
     695           0 :             pGlossaryHdl->SetCurGroup(sGroupName, false, true);
     696           0 :             const sal_uInt16 nCount = pGlossaryHdl->GetGlossaryCnt();
     697           0 :             for(sal_uInt16 i = 0; i < nCount; ++i)
     698             :             {
     699             :                 SvTreeListEntry* pChild = m_pCategoryBox->InsertEntry(
     700           0 :                                     pGlossaryHdl->GetGlossaryName(i), pEntry);
     701           0 :                 pChild->SetUserData(new OUString(pGlossaryHdl->GetGlossaryShortName(i)));
     702             :             }
     703             :         }
     704           0 :     }
     705             :         // set current group and display text blocks
     706           0 :     if(!pSelEntry)
     707             :     {
     708             :         //find a non-readonly group
     709           0 :         SvTreeListEntry* pSearch = m_pCategoryBox->First();
     710           0 :         while(pSearch)
     711             :         {
     712           0 :             if(!m_pCategoryBox->GetParent(pSearch))
     713             :             {
     714           0 :                 GroupUserData* pData = (GroupUserData*)pSearch->GetUserData();
     715           0 :                 if(!pData->bReadonly)
     716             :                 {
     717           0 :                     pSelEntry = pSearch;
     718           0 :                     break;
     719             :                 }
     720             :             }
     721           0 :             pSearch = m_pCategoryBox->Next(pSearch);
     722             :         }
     723           0 :         if(!pSelEntry)
     724           0 :             pSelEntry = m_pCategoryBox->GetEntry(0);
     725             :     }
     726           0 :     if(pSelEntry)
     727             :     {
     728           0 :         m_pCategoryBox->Expand(pSelEntry);
     729           0 :         m_pCategoryBox->Select(pSelEntry);
     730           0 :         m_pCategoryBox->MakeVisible(pSelEntry);
     731           0 :         GrpSelect(m_pCategoryBox);
     732             :     }
     733             :     //JP 16.11.99: the SvxTreeListBox has a Bug. The Box dont recalc the
     734             :     //      outputsize, when all entries are insertet. The result is, that
     735             :     //      the Focus/Highlight rectangle is to large and paintet over the
     736             :     //      HScrollbar. -> Fix: call the resize
     737           0 :     m_pCategoryBox->Resize();
     738             : 
     739           0 :     m_pCategoryBox->GetModel()->Resort();
     740           0 :     m_pCategoryBox->SetUpdateMode( true );
     741           0 :     m_pCategoryBox->Update();
     742             : 
     743           0 :     const SvxAutoCorrCfg& rCfg = SvxAutoCorrCfg::Get();
     744           0 :     m_pFileRelCB->Check( rCfg.IsSaveRelFile() );
     745           0 :     m_pFileRelCB->SetClickHdl(LINK(this, SwGlossaryDlg, CheckBoxHdl));
     746           0 :     m_pNetRelCB->Check( rCfg.IsSaveRelNet() );
     747           0 :     m_pNetRelCB->SetClickHdl(LINK(this, SwGlossaryDlg, CheckBoxHdl));
     748           0 :     m_pInsertTipCB->Check( rCfg.IsAutoTextTip() );
     749           0 :     m_pInsertTipCB->SetClickHdl(LINK(this, SwGlossaryDlg, CheckBoxHdl));
     750           0 : }
     751             : 
     752           0 : IMPL_LINK_NOARG_INLINE_START(SwGlossaryDlg, EditHdl)
     753             : {
     754             : // EndDialog must not be called in MenuHdl
     755           0 :     if (m_pEditBtn->GetCurItemIdent() == "edit")
     756             :     {
     757           0 :         SwTextBlocks *pGroup = ::GetGlossaries()->GetGroupDoc (  GetCurrGrpName () );
     758           0 :         bool bRet = pGlossaryHdl->ConvertToNew ( *pGroup );
     759           0 :         delete pGroup;
     760           0 :         if ( bRet )
     761           0 :             EndDialog(RET_EDIT);
     762             :     }
     763           0 :     return 0;
     764             : }
     765           0 : IMPL_LINK_NOARG_INLINE_END(SwGlossaryDlg, EditHdl)
     766             : 
     767             : // KeyInput for ShortName - Edits without Spaces
     768           0 : IMPL_LINK( SwNewGlosNameDlg, Modify, Edit *, pBox )
     769             : {
     770           0 :     OUString aName(m_pNewName->GetText());
     771           0 :     SwGlossaryDlg* pDlg = (SwGlossaryDlg*)GetParent();
     772           0 :     if (pBox == m_pNewName)
     773           0 :         m_pNewShort->SetText( lcl_GetValidShortCut( aName ) );
     774             : 
     775           0 :     bool bEnable = !aName.isEmpty() && !m_pNewShort->GetText().isEmpty() &&
     776           0 :         (!pDlg->DoesBlockExist(aName, m_pNewShort->GetText())
     777           0 :             || aName == m_pOldName->GetText());
     778           0 :     m_pOk->Enable(bEnable);
     779           0 :     return 0;
     780             : }
     781             : 
     782           0 : IMPL_LINK_NOARG(SwNewGlosNameDlg, Rename)
     783             : {
     784           0 :     SwGlossaryDlg* pDlg = (SwGlossaryDlg*)GetParent();
     785           0 :     OUString sNew = GetAppCharClass().uppercase(m_pNewShort->GetText());
     786           0 :     if( pDlg->pGlossaryHdl->HasShortName(m_pNewShort->GetText())
     787           0 :         && sNew != m_pOldShort->GetText() )
     788             :     {
     789           0 :         MessageDialog(this, SW_RES(STR_DOUBLE_SHORTNAME), VCL_MESSAGE_INFO).Execute();
     790           0 :         m_pNewShort->GrabFocus();
     791             :     }
     792             :     else
     793           0 :         EndDialog(sal_True);
     794           0 :     return 0;
     795             : }
     796             : 
     797           0 : IMPL_LINK( SwGlossaryDlg, CheckBoxHdl, CheckBox *, pBox )
     798             : {
     799           0 :     SvxAutoCorrCfg& rCfg = SvxAutoCorrCfg::Get();
     800           0 :     bool bCheck = pBox->IsChecked();
     801           0 :     if (pBox == m_pInsertTipCB)
     802           0 :         rCfg.SetAutoTextTip(bCheck);
     803           0 :     else if(pBox == m_pFileRelCB)
     804           0 :         rCfg.SetSaveRelFile(bCheck);
     805             :     else
     806           0 :         rCfg.SetSaveRelNet(bCheck);
     807           0 :     return 0;
     808             : }
     809             : 
     810             : // TreeListBox for groups and blocks
     811           0 : SwGlTreeListBox::SwGlTreeListBox(vcl::Window* pParent, WinBits nBits)
     812             :     : SvTreeListBox(pParent, nBits)
     813             :     , sReadonly(SW_RESSTR(SW_STR_READONLY)),
     814           0 :     pDragEntry(0)
     815             : {
     816           0 :     SetDragDropMode( SV_DRAGDROP_CTRL_MOVE|SV_DRAGDROP_CTRL_COPY );
     817           0 : }
     818             : 
     819           0 : Size SwGlTreeListBox::GetOptimalSize() const
     820             : {
     821           0 :     return LogicToPixel(Size(212, 84), MapMode(MAP_APPFONT));
     822             : }
     823             : 
     824           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeSwGlTreeListBox(vcl::Window *pParent, VclBuilder::stringmap &)
     825             : {
     826           0 :     return new SwGlTreeListBox(pParent, WB_BORDER | WB_TABSTOP);
     827             : }
     828             : 
     829           0 : void SwGlTreeListBox::Clear()
     830             : {
     831           0 :     SvTreeListEntry* pEntry = First();
     832           0 :     while(pEntry)
     833             :     {
     834           0 :         if(GetParent(pEntry))
     835           0 :             delete reinterpret_cast<OUString*>(pEntry->GetUserData());
     836             :         else
     837           0 :             delete (GroupUserData*)pEntry->GetUserData();
     838           0 :         pEntry = Next(pEntry);
     839             :     }
     840           0 :     SvTreeListBox::Clear();
     841           0 : }
     842             : 
     843           0 : void SwGlTreeListBox::RequestHelp( const HelpEvent& rHEvt )
     844             : {
     845           0 :     Point aPos( ScreenToOutputPixel( rHEvt.GetMousePosPixel() ));
     846           0 :     SvTreeListEntry* pEntry = GetEntry( aPos );
     847             :     // there's only help for groups' names
     848           0 :     if(pEntry)
     849             :     {
     850             :         SvLBoxTab* pTab;
     851           0 :         SvLBoxItem* pItem = GetItem( pEntry, aPos.X(), &pTab );
     852           0 :         if(pItem)
     853             :         {
     854           0 :             aPos = GetEntryPosition( pEntry );
     855           0 :              Size aSize(pItem->GetSize( this, pEntry ));
     856           0 :             aPos.X() = GetTabPos( pEntry, pTab );
     857             : 
     858           0 :             if((aPos.X() + aSize.Width()) > GetSizePixel().Width())
     859           0 :                 aSize.Width() = GetSizePixel().Width() - aPos.X();
     860           0 :             aPos = OutputToScreenPixel(aPos);
     861           0 :              Rectangle aItemRect( aPos, aSize );
     862           0 :             OUString sMsg;
     863           0 :             if(!GetParent(pEntry))
     864             :             {
     865           0 :                 GroupUserData* pData = (GroupUserData*)pEntry->GetUserData();
     866           0 :                 const std::vector<OUString> & rPathArr = ::GetGlossaries()->GetPathArray();
     867           0 :                 if( !rPathArr.empty() )
     868             :                 {
     869           0 :                     INetURLObject aTmp(rPathArr[pData->nPathIdx]
     870           0 :                                        + "/"
     871           0 :                                        + pData->sGroupName
     872           0 :                                        + SwGlossaries::GetExtension());
     873           0 :                     sMsg = aTmp.GetPath();
     874             : 
     875           0 :                     if(pData->bReadonly)
     876             :                     {
     877           0 :                         sMsg += " (" + sReadonly + ")";
     878           0 :                     }
     879             :                 }
     880             :             }
     881             :             else
     882           0 :                 sMsg = *reinterpret_cast<OUString*>(pEntry->GetUserData());
     883             :             Help::ShowQuickHelp( this, aItemRect, sMsg,
     884           0 :                         QUICKHELP_LEFT|QUICKHELP_VCENTER );
     885             :         }
     886             :     }
     887           0 : }
     888             : 
     889           0 : DragDropMode SwGlTreeListBox::NotifyStartDrag(
     890             :                     TransferDataContainer& /*rContainer*/,
     891             :                     SvTreeListEntry* pEntry )
     892             : {
     893             :     DragDropMode  eRet;
     894           0 :     pDragEntry = pEntry;
     895           0 :     if(!GetParent(pEntry))
     896           0 :         eRet = SV_DRAGDROP_NONE;
     897             :     else
     898             :     {
     899           0 :         SwGlossaryDlg* pDlg = (SwGlossaryDlg*)GetParentDialog();
     900           0 :         SvTreeListEntry* pParent = GetParent(pEntry);
     901             : 
     902           0 :         GroupUserData* pGroupData = (GroupUserData*)pParent->GetUserData();
     903             :         OUString sEntry = pGroupData->sGroupName
     904           0 :             + OUString(GLOS_DELIM)
     905           0 :             + OUString::number(pGroupData->nPathIdx);
     906           0 :         sal_Int8 nDragOption = DND_ACTION_COPY;
     907           0 :         eRet = SV_DRAGDROP_CTRL_COPY;
     908           0 :         if(!pDlg->pGlossaryHdl->IsReadOnly(&sEntry))
     909             :         {
     910           0 :             eRet |= SV_DRAGDROP_CTRL_MOVE;
     911           0 :             nDragOption |= DND_ACTION_MOVE;
     912             :         }
     913           0 :         SetDragOptions( nDragOption );
     914             :     }
     915           0 :     return eRet;
     916             : }
     917             : 
     918           0 : bool SwGlTreeListBox::NotifyAcceptDrop( SvTreeListEntry* pEntry)
     919             : {
     920             :     // TODO: Readonly - check still missing!
     921           0 :     SvTreeListEntry* pSrcParent = GetParent(pEntry) ? GetParent(pEntry) : pEntry;
     922             :     SvTreeListEntry* pDestParent =
     923           0 :         GetParent(pDragEntry ) ? GetParent(pDragEntry ) : pDragEntry ;
     924           0 :     return pDestParent != pSrcParent;
     925             : 
     926             : }
     927             : 
     928           0 : TriState SwGlTreeListBox::NotifyMoving(   SvTreeListEntry*  pTarget,
     929             :                                     SvTreeListEntry*  pEntry,
     930             :                                     SvTreeListEntry*& /*rpNewParent*/,
     931             :                                     sal_uLong&        /*rNewChildPos*/
     932             :                                 )
     933             : {
     934           0 :     return NotifyCopyingOrMoving(pTarget, pEntry, true);
     935             : }
     936             : 
     937           0 : TriState SwGlTreeListBox::NotifyCopying(   SvTreeListEntry*  pTarget,
     938             :                                     SvTreeListEntry*  pEntry,
     939             :                                     SvTreeListEntry*& /*rpNewParent*/,
     940             :                                     sal_uLong&        /*rNewChildPos*/
     941             :                                 )
     942             : {
     943           0 :     return NotifyCopyingOrMoving(pTarget, pEntry, false);
     944             : }
     945             : 
     946           0 : TriState SwGlTreeListBox::NotifyCopyingOrMoving(
     947             :     SvTreeListEntry*  pTarget,
     948             :     SvTreeListEntry*  pEntry,
     949             :     bool              bIsMove)
     950             : {
     951           0 :     pDragEntry = 0;
     952             :     // 1. move in different groups?
     953             :     // 2. allowed to write to both groups?
     954           0 :     if(!pTarget) // move to the beginning
     955             :     {
     956           0 :         pTarget = GetEntry(0);
     957             :     }
     958           0 :     SvTreeListEntry* pSrcParent = GetParent(pEntry);
     959             :     SvTreeListEntry* pDestParent =
     960           0 :         GetParent(pTarget) ? GetParent(pTarget) : pTarget;
     961           0 :     bool bRet = false;
     962           0 :     if(pDestParent != pSrcParent)
     963             :     {
     964           0 :         SwGlossaryDlg* pDlg = (SwGlossaryDlg*)GetParentDialog();
     965           0 :         SwWait aWait( *pDlg->pSh->GetView().GetDocShell(), true );
     966             : 
     967           0 :         GroupUserData* pGroupData = (GroupUserData*)pSrcParent->GetUserData();
     968             :         OUString sSourceGroup = pGroupData->sGroupName
     969           0 :             + OUString(GLOS_DELIM)
     970           0 :             + OUString::number(pGroupData->nPathIdx);
     971             : 
     972           0 :         pDlg->pGlossaryHdl->SetCurGroup(sSourceGroup);
     973           0 :         OUString sTitle(GetEntryText(pEntry));
     974           0 :         OUString sShortName(*reinterpret_cast<OUString*>(pEntry->GetUserData()));
     975             : 
     976           0 :         GroupUserData* pDestData = (GroupUserData*)pDestParent->GetUserData();
     977             :         OUString sDestName = pDestData->sGroupName
     978           0 :             + OUString(GLOS_DELIM)
     979           0 :             + OUString::number(pDestData->nPathIdx);
     980             : 
     981             :         bRet = pDlg->pGlossaryHdl->CopyOrMove( sSourceGroup,  sShortName,
     982           0 :                         sDestName, sTitle, bIsMove );
     983           0 :         if(bRet)
     984             :         {
     985           0 :             SvTreeListEntry* pChild = InsertEntry(sTitle, pDestParent);
     986           0 :             pChild->SetUserData(new OUString(sShortName));
     987           0 :             if (bIsMove)
     988             :             {
     989           0 :                 GetModel()->Remove(pEntry);
     990             :             }
     991           0 :         }
     992             :     }
     993           0 :     return TRISTATE_FALSE; // otherwise the entry is being set automatically
     994             : }
     995             : 
     996           0 : OUString SwGlossaryDlg::GetCurrGrpName() const
     997             : {
     998           0 :     SvTreeListEntry* pEntry = m_pCategoryBox->FirstSelected();
     999           0 :     if(pEntry)
    1000             :     {
    1001             :         pEntry =
    1002           0 :             m_pCategoryBox->GetParent(pEntry) ? m_pCategoryBox->GetParent(pEntry) : pEntry;
    1003           0 :         GroupUserData* pGroupData = (GroupUserData*)pEntry->GetUserData();
    1004           0 :         return pGroupData->sGroupName + OUString(GLOS_DELIM) + OUString::number(pGroupData->nPathIdx);
    1005             :     }
    1006           0 :     return OUString();
    1007             : }
    1008             : 
    1009           0 : IMPL_LINK( SwGlossaryDlg, PathHdl, Button *, pBtn )
    1010             : {
    1011           0 :     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    1012           0 :     if(pFact)
    1013             :     {
    1014           0 :         boost::scoped_ptr<AbstractSvxMultiPathDialog> pDlg(pFact->CreateSvxPathSelectDialog(pBtn));
    1015             :         OSL_ENSURE(pDlg, "Dialog creation failed!");
    1016           0 :         SvtPathOptions aPathOpt;
    1017           0 :         const OUString sGlosPath( aPathOpt.GetAutoTextPath() );
    1018           0 :         pDlg->SetPath(sGlosPath);
    1019           0 :         if(RET_OK == pDlg->Execute())
    1020             :         {
    1021           0 :             const OUString sTmp(pDlg->GetPath());
    1022           0 :             if(sTmp != sGlosPath)
    1023             :             {
    1024           0 :                 aPathOpt.SetAutoTextPath( sTmp );
    1025           0 :                 ::GetGlossaries()->UpdateGlosPath( true );
    1026           0 :                 Init();
    1027           0 :             }
    1028           0 :         }
    1029             :     }
    1030           0 :     return 0;
    1031             : }
    1032             : 
    1033           0 : IMPL_LINK_NOARG(SwGlossaryDlg, InsertHdl)
    1034             : {
    1035           0 :     EndDialog(RET_OK);
    1036           0 :     return 0;
    1037             : }
    1038             : 
    1039           0 : void SwGlossaryDlg::ShowPreview()
    1040             : {
    1041             :     //create example
    1042           0 :     if (!pExampleFrame)
    1043             :     {
    1044           0 :         Link aLink(LINK(this, SwGlossaryDlg, PreviewLoadedHdl));
    1045             :         pExampleFrame = new SwOneExampleFrame( *m_pExampleWIN,
    1046           0 :                         EX_SHOW_ONLINE_LAYOUT, &aLink );
    1047             :     }
    1048             : 
    1049           0 :     ShowAutoText(::GetCurrGlosGroup(), m_pShortNameEdit->GetText());
    1050           0 : };
    1051             : 
    1052           0 : IMPL_LINK_NOARG(SwGlossaryDlg, PreviewLoadedHdl)
    1053             : {
    1054           0 :     ResumeShowAutoText();
    1055           0 :     return 0;
    1056             : }
    1057             : 
    1058           0 : void SwGlossaryDlg::ShowAutoText(const OUString& rGroup, const OUString& rShortName)
    1059             : {
    1060           0 :     if(m_pExampleWIN->IsVisible())
    1061             :     {
    1062           0 :         SetResumeData(rGroup, rShortName);
    1063             :         //try to make an Undo()
    1064           0 :         pExampleFrame->ClearDocument( true );
    1065             :     }
    1066           0 : }
    1067             : 
    1068           0 : void SwGlossaryDlg::ResumeShowAutoText()
    1069             : {
    1070           0 :     OUString sGroup;
    1071           0 :     OUString sShortName;
    1072           0 :     if(GetResumeData(sGroup, sShortName) && m_pExampleWIN->IsVisible())
    1073             :     {
    1074           0 :         if(!m_xAutoText.is())
    1075             :         {
    1076             :             //now the AutoText ListBoxes have to be filled
    1077           0 :             m_xAutoText = text::AutoTextContainer::create( comphelper::getProcessComponentContext() );
    1078             :         }
    1079             : 
    1080           0 :         uno::Reference< XTextCursor > & xCrsr = pExampleFrame->GetTextCursor();
    1081           0 :         if(xCrsr.is())
    1082             :         {
    1083           0 :             if (!sShortName.isEmpty())
    1084             :             {
    1085           0 :                 uno::Any aGroup = m_xAutoText->getByName(sGroup);
    1086           0 :                 uno::Reference< XAutoTextGroup >  xGroup;
    1087           0 :                 OUString uShortName(sShortName);
    1088           0 :                 if((aGroup >>= xGroup) && xGroup->hasByName(uShortName))
    1089             :                 {
    1090           0 :                     uno::Any aEntry(xGroup->getByName(uShortName));
    1091           0 :                     uno::Reference< XAutoTextEntry >  xEntry;
    1092           0 :                     aEntry >>= xEntry;
    1093           0 :                     uno::Reference< XTextRange >  xRange(xCrsr, uno::UNO_QUERY);
    1094           0 :                     xEntry->applyTo(xRange);
    1095           0 :                 }
    1096             :             }
    1097             :         }
    1098             :     }
    1099           0 :     ResetResumeData();
    1100           0 : }
    1101             : 
    1102             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10