Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi, I am trying add a functionality for hide or show the slides included in a custom user presentation (menu Slide show - Custom slide show...).

Objective: to print a custom in PDF, hiding the rest of slides and presenting only those chosen.
Can anyone help?
I think it's something important for teachers with different students, the same base but different levels slide.

I have added the buttons "Show" and "Hide" to /libreoffice/sd/uiconfig/ui/customslideshows.ui with Glade:
terminal:
$ export GLADE_CATALOG_SEARCH_PATH=~/.../libreoffice/install/share/glade
$ glade

I add size for put two buttons: Show and Hide, code buttons:
----------------------------------code buttons in .../libreoffice/sd/uiconfig/ui/customslideshows.ui------------------------
<child>
<object class="GtkButton" id="show">
<property name="label" translatable="yes">Sho_w</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child>
<object class="GtkButton" id="hide">
<property name="label" translatable="yes">_Hide</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">8</property>
</packing>
</child>
----------------------------------END code buttons in .../libreoffice/sd/uiconfig/ui/customslideshows.ui------------------------ In /home/deb/Descargas/libreoffice/libreoffice/sd/source/ui/inc/custdlg.hxx I add:
-------------- Change custdlg.hxx -------------
class SdCustomShowDlg : public ModalDialog
{
private:
    ListBox*         m_pLbCustomShows;
    CheckBox*        m_pCbxUseCustomShow;
    PushButton*      m_pBtnNew;
    PushButton*      m_pBtnEdit;
    PushButton*      m_pBtnRemove;
    PushButton*      m_pBtnCopy;
    HelpButton*      m_pBtnHelp;
    PushButton*      m_pBtnStartShow;
    OKButton*        m_pBtnOK;
+    PushButton*      m_pBtnShow;
+    PushButton*      m_pBtnHide;
--------------END Change custdlg.hxx -------------

In .../libreoffice/sd/source/ui/dlg/custdlg.cxx

I add in constructor:
    get( m_pBtnStartShow, "startshow" );
    get( m_pBtnOK, "ok" );
+    get( m_pBtnShow, "show" );
+    get( m_pBtnHide, "hide" );
    get( m_pLbCustomShows, "customshowlist");
...
    m_pCbxUseCustomShow->SetClickHdl( aLink );
    m_pLbCustomShows->SetSelectHdl( aLink );
+    m_pBtnShow->SetClickHdl( aLink );
+    m_pBtnHide->SetClickHdl( aLink );

m_pBtnStartShow->SetClickHdl( LINK( this, SdCustomShowDlg, StartShowHdl ) ); // for test

In function CheckState I add:
void SdCustomShowDlg::CheckState()
{
    sal_uInt16 nPos = m_pLbCustomShows->GetSelectEntryPos();

    sal_Bool bEnable = nPos != LISTBOX_ENTRY_NOTFOUND;
    m_pBtnEdit->Enable( bEnable );
    m_pBtnRemove->Enable( bEnable );
    m_pBtnCopy->Enable( bEnable );
    m_pCbxUseCustomShow->Enable( bEnable );
    m_pBtnStartShow->Enable( true );
+    m_pBtnShow->Enable( bEnable );
+    m_pBtnHide->Enable( bEnable );

    if( bEnable )
        pCustomShowList->Seek( nPos );
}

Now the hard part:
/**
 * ButtonHdl()
 */
IMPL_LINK( SdCustomShowDlg, ClickButtonHdl, void *, p )
{
... the buttons source implementation ...
    // show CustomShow
else if( p == m_pBtnShow ) // or else if( p == m_pBtnShow || p == m_pBtnHide )
    {
        sal_uInt16 nPos = m_pLbCustomShows->GetSelectEntryPos();
        sal_Bool bDifferent = sal_False;
        if( nPos != LISTBOX_ENTRY_NOTFOUND )
        {
DBG_ASSERT( pCustomShowList, "pCustomShowList does not exist" );
            pCustomShow = (*pCustomShowList)[ nPos ];
            bDifferent = sal_True;
            for( pCustomShow = (SdCustomShow*) pCustomShowList->First();
                     pCustomShow != NULL && bDifferent;
pCustomShow = (SdCustomShow*) pCustomShowList->Next() )
                {
// What code will I put here?
if (p == m_pBtnShow )
   { HERE
   }
else
   { HERE
   }
                 //if( aStr == OUString( pCustomShow->GetName() ) )
                    //    bDifferent = sal_False;
                }
        }

    }

Is right the actual code? (loop, ...)

I have seen code for hide or show the slides in /core/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
HIDE:
case SID_HIDE_SLIDE:
    ChangeSlideExclusionState(model::SharedPageDescriptor(), true);
SHOW:
case SID_SHOW_SLIDE
    ChangeSlideExclusionState(model::SharedPageDescriptor(), false);

Or for selections in /core/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx 234 void SelectionManager::SelectionHasChanged (const bool bMakeSelectionVisible)

But I don't know how do it.

Best regards.








--

El inglés, francés, alemán o chino mandarín son muy ineficientes para su aprendizaje como segundo 
idioma (mejor tercero) y fuente de grandes movimientos de divisas de países pobres hacia los más 
ricos. Igual que aprendes a escribir primero trazos y no directamente las letras, es mejor para el 
cerebro aprender primero una lengua regular y planificada.

*****************************************************
              Guillermo Molleda Jimena

        Departamento de Economía Financiera y
              Dirección de Operaciones
           Facultad de Turismo y Finanzas
               Universidad de Sevilla

           Avda. San Francisco Javier s/n
                   41018 Sevilla
    Tfno: 954 55 16 55     Fax: 954 55 75 70
E-mail: gmolleda@us.es http://personal.us.es/gmolleda
*****************************************************



Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.