convert floating add field to .ui format

Change-Id: Ica9adc19f370d6340d2f5fac552cf1b995b390e0
This commit is contained in:
Caolán McNamara 2016-09-27 09:47:00 +01:00
parent e6fc195ae8
commit 50cacaea4d
10 changed files with 172 additions and 236 deletions

View File

@ -40,6 +40,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/dbreport,\
reportdesign/uiconfig/dbreport/ui/condformatdialog \
reportdesign/uiconfig/dbreport/ui/conditionwin \
reportdesign/uiconfig/dbreport/ui/datetimedialog \
reportdesign/uiconfig/dbreport/ui/floatingfield \
reportdesign/uiconfig/dbreport/ui/floatingnavigator \
reportdesign/uiconfig/dbreport/ui/floatingsort \
reportdesign/uiconfig/dbreport/ui/pagedialog \

View File

@ -202,7 +202,7 @@
#define RID_ERR_NO_COMMAND (RID_STRING_START + 151)
#define RID_ERR_NO_OBJECTS (RID_STRING_START + 152)
#define RID_STR_AREA (RID_STRING_START + 153)
#define RID_STR_INSERT (RID_STRING_START + 154)
// free
#define RID_STR_UNDO_SHRINK (RID_STRING_START + 155)
#define RID_STR_F_COUNTER (RID_STRING_START + 156)
#define RID_STR_F_ACCUMULATION (RID_STRING_START + 157)
@ -218,18 +218,8 @@
#define RID_MENU_REPORT ( RID_MENU_START + 0 )
#define RID_GROUPSROWPOPUPMENU ( RID_MENU_START + 1 )
#define RID_MENU_NAVIGATOR ( RID_MENU_START + 2 )
#define RID_TB_SORTING ( RID_MENU_START + 3 )
// free
#define RID_SVXIMGLIST_RPTEXPL (RID_IMAGELIST_START + 4)
// free
#define IMG_ADDFIELD_DLG_SC (RID_IMAGELIST_START + 8)
// free
#define IMG_ADDFIELD_DLG_LC (RID_IMAGELIST_START + 10)
// free
#define ADDFIELD_FL_HELP_SEPARATOR (RID_IMAGELIST_START + 12)
#define ADDFIELD_HELP_FIELD (RID_IMAGELIST_START + 13)
// untyped ---------------------------------------------------------------------
#define RID_STR_BOOL (RID_UNTYPED_START + 0 )

View File

@ -35,7 +35,6 @@
#include <connectivity/dbtools.hxx>
#include "helpids.hrc"
#include "RptResId.hrc"
#include "CondFormat.hrc"
#include "ModuleHelper.hxx"
#include "uistrings.hrc"
#include "ColumnInfo.hxx"
@ -64,7 +63,7 @@ class OAddFieldWindowListBox: public SvTreeListBox
VclPtr<OAddFieldWindow> m_pTabWin;
public:
explicit OAddFieldWindowListBox( OAddFieldWindow* _pParent );
explicit OAddFieldWindowListBox(Window* pParent, OAddFieldWindow* pFieldWindow);
virtual ~OAddFieldWindowListBox() override;
virtual void dispose() override;
@ -100,9 +99,9 @@ uno::Sequence< beans::PropertyValue > OAddFieldWindowListBox::getSelectedFieldDe
// class OAddFieldWindowListBox
OAddFieldWindowListBox::OAddFieldWindowListBox( OAddFieldWindow* _pParent )
:SvTreeListBox( _pParent, WB_TABSTOP|WB_BORDER|WB_SORT )
,m_pTabWin( _pParent )
OAddFieldWindowListBox::OAddFieldWindowListBox(Window *pParent, OAddFieldWindow* pFieldWindow)
: SvTreeListBox(pParent, WB_TABSTOP|WB_BORDER|WB_SORT)
, m_pTabWin(pFieldWindow)
{
SetHelpId( HID_RPT_FIELD_SEL );
SetSelectionMode(SelectionMode::Multiple);
@ -147,26 +146,24 @@ void OAddFieldWindowListBox::StartDrag( sal_Int8 /*_nAction*/, const Point& /*_r
pDataContainer->StartDrag( this, DND_ACTION_COPYMOVE | DND_ACTION_LINK );
}
// class OAddFieldWindow
OAddFieldWindow::OAddFieldWindow(vcl::Window* pParent
,const uno::Reference< beans::XPropertySet >& _xRowSet
)
:FloatingWindow(pParent, WinBits(WB_STDMODELESS|WB_SIZEABLE))
,::comphelper::OPropertyChangeListener(m_aMutex)
,::comphelper::OContainerListener(m_aMutex)
,m_xRowSet(_xRowSet)
,m_aActions(VclPtr<ToolBox>::Create(this,ModuleRes(RID_TB_SORTING)))
,m_pListBox(VclPtr<OAddFieldWindowListBox>::Create( this ))
,m_aFixedLine(VclPtr<FixedLine>::Create(this, ModuleRes(ADDFIELD_FL_HELP_SEPARATOR) ))
,m_aHelpText(VclPtr<FixedText>::Create(this, ModuleRes(ADDFIELD_HELP_FIELD) ))
,m_aInsertButton(VclPtr<PushButton>::Create(this, WB_TABSTOP|WB_CENTER))
,m_nCommandType(0)
,m_bEscapeProcessing(false)
,m_pChangeListener(nullptr)
,m_pContainerListener(nullptr)
OAddFieldWindow::OAddFieldWindow(vcl::Window* pParent ,const uno::Reference< beans::XPropertySet >& _xRowSet)
: FloatingWindow(pParent, "FloatingField", "modules/dbreport/ui/floatingfield.ui")
, ::comphelper::OPropertyChangeListener(m_aMutex)
, ::comphelper::OContainerListener(m_aMutex)
, m_xRowSet(_xRowSet)
, m_pListBox(VclPtr<OAddFieldWindowListBox>::Create(get<vcl::Window>("box"), this))
, m_nCommandType(0)
, m_bEscapeProcessing(false)
, m_pChangeListener(nullptr)
, m_pContainerListener(nullptr)
{
get(m_aActions, "toolbox");
m_nSortUpId = m_aActions->GetItemId(0);
m_nSortDownId = m_aActions->GetItemId(1);
m_nRemoveSortId = m_aActions->GetItemId(2);
m_nInsertId = m_aActions->GetItemId(4);
get(m_aHelpText, "helptext");
SetHelpId( HID_RPT_FIELD_SEL_WIN );
SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor()) );
SetMinOutputSizePixel(Size(STD_WIN_SIZE_X,STD_WIN_SIZE_Y));
@ -176,20 +173,18 @@ OAddFieldWindow::OAddFieldWindow(vcl::Window* pParent
m_aActions->SetSelectHdl(LINK(this, OAddFieldWindow, OnSortAction));
setToolBox(m_aActions.get());
m_aActions->CheckItem(SID_FM_SORTUP);
m_aActions->EnableItem(SID_ADD_CONTROL_PAIR, false);
m_aActions->CheckItem(m_nSortUpId);
m_aActions->EnableItem(m_nInsertId, false);
m_pListBox->SetDoubleClickHdl(LINK( this, OAddFieldWindow, OnDoubleClickHdl ) );
m_pListBox->SetSelectHdl(LINK( this, OAddFieldWindow, OnSelectHdl ) );
m_pListBox->SetDeselectHdl(LINK( this, OAddFieldWindow, OnSelectHdl ) );
m_pListBox->SetDoubleClickHdl(LINK( this, OAddFieldWindow, OnDoubleClickHdl ) );
m_pListBox->set_expand(true);
m_pListBox->set_height_request(m_pListBox->GetTextHeight() * 8);
m_pListBox->set_width_request(m_pListBox->approximate_char_width() * 40);
m_pListBox->Show();
const OUString sTitle(ModuleRes(RID_STR_INSERT));
m_aInsertButton->SetText(sTitle);
m_aInsertButton->SetClickHdl(LINK( this, OAddFieldWindow, OnClickHdl ) );
m_aInsertButton->Show();
m_aFixedLine->SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );
m_aHelpText->SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );
SetSizePixel(Size(STD_WIN_SIZE_X,STD_WIN_SIZE_Y));
@ -212,7 +207,6 @@ OAddFieldWindow::OAddFieldWindow(vcl::Window* pParent
}
}
OAddFieldWindow::~OAddFieldWindow()
{
disposeOnce();
@ -234,15 +228,12 @@ void OAddFieldWindow::dispose()
if ( m_pContainerListener.is() )
m_pContainerListener->dispose();
m_aActions.disposeAndClear();
m_aFixedLine.disposeAndClear();
m_aHelpText.disposeAndClear();
m_aInsertButton.disposeAndClear();
m_aActions.clear();
m_aHelpText.clear();
m_pListBox.disposeAndClear();
FloatingWindow::dispose();
}
void OAddFieldWindow::GetFocus()
{
if ( m_pListBox.get() )
@ -386,47 +377,6 @@ void OAddFieldWindow::Update()
}
}
void OAddFieldWindow::Resize()
{
FloatingWindow::Resize();
const Size aWindowSize( GetOutputSizePixel() );
const Size aRelated(LogicToPixel( Size( RELATED_CONTROLS, RELATED_CONTROLS ), MAP_APPFONT ));
const Size aFixedTextSize(LogicToPixel( Size( FIXEDTEXT_WIDTH, FIXEDTEXT_HEIGHT ), MAP_APPFONT ));
// ToolBar
Size aToolbarSize( m_aActions->GetSizePixel() );
Point aToolbarPos( aRelated.Width(), aRelated.Height());
m_aActions->SetPosPixel(Point(aToolbarPos.X(), aToolbarPos.Y()));
Size aLBSize( aWindowSize );
aLBSize.Width() -= ( 2 * aRelated.Width() );
// help text
const Size aHelpTextSize = m_aHelpText->CalcMinimumSize(aLBSize.Width());
// ListBox
Point aLBPos( aRelated.Width(), aRelated.Height() + aToolbarSize.Height() + aRelated.Height() );
aLBSize.Height() -= aToolbarSize.Height(); // Toolbar
aLBSize.Height() -= (6*aRelated.Height()); // 6 * gap
aLBSize.Height() -= aFixedTextSize.Height(); // fixed line
aLBSize.Height() -= aHelpTextSize.Height(); // help text
m_pListBox->SetPosSizePixel( aLBPos, aLBSize );
// FixedLine
Size aFLSize( aLBSize.Width(),aFixedTextSize.Height() );
Point aFLPos( aRelated.Width(), aLBPos.Y() + aLBSize.Height() + aRelated.Height());
m_aFixedLine->SetPosSizePixel( aFLPos, aFLSize );
// Help text
Point aFTPos( aRelated.Width(), aFLPos.Y() + aFLSize.Height() + aRelated.Height() );
m_aHelpText->SetPosSizePixel( aFTPos, aHelpTextSize );
}
uno::Reference< sdbc::XConnection> OAddFieldWindow::getConnection() const
{
return uno::Reference< sdbc::XConnection>(m_xRowSet->getPropertyValue( PROPERTY_ACTIVECONNECTION ),uno::UNO_QUERY);
@ -495,12 +445,7 @@ void OAddFieldWindow::_elementReplaced( const container::ContainerEvent& /*_rEve
IMPL_LINK_NOARG_TYPED( OAddFieldWindow, OnSelectHdl, SvTreeListBox*, void )
{
m_aActions->EnableItem(SID_ADD_CONTROL_PAIR, ( m_pListBox.get() && m_pListBox->GetSelectionCount() > 0 ));
}
IMPL_LINK_NOARG_TYPED( OAddFieldWindow, OnClickHdl, Button*, void )
{
OnDoubleClickHdl(nullptr);
m_aActions->EnableItem(m_nInsertId, ( m_pListBox.get() && m_pListBox->GetSelectionCount() > 0 ));
}
IMPL_LINK_NOARG_TYPED( OAddFieldWindow, OnDoubleClickHdl, SvTreeListBox*, bool )
@ -510,14 +455,6 @@ IMPL_LINK_NOARG_TYPED( OAddFieldWindow, OnDoubleClickHdl, SvTreeListBox*, bool )
return false;
}
void OAddFieldWindow::setImageList(sal_Int16 _eBitmapSet)
{
sal_Int16 nN = IMG_ADDFIELD_DLG_SC;
if ( _eBitmapSet == SFX_SYMBOLS_SIZE_LARGE )
nN = IMG_ADDFIELD_DLG_LC;
m_aActions->SetImageList(ImageList(ModuleRes(nN)));
}
void OAddFieldWindow::resizeControls(const Size& _rDiff)
{
// we use large images so we must change them
@ -530,11 +467,11 @@ void OAddFieldWindow::resizeControls(const Size& _rDiff)
IMPL_LINK_NOARG_TYPED( OAddFieldWindow, OnSortAction, ToolBox*, void )
{
const sal_uInt16 nCurItem = m_aActions->GetCurItemId();
if ( SID_ADD_CONTROL_PAIR == nCurItem )
if (nCurItem == m_nInsertId)
OnDoubleClickHdl(nullptr);
else
{
if ( SID_FM_REMOVE_FILTER_SORT == nCurItem || !m_aActions->IsItemChecked(nCurItem) )
if (nCurItem == m_nRemoveSortId || !m_aActions->IsItemChecked(nCurItem))
{
const sal_uInt16 nItemCount = m_aActions->GetItemCount();
for (sal_uInt16 j = 0; j< nItemCount; ++j)
@ -544,17 +481,17 @@ IMPL_LINK_NOARG_TYPED( OAddFieldWindow, OnSortAction, ToolBox*, void )
m_aActions->CheckItem(nItemId,false);
}
SvSortMode eSortMode = SortNone;
if ( SID_FM_REMOVE_FILTER_SORT != nCurItem )
if (nCurItem != m_nRemoveSortId)
{
m_aActions->CheckItem(nCurItem,!m_aActions->IsItemChecked(nCurItem));
if ( m_aActions->IsItemChecked(SID_FM_SORTUP) )
if (m_aActions->IsItemChecked(m_nSortUpId))
eSortMode = SortAscending;
else if ( m_aActions->IsItemChecked(SID_FM_SORTDOWN) )
else if (m_aActions->IsItemChecked(m_nSortDownId))
eSortMode = SortDescending;
}
m_pListBox->GetModel()->SetSortMode(eSortMode);
if ( SID_FM_REMOVE_FILTER_SORT == nCurItem )
if (nCurItem == m_nRemoveSortId)
Update();
m_pListBox->GetModel()->Resort();

View File

@ -18,7 +18,6 @@
*/
#include "CondFormat.hxx"
#include "CondFormat.hrc"
#include "uistrings.hrc"
#include "RptResId.hrc"

View File

@ -1,28 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef RPTUI_CONDFORMAT_HRC
#define RPTUI_CONDFORMAT_HRC
#define RELATED_CONTROLS 4
#define FIXEDTEXT_WIDTH 60
#define FIXEDTEXT_HEIGHT 8
#endif // RPTUI_PAGENUMBER_HRC
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@ -16,7 +16,6 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "CondFormat.hrc"
#include "RptResId.hrc"
#include "helpids.hrc"
#include "rptui_slotid.hrc"
@ -25,7 +24,6 @@ String STR_NUMBERED_CONDITION
{
Text [ en-US ] = "Condition $number$";
};
String STR_COLOR_WHITE
{
Text [ en-US ] = "White" ;
@ -43,89 +41,4 @@ String STR_TRANSPARENT
Text [ en-US ] = "No Fill" ;
};
#define MASKCOLOR MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; }
ImageList 31000
{
MASKCOLOR;
prefix = "sc";
IdList = {05500;};
IdCount = 1;
};
ToolBox RID_TB_SORTING
{
Pos = MAP_APPFONT ( 0,0 ) ;
ButtonType = BUTTON_SYMBOL;
Align = BOXALIGN_TOP;
ItemList =
{
ToolBoxItem
{
Identifier = SID_FM_SORTUP;
Text [ en-US ] = "Sort Ascending" ;
Checkable = TRUE;
};
ToolBoxItem
{
Identifier = SID_FM_SORTDOWN;
Text [ en-US ] = "Sort Descending" ;
Checkable = TRUE;
};
ToolBoxItem
{
Identifier = SID_FM_REMOVE_FILTER_SORT;
Text [ en-US ] = "Remove sorting" ;
};
ToolBoxItem
{
Type = TOOLBOXITEM_SEPARATOR;
};
ToolBoxItem
{
Identifier = SID_ADD_CONTROL_PAIR;
Text [ en-US ] = "Insert" ;
};
};
};
ImageList IMG_ADDFIELD_DLG_SC
{
MASKCOLOR;
FileList =
{
< "cmd/sc_sortup.png" ; SID_FM_SORTUP ; > ;
< "cmd/sc_sortdown.png" ; SID_FM_SORTDOWN ; > ;
< "cmd/sc_removefiltersort.png" ; SID_FM_REMOVE_FILTER_SORT ; > ;
};
};
ImageList IMG_ADDFIELD_DLG_LC
{
MASKCOLOR;
FileList =
{
< "cmd/lc_sortup.png" ; SID_FM_SORTUP ; > ;
< "cmd/lc_sortdown.png" ; SID_FM_SORTDOWN ; > ;
< "cmd/lc_removefiltersort.png" ; SID_FM_REMOVE_FILTER_SORT ; > ;
};
};
FixedLine ADDFIELD_FL_HELP_SEPARATOR
{
SVLook = TRUE ;
Pos = MAP_APPFONT ( RELATED_CONTROLS , RELATED_CONTROLS ) ;
Size = MAP_APPFONT ( RELATED_CONTROLS , RELATED_CONTROLS ) ;
Text [ en-US ] = "Help";
};
FixedText ADDFIELD_HELP_FIELD
{
SVLook = TRUE ;
Pos = MAP_APPFONT ( RELATED_CONTROLS , RELATED_CONTROLS ) ;
Size = MAP_APPFONT ( RELATED_CONTROLS , RELATED_CONTROLS ) ;
WordBreak = TRUE;
Text [ en-US ] = "Highlight the fields to insert into the selected section of the template, then click Insert or press Enter.";
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@ -20,7 +20,6 @@
#include "Condition.hxx"
#include "UITools.hxx"
#include "CondFormat.hxx"
#include "CondFormat.hrc"
#include "RptResId.hrc"
#include "ReportController.hxx"
#include "ModuleHelper.hxx"

View File

@ -57,19 +57,20 @@ class OAddFieldWindow :public FloatingWindow
VclPtr<ToolBox> m_aActions;
VclPtr<OAddFieldWindowListBox> m_pListBox;
VclPtr<FixedLine> m_aFixedLine;
VclPtr<FixedText> m_aHelpText;
VclPtr<PushButton> m_aInsertButton;
Link<OAddFieldWindow&,void> m_aCreateLink;
OUString m_aCommandName;
OUString m_sFilter;
sal_uInt16 m_nSortUpId;
sal_uInt16 m_nSortDownId;
sal_uInt16 m_nRemoveSortId;
sal_uInt16 m_nInsertId;
sal_Int32 m_nCommandType;
bool m_bEscapeProcessing;
::rtl::Reference< comphelper::OPropertyChangeMultiplexer> m_pChangeListener;
::rtl::Reference< comphelper::OContainerListenerAdapter> m_pContainerListener;
DECL_LINK_TYPED( OnClickHdl, Button*, void );
DECL_LINK_TYPED( OnDoubleClickHdl, SvTreeListBox*, bool );
DECL_LINK_TYPED( OnSelectHdl, SvTreeListBox*, void );
DECL_LINK_TYPED( OnSortAction, ToolBox*, void );
@ -82,7 +83,6 @@ public:
virtual ~OAddFieldWindow() override;
virtual void dispose() override;
virtual void Resize() override;
virtual void GetFocus() override;
virtual bool PreNotify( NotifyEvent& _rNEvt ) override;
@ -99,7 +99,10 @@ public:
@param _eBitmapSet
<svtools/imgdef.hxx>
*/
virtual void setImageList(sal_Int16 _eBitmapSet) override;
virtual void setImageList(sal_Int16) override
{
//to-do, remove
}
/** will be called when the controls need to be resized.
*/

View File

@ -664,9 +664,4 @@ String RID_STR_REPORT_FOOTER
{
Text [ en-US ] = "Report Footer";
};
String RID_STR_INSERT
{
Text [ en-US ] = "Insert";
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.0"/>
<object class="GtkWindow" id="FloatingField">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border_width">6</property>
<property name="title" translatable="yes">Sorting and Grouping</property>
<property name="type_hint">utility</property>
<child>
<object class="GtkGrid" id="grid3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkToolbar" id="toolbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="toolbar_style">icons</property>
<child>
<object class="GtkToolButton" id="up">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Sort Ascending</property>
<property name="use_underline">True</property>
<property name="icon_name">cmd/sc_sortup.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="down">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Sort Descending</property>
<property name="use_underline">True</property>
<property name="icon_name">cmd/sc_sortdown.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="delete">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Remove sorting</property>
<property name="use_underline">True</property>
<property name="icon_name">cmd/sc_removefiltersort.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem" id="separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="insert">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Insert</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="helptext">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Highlight the fields to insert into the selected section of the template, then click Insert or press Enter.</property>
<property name="wrap">True</property>
<property name="max_width_chars">60</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>