2020-03-05 12:18:38 +01:00
|
|
|
#include <vcl/jsdialog/jsdialogbuilder.hxx>
|
2020-02-18 15:41:56 +01:00
|
|
|
#include <sal/log.hxx>
|
|
|
|
#include <boost/property_tree/json_parser.hpp>
|
|
|
|
#include <comphelper/lok.hxx>
|
Missing include
Building on Windows with PCH disabled:
[CXX] vcl/jsdialog/jsdialogbuilder.cxx
C:\lo\src\core\include\rtl/ref.hxx(113): error C2027: use of undefined type 'TabPage'
C:\lo\src\core\include\vcl/tabctrl.hxx(33): note: see declaration of 'TabPage'
C:\lo\src\core\include\rtl/ref.hxx(111): note: while compiling class template member function 'rtl::Reference<reference_type>::~Reference(void)'
with
[
reference_type=TabPage
]
C:/lo/src/core/vcl/jsdialog/jsdialogbuilder.cxx(207): note: see reference to function template instantiation 'rtl::Reference<reference_type>::~Reference(void)'
being compiled
with
[
reference_type=TabPage
]
C:\lo\src\core\include\vcl/vclptr.hxx(64): note: see reference to class template instantiation 'rtl::Reference<reference_type>' being compiled
with
[
reference_type=TabPage
]
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\utility(289): note: see reference to class template instantiation 'VclPtr<TabPage>' being co
mpiled
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\utility(290): note: see reference to class template instantiation 'std::pair<VclPtr<TabPage>
,VclPtr<VclGrid>>' being compiled
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\xtree(330): note: see reference to class template instantiation 'std::pair<const rtl::OStrin
g,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>' being compiled
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\xtree(752): note: see reference to class template instantiation 'std::_Tree_node<std::pair<c
onst rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>,std::_Default_allocator_traits<_Alloc>::void_pointer>' being compiled
with
[
_Alloc=std::allocator<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>
]
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\xtree(1189): note: see reference to function template instantiation 'void std::_Tree_val<std
::_Tree_simple_types<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>>::_Erase_head<std::allocator<std::_Tree_node<std::pair<const rtl:
:OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>,std::_Default_allocator_traits<_Alloc>::void_pointer>>>(_Alnode &) noexcept' being compiled
with
[
_Alloc=std::allocator<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>,
_Alnode=std::allocator<std::_Tree_node<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>,std::_Default_allocator_traits<std::allocator<st
d::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>>::void_pointer>>
]
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\xtree(1189): note: see reference to function template instantiation 'void std::_Tree_val<std
::_Tree_simple_types<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>>::_Erase_head<std::allocator<std::_Tree_node<std::pair<const rtl:
:OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>,std::_Default_allocator_traits<_Alloc>::void_pointer>>>(_Alnode &) noexcept' being compiled
with
[
_Alloc=std::allocator<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>,
_Alnode=std::allocator<std::_Tree_node<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>,std::_Default_allocator_traits<std::allocator<st
d::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>>::void_pointer>>
]
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\xtree(1187): note: while compiling class template member function 'std::_Tree<std::_Tmap_tra
its<_Kty,_Ty,_Pr,_Alloc,false>>::~_Tree(void) noexcept'
with
[
_Kty=rtl::OString,
_Ty=std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>,
_Pr=std::less<rtl::OString>,
_Alloc=std::allocator<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>
]
C:\lo\src\core\vcl\inc\jsdialog/jsdialogbuilder.hxx(131): note: see reference to function template instantiation 'std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_All
oc,false>>::~_Tree(void) noexcept' being compiled
with
[
_Kty=rtl::OString,
_Ty=std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>,
_Pr=std::less<rtl::OString>,
_Alloc=std::allocator<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>
]
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\Include\map(75): note: see reference to class template instantiation 'std::_Tree<std::_Tmap_traits<_
Kty,_Ty,_Pr,_Alloc,false>>' being compiled
with
[
_Kty=rtl::OString,
_Ty=std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>,
_Pr=std::less<rtl::OString>,
_Alloc=std::allocator<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>
]
C:\lo\src\core\vcl\inc\salvtables.hxx(1032): note: see reference to class template instantiation 'std::map<rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid
>>,std::less<rtl::OString>,std::allocator<std::pair<const rtl::OString,std::pair<VclPtr<TabPage>,VclPtr<VclGrid>>>>>' being compiled
make[1]: *** [C:/lo/src/core/solenv/gbuild/LinkTarget.mk:303: C:/lo/src/build/workdir/CxxObject/vcl/jsdialog/jsdialogbuilder.o] Error 2
Change-Id: Id67ce45b1652a2915508963adb65e1e1f5c51dcd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94464
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2020-05-20 23:41:38 +02:00
|
|
|
#include <vcl/tabpage.hxx>
|
2020-02-18 15:41:56 +01:00
|
|
|
#include <vcl/toolkit/dialog.hxx>
|
|
|
|
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
|
2020-03-05 12:24:27 +01:00
|
|
|
#include <vcl/toolkit/combobox.hxx>
|
2020-02-18 15:41:56 +01:00
|
|
|
|
2020-02-24 18:35:18 +01:00
|
|
|
void JSDialogSender::notifyDialogState()
|
|
|
|
{
|
|
|
|
if (!m_aOwnedToplevel)
|
|
|
|
return;
|
|
|
|
|
|
|
|
const vcl::ILibreOfficeKitNotifier* pNotifier = m_aOwnedToplevel->GetLOKNotifier();
|
|
|
|
if (pNotifier)
|
|
|
|
{
|
|
|
|
std::stringstream aStream;
|
|
|
|
boost::property_tree::ptree aTree = m_aOwnedToplevel->DumpAsPropertyTree();
|
|
|
|
aTree.put("id", m_aOwnedToplevel->GetLOKWindowId());
|
|
|
|
boost::property_tree::write_json(aStream, aTree);
|
|
|
|
const std::string message = aStream.str();
|
|
|
|
pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, message.c_str());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-18 15:41:56 +01:00
|
|
|
JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, const OUString& rUIRoot,
|
|
|
|
const OUString& rUIFile)
|
|
|
|
: SalInstanceBuilder(dynamic_cast<SalInstanceWidget*>(pParent)
|
|
|
|
? dynamic_cast<SalInstanceWidget*>(pParent)->getWidget()
|
|
|
|
: nullptr,
|
|
|
|
rUIRoot, rUIFile)
|
2020-03-05 12:18:38 +01:00
|
|
|
, m_nWindowId(0)
|
2020-02-18 15:41:56 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2020-03-05 12:18:38 +01:00
|
|
|
JSInstanceBuilder::~JSInstanceBuilder()
|
|
|
|
{
|
|
|
|
if (m_nWindowId)
|
2020-03-06 11:11:57 +01:00
|
|
|
GetLOKWeldWidgetsMap().erase(m_nWindowId);
|
2020-03-05 12:18:38 +01:00
|
|
|
}
|
|
|
|
|
2020-03-06 11:11:57 +01:00
|
|
|
std::map<vcl::LOKWindowId, WidgetMap>& JSInstanceBuilder::GetLOKWeldWidgetsMap()
|
2020-03-05 12:18:38 +01:00
|
|
|
{
|
2020-03-06 11:11:57 +01:00
|
|
|
// Map to remember the LOKWindowId <-> weld widgets binding.
|
|
|
|
static std::map<vcl::LOKWindowId, WidgetMap> s_aLOKWeldBuildersMap;
|
2020-03-05 12:18:38 +01:00
|
|
|
|
|
|
|
return s_aLOKWeldBuildersMap;
|
|
|
|
}
|
|
|
|
|
2020-03-06 11:11:57 +01:00
|
|
|
weld::Widget* JSInstanceBuilder::FindWeldWidgetsMap(vcl::LOKWindowId nWindowId,
|
|
|
|
const OString& rWidget)
|
2020-03-05 12:18:38 +01:00
|
|
|
{
|
2020-03-06 11:11:57 +01:00
|
|
|
const auto it = GetLOKWeldWidgetsMap().find(nWindowId);
|
|
|
|
if (it != GetLOKWeldWidgetsMap().end())
|
|
|
|
{
|
|
|
|
auto widgetIt = it->second.find(rWidget);
|
|
|
|
if (widgetIt != it->second.end())
|
|
|
|
return widgetIt->second;
|
|
|
|
}
|
2020-03-05 12:18:38 +01:00
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2020-03-06 11:11:57 +01:00
|
|
|
void JSInstanceBuilder::RememberWidget(const OString& id, weld::Widget* pWidget)
|
|
|
|
{
|
|
|
|
auto it = GetLOKWeldWidgetsMap().find(m_nWindowId);
|
|
|
|
if (it != GetLOKWeldWidgetsMap().end())
|
|
|
|
{
|
|
|
|
it->second.insert(WidgetMap::value_type(id, pWidget));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-18 15:41:56 +01:00
|
|
|
std::unique_ptr<weld::Dialog> JSInstanceBuilder::weld_dialog(const OString& id, bool bTakeOwnership)
|
|
|
|
{
|
|
|
|
::Dialog* pDialog = m_xBuilder->get<::Dialog>(id);
|
2020-03-05 12:18:38 +01:00
|
|
|
m_nWindowId = pDialog->GetLOKWindowId();
|
|
|
|
|
2020-03-06 11:11:57 +01:00
|
|
|
WidgetMap map;
|
|
|
|
GetLOKWeldWidgetsMap().insert(
|
|
|
|
std::map<vcl::LOKWindowId, WidgetMap>::value_type(m_nWindowId, map));
|
2020-03-05 12:18:38 +01:00
|
|
|
|
2020-02-18 15:41:56 +01:00
|
|
|
std::unique_ptr<weld::Dialog> pRet(pDialog ? new SalInstanceDialog(pDialog, this, false)
|
|
|
|
: nullptr);
|
|
|
|
if (bTakeOwnership && pDialog)
|
|
|
|
{
|
|
|
|
assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed");
|
|
|
|
m_aOwnedToplevel.set(pDialog);
|
|
|
|
m_xBuilder->drop_ownership(pDialog);
|
|
|
|
}
|
|
|
|
|
|
|
|
const vcl::ILibreOfficeKitNotifier* pNotifier = pDialog->GetLOKNotifier();
|
|
|
|
if (pNotifier)
|
|
|
|
{
|
|
|
|
std::stringstream aStream;
|
|
|
|
boost::property_tree::ptree aTree = m_aOwnedToplevel->DumpAsPropertyTree();
|
|
|
|
aTree.put("id", m_aOwnedToplevel->GetLOKWindowId());
|
|
|
|
boost::property_tree::write_json(aStream, aTree);
|
|
|
|
const std::string message = aStream.str();
|
|
|
|
pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, message.c_str());
|
|
|
|
}
|
|
|
|
|
|
|
|
return pRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::unique_ptr<weld::Label> JSInstanceBuilder::weld_label(const OString& id, bool bTakeOwnership)
|
|
|
|
{
|
|
|
|
::FixedText* pLabel = m_xBuilder->get<FixedText>(id);
|
2020-03-06 11:11:57 +01:00
|
|
|
auto pWeldWidget = std::make_unique<JSLabel>(m_aOwnedToplevel, pLabel, this, bTakeOwnership);
|
|
|
|
|
|
|
|
RememberWidget(id, pWeldWidget.get());
|
|
|
|
return pWeldWidget;
|
2020-02-18 15:41:56 +01:00
|
|
|
}
|
|
|
|
|
2020-02-28 15:10:24 +01:00
|
|
|
std::unique_ptr<weld::Button> JSInstanceBuilder::weld_button(const OString& id, bool bTakeOwnership)
|
|
|
|
{
|
|
|
|
::Button* pButton = m_xBuilder->get<::Button>(id);
|
2020-03-06 11:11:57 +01:00
|
|
|
auto pWeldWidget
|
|
|
|
= pButton ? std::make_unique<JSButton>(m_aOwnedToplevel, pButton, this, bTakeOwnership)
|
|
|
|
: nullptr;
|
|
|
|
|
|
|
|
RememberWidget(id, pWeldWidget.get());
|
|
|
|
return pWeldWidget;
|
2020-02-28 15:10:24 +01:00
|
|
|
}
|
|
|
|
|
2020-02-24 18:35:18 +01:00
|
|
|
std::unique_ptr<weld::Entry> JSInstanceBuilder::weld_entry(const OString& id, bool bTakeOwnership)
|
|
|
|
{
|
|
|
|
Edit* pEntry = m_xBuilder->get<Edit>(id);
|
2020-03-06 11:11:57 +01:00
|
|
|
auto pWeldWidget
|
|
|
|
= pEntry ? std::make_unique<JSEntry>(m_aOwnedToplevel, pEntry, this, bTakeOwnership)
|
|
|
|
: nullptr;
|
|
|
|
|
|
|
|
RememberWidget(id, pWeldWidget.get());
|
|
|
|
return pWeldWidget;
|
2020-02-24 18:35:18 +01:00
|
|
|
}
|
|
|
|
|
2020-02-25 13:03:34 +01:00
|
|
|
std::unique_ptr<weld::ComboBox> JSInstanceBuilder::weld_combo_box(const OString& id,
|
|
|
|
bool bTakeOwnership)
|
|
|
|
{
|
|
|
|
vcl::Window* pWidget = m_xBuilder->get<vcl::Window>(id);
|
|
|
|
::ComboBox* pComboBox = dynamic_cast<::ComboBox*>(pWidget);
|
2020-03-06 11:11:57 +01:00
|
|
|
std::unique_ptr<weld::ComboBox> pWeldWidget;
|
|
|
|
|
2020-02-25 13:03:34 +01:00
|
|
|
if (pComboBox)
|
2020-03-06 11:11:57 +01:00
|
|
|
{
|
|
|
|
pWeldWidget
|
|
|
|
= std::make_unique<JSComboBox>(m_aOwnedToplevel, pComboBox, this, bTakeOwnership);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ListBox* pListBox = dynamic_cast<ListBox*>(pWidget);
|
|
|
|
pWeldWidget = pListBox ? std::make_unique<JSListBox>(m_aOwnedToplevel, pListBox, this,
|
|
|
|
bTakeOwnership)
|
|
|
|
: nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
RememberWidget(id, pWeldWidget.get());
|
|
|
|
return pWeldWidget;
|
2020-02-25 13:03:34 +01:00
|
|
|
}
|
|
|
|
|
2020-03-04 16:05:10 +01:00
|
|
|
std::unique_ptr<weld::Notebook> JSInstanceBuilder::weld_notebook(const OString& id,
|
|
|
|
bool bTakeOwnership)
|
|
|
|
{
|
|
|
|
TabControl* pNotebook = m_xBuilder->get<TabControl>(id);
|
2020-03-06 11:11:57 +01:00
|
|
|
auto pWeldWidget = pNotebook ? std::make_unique<JSNotebook>(m_aOwnedToplevel, pNotebook, this,
|
|
|
|
bTakeOwnership)
|
|
|
|
: nullptr;
|
|
|
|
|
|
|
|
RememberWidget(id, pWeldWidget.get());
|
|
|
|
return pWeldWidget;
|
2020-03-04 16:05:10 +01:00
|
|
|
}
|
|
|
|
|
2020-02-18 15:41:56 +01:00
|
|
|
JSLabel::JSLabel(VclPtr<vcl::Window> aOwnedToplevel, FixedText* pLabel,
|
|
|
|
SalInstanceBuilder* pBuilder, bool bTakeOwnership)
|
2020-02-28 13:47:22 +01:00
|
|
|
: JSWidget<SalInstanceLabel, FixedText>(aOwnedToplevel, pLabel, pBuilder, bTakeOwnership)
|
2020-02-18 15:41:56 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSLabel::set_label(const OUString& rText)
|
|
|
|
{
|
|
|
|
SalInstanceLabel::set_label(rText);
|
2020-02-24 18:35:18 +01:00
|
|
|
notifyDialogState();
|
2020-02-18 15:41:56 +01:00
|
|
|
};
|
2020-02-24 18:35:18 +01:00
|
|
|
|
2020-02-28 15:10:24 +01:00
|
|
|
JSButton::JSButton(VclPtr<vcl::Window> aOwnedToplevel, ::Button* pButton,
|
|
|
|
SalInstanceBuilder* pBuilder, bool bTakeOwnership)
|
|
|
|
: JSWidget<SalInstanceButton, ::Button>(aOwnedToplevel, pButton, pBuilder, bTakeOwnership)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2020-02-24 18:35:18 +01:00
|
|
|
JSEntry::JSEntry(VclPtr<vcl::Window> aOwnedToplevel, ::Edit* pEntry, SalInstanceBuilder* pBuilder,
|
|
|
|
bool bTakeOwnership)
|
2020-02-28 13:47:22 +01:00
|
|
|
: JSWidget<SalInstanceEntry, ::Edit>(aOwnedToplevel, pEntry, pBuilder, bTakeOwnership)
|
2020-02-24 18:35:18 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSEntry::set_text(const OUString& rText)
|
|
|
|
{
|
|
|
|
SalInstanceEntry::set_text(rText);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
2020-02-25 13:03:34 +01:00
|
|
|
|
|
|
|
JSListBox::JSListBox(VclPtr<vcl::Window> aOwnedToplevel, ::ListBox* pListBox,
|
|
|
|
SalInstanceBuilder* pBuilder, bool bTakeOwnership)
|
2020-02-28 13:47:22 +01:00
|
|
|
: JSWidget<SalInstanceComboBoxWithoutEdit, ::ListBox>(aOwnedToplevel, pListBox, pBuilder,
|
|
|
|
bTakeOwnership)
|
2020-02-25 13:03:34 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSListBox::insert(int pos, const OUString& rStr, const OUString* pId,
|
|
|
|
const OUString* pIconName, VirtualDevice* pImageSurface)
|
|
|
|
{
|
|
|
|
SalInstanceComboBoxWithoutEdit::insert(pos, rStr, pId, pIconName, pImageSurface);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSListBox::remove(int pos)
|
|
|
|
{
|
|
|
|
SalInstanceComboBoxWithoutEdit::remove(pos);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
|
|
|
|
|
|
|
JSComboBox::JSComboBox(VclPtr<vcl::Window> aOwnedToplevel, ::ComboBox* pComboBox,
|
|
|
|
SalInstanceBuilder* pBuilder, bool bTakeOwnership)
|
2020-02-28 13:47:22 +01:00
|
|
|
: JSWidget<SalInstanceComboBoxWithEdit, ::ComboBox>(aOwnedToplevel, pComboBox, pBuilder,
|
|
|
|
bTakeOwnership)
|
2020-02-25 13:03:34 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSComboBox::insert(int pos, const OUString& rStr, const OUString* pId,
|
|
|
|
const OUString* pIconName, VirtualDevice* pImageSurface)
|
|
|
|
{
|
|
|
|
SalInstanceComboBoxWithEdit::insert(pos, rStr, pId, pIconName, pImageSurface);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSComboBox::remove(int pos)
|
|
|
|
{
|
|
|
|
SalInstanceComboBoxWithEdit::remove(pos);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSComboBox::set_entry_text(const OUString& rText)
|
|
|
|
{
|
|
|
|
SalInstanceComboBoxWithEdit::set_entry_text(rText);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
2020-03-04 16:05:10 +01:00
|
|
|
|
|
|
|
JSNotebook::JSNotebook(VclPtr<vcl::Window> aOwnedToplevel, ::TabControl* pControl,
|
|
|
|
SalInstanceBuilder* pBuilder, bool bTakeOwnership)
|
|
|
|
: JSWidget<SalInstanceNotebook, ::TabControl>(aOwnedToplevel, pControl, pBuilder,
|
|
|
|
bTakeOwnership)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSNotebook::set_current_page(int nPage)
|
|
|
|
{
|
|
|
|
SalInstanceNotebook::set_current_page(nPage);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSNotebook::set_current_page(const OString& rIdent)
|
|
|
|
{
|
|
|
|
SalInstanceNotebook::set_current_page(rIdent);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSNotebook::remove_page(const OString& rIdent)
|
|
|
|
{
|
|
|
|
SalInstanceNotebook::remove_page(rIdent);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|
|
|
|
|
|
|
|
void JSNotebook::insert_page(const OString& rIdent, const OUString& rLabel, int nPos)
|
|
|
|
{
|
|
|
|
SalInstanceNotebook::insert_page(rIdent, rLabel, nPos);
|
|
|
|
notifyDialogState();
|
|
|
|
}
|