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: [email protected] http://personal.us.es/gmolleda
*****************************************************



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

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to