summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrisztian Pinter <pin.terminator@gmail.com>2013-06-18 16:59:27 +0200
committerJan Holesovsky <kendy@suse.cz>2013-07-18 11:25:50 +0200
commit7ced337e1f0e1fae81ff7f196e59e558b729bdde (patch)
tree4276f19d1b0107187d510c81f72954dd58b3efdf
parent54518a209d0ffe00f8e391472da92e398c474392 (diff)
startcenter: GSOC Use Widget Layout for the Start Center
Known issue: after starting a module from the startcenter, and closing it, the buttons for the modules remain stuck after hovering the mouse over them Change-Id: I50883868764565be62a2f123a832154ef015e763
-rw-r--r--framework/UIConfig_startmodule.mk4
-rw-r--r--framework/source/services/backingwindow.cxx563
-rw-r--r--framework/source/services/backingwindow.hxx74
-rw-r--r--framework/uiconfig/startmodule/ui/startcenter.ui280
4 files changed, 456 insertions, 465 deletions
diff --git a/framework/UIConfig_startmodule.mk b/framework/UIConfig_startmodule.mk
index 6bbb68d93798..7447b998c143 100644
--- a/framework/UIConfig_startmodule.mk
+++ b/framework/UIConfig_startmodule.mk
@@ -21,4 +21,8 @@ $(eval $(call gb_UIConfig_add_toolbarfiles,modules/StartModule,\
framework/uiconfig/startmodule/toolbar/standardbar \
))
+$(eval $(call gb_UIConfig_add_uifiles,modules/StartModule,\
+ framework/uiconfig/startmodule/ui/startcenter \
+))
+
# vim: set noet sw=4 ts=4:
diff --git a/framework/source/services/backingwindow.cxx b/framework/source/services/backingwindow.cxx
index 7dab8c9792ad..1117246d4ad2 100644
--- a/framework/source/services/backingwindow.cxx
+++ b/framework/source/services/backingwindow.cxx
@@ -17,8 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-// autogen include statement, do not remove
-
#include "backingwindow.hxx"
#include "classes/resource.hrc"
#include "framework.hrc"
@@ -82,81 +80,31 @@ using namespace framework;
#define TEMPLATE_URL "slot:5500"
#define OPEN_URL ".uno:Open"
-DecoToolBox::DecoToolBox( Window* pParent, WinBits nStyle ) :
- ToolBox( pParent, nStyle )
-{
- SetBackground();
- SetPaintTransparent( sal_True );
-}
-
-void DecoToolBox::DataChanged( const DataChangedEvent& rDCEvt )
-{
- Window::DataChanged( rDCEvt );
-
- if ( rDCEvt.GetFlags() & SETTINGS_STYLE )
- {
- calcMinSize();
- SetBackground();
- SetPaintTransparent( sal_True );
- }
-}
-
-void DecoToolBox::calcMinSize()
-{
- ToolBox aTbx( GetParent() );
- sal_uInt16 nItems = GetItemCount();
- for( sal_uInt16 i = 0; i < nItems; i++ )
- {
- sal_uInt16 nId = GetItemId( i );
- aTbx.InsertItem( nId, GetItemImage( nId ) );
- }
- aTbx.SetOutStyle( TOOLBOX_STYLE_FLAT );
- maMinSize = aTbx.CalcWindowSizePixel();
-}
-
-Size DecoToolBox::getMinSize()
-{
- return maMinSize;
-}
-
-class RecentFilesStringLength : public ::cppu::WeakImplHelper1< ::com::sun::star::util::XStringWidth >
-{
- public:
- RecentFilesStringLength() {}
- virtual ~RecentFilesStringLength() {}
-
- // XStringWidth
- sal_Int32 SAL_CALL queryStringWidth( const OUString& aString )
- throw (::com::sun::star::uno::RuntimeException)
- {
- return aString.getLength();
- }
-};
-
-#define STC_BUTTON_STYLE (WB_LEFT | WB_VCENTER | WB_FLATBUTTON | WB_BEVELBUTTON)
-
BackingWindow::BackingWindow( Window* i_pParent ) :
- Window( i_pParent, FwkResId( DLG_BACKING ) ),
- maWriterButton( this, STC_BUTTON_STYLE ),
- maCalcButton( this, STC_BUTTON_STYLE ),
- maImpressButton( this, STC_BUTTON_STYLE ),
- maOpenButton( this, STC_BUTTON_STYLE ),
- maDrawButton( this, STC_BUTTON_STYLE ),
- maDBButton( this, STC_BUTTON_STYLE ),
- maMathButton( this, STC_BUTTON_STYLE ),
- maTemplateButton( this, STC_BUTTON_STYLE ),
- maToolbox( this, WB_DIALOGCONTROL ),
+ Window( i_pParent , FwkResId( DLG_BACKING ) ),
maOpenString( FwkResId( STR_BACKING_FILE ) ),
maTemplateString( FwkResId( STR_BACKING_TEMPLATE ) ),
- maButtonImageSize( 10, 10 ),
mbInitControls( false ),
mnHideExternalLinks( 0 ),
- mpAccExec( NULL ),
- mnBtnPos( 120 ),
- mnBtnTop( 150 )
+ mpAccExec( NULL )
{
- mnColumnWidth[0] = mnColumnWidth[1] = 0;
- mnTextColumnWidth[0] = mnTextColumnWidth[1] = 0;
+ m_pUIBuilder = new VclBuilder(this, getUIRootDir(),
+ "modules/StartModule/ui/startcenter.ui",
+ "StartCenter" );
+ get(mpWriterButton, "writer");
+ get(mpCalcButton, "calc");
+ get(mpImpressButton, "impress");
+ get(mpOpenButton, "open");
+ get(mpDrawButton, "draw");
+ get(mpDBButton, "database");
+ get(mpMathButton, "math");
+ get(mpTemplateButton, "templates");
+
+ get(mpExtensionsButton, "extension");
+ get(mpInfoButton, "info");
+ get(mpTplRepButton, "add_temp");
+
+ get(mpStartCenterContainer, "sccontainer");
try
{
@@ -192,73 +140,46 @@ BackingWindow::BackingWindow( Window* i_pParent ) :
SAL_WARN( "fwk", "BackingWindow - caught an exception! " << e.Message );
}
- OUString aExtHelpText( FwkResId( STR_BACKING_EXTHELP ) );
- OUString aInfoHelpText( FwkResId( STR_BACKING_INFOHELP ) );
- OUString aTplRepHelpText( FwkResId( STR_BACKING_TPLREP ) );
-
// clean up resource stack
- FreeResource();
+ //FreeResource();
// fdo#34392: we do the layout dynamically, the layout depends on the font,
// so we should handle data changed events (font changing) of the last child
// control, at this point all the controls have updated settings (i.e. font).
- maToolbox.AddEventListener( LINK( this, BackingWindow, WindowEventListener ) );
+
EnableChildTransparentMode();
SetStyle( GetStyle() | WB_DIALOGCONTROL );
- // force tab cycling in toolbox
- maToolbox.SetStyle( maToolbox.GetStyle() | WB_FORCETABCYCLE );
-
- // insert toolbox items
- maToolbox.InsertItem( nItemId_TplRep, Image() );
- maToolbox.SetItemText( nItemId_TplRep, aTplRepHelpText );
- maToolbox.SetQuickHelpText( nItemId_TplRep, aTplRepHelpText );
- maToolbox.SetItemCommand( nItemId_TplRep, String( ".HelpId:StartCenter:TemplateRepository" ) );
- maToolbox.ShowItem( nItemId_TplRep );
-
- maToolbox.InsertItem( nItemId_Extensions, Image() );
- maToolbox.SetQuickHelpText( nItemId_Extensions, aExtHelpText );
- maToolbox.SetItemText( nItemId_Extensions, aExtHelpText );
- maToolbox.SetItemCommand( nItemId_Extensions, String( ".HelpId:StartCenter:Extensions" ) );
- maToolbox.ShowItem( nItemId_Extensions );
-
- maToolbox.InsertItem( nItemId_Info, Image() );
- maToolbox.SetItemText( nItemId_Info, aInfoHelpText );
- maToolbox.SetQuickHelpText( nItemId_Info, aInfoHelpText );
- maToolbox.SetItemCommand( nItemId_Info, String( ".HelpId:StartCenter:Info" ) );
- maToolbox.ShowItem( nItemId_Info );
-
// get dispatch provider
Reference<XDesktop2> xDesktop = Desktop::create( comphelper::getProcessComponentContext() );
mxDesktopDispatchProvider = xDesktop;
- maWriterButton.SetHelpId( ".HelpId:StartCenter:WriterButton" );
- maCalcButton.SetHelpId( ".HelpId:StartCenter:CalcButton" );
- maImpressButton.SetHelpId( ".HelpId:StartCenter:ImpressButton" );
- maDrawButton.SetHelpId( ".HelpId:StartCenter:DrawButton" );
- maDBButton.SetHelpId( ".HelpId:StartCenter:DBButton" );
- maMathButton.SetHelpId( ".HelpId:StartCenter:MathButton" );
- maTemplateButton.SetHelpId( ".HelpId:StartCenter:TemplateButton" );
- maOpenButton.SetHelpId( ".HelpId:StartCenter:OpenButton" );
- maToolbox.SetHelpId( ".HelpId:StartCenter:Toolbox" );
+ mpWriterButton->SetHelpId( ".HelpId:StartCenter:WriterButton" );
+ mpCalcButton->SetHelpId( ".HelpId:StartCenter:CalcButton" );
+ mpImpressButton->SetHelpId( ".HelpId:StartCenter:ImpressButton" );
+ mpDrawButton->SetHelpId( ".HelpId:StartCenter:DrawButton" );
+ mpDBButton->SetHelpId( ".HelpId:StartCenter:DBButton" );
+ mpMathButton->SetHelpId( ".HelpId:StartCenter:MathButton" );
+ mpTemplateButton->SetHelpId( ".HelpId:StartCenter:TemplateButton" );
+ mpOpenButton->SetHelpId( ".HelpId:StartCenter:OpenButton" );
+ mpExtensionsButton->SetHelpId( ".HelpId:StartCenter:Extensions" );
+ mpInfoButton->SetHelpId( ".HelpId:StartCenter:Info" );
+ mpTplRepButton->SetHelpId( ".HelpId:StartCenter:TemplateRepository" );
// init background
initBackground();
- // add some breathing space for the images
- maButtonImageSize.Width() += 12;
- maButtonImageSize.Height() += 12;
-
// set a slighly larger font than normal labels on the texts
maTextFont.SetSize( Size( 0, 11 ) );
maTextFont.SetWeight( WEIGHT_NORMAL );
+
+ Window::Show();
}
BackingWindow::~BackingWindow()
{
- maToolbox.RemoveEventListener( LINK( this, BackingWindow, WindowEventListener ) );
delete mpAccExec;
if( mxPopupMenuController.is() )
@@ -281,11 +202,13 @@ BackingWindow::~BackingWindow()
void BackingWindow::GetFocus()
{
- if( IsVisible() )
- maWriterButton.GrabFocus();
+ // CRASH
+ //if( IsVisible() )
+ // mpWriterButton->GrabFocus();
Window::GetFocus();
}
+
class ImageContainerRes : public Resource
{
public:
@@ -293,6 +216,7 @@ class ImageContainerRes : public Resource
~ImageContainerRes() { FreeResource(); }
};
+
IMPL_LINK( BackingWindow, WindowEventListener, VclSimpleEvent*, pEvent )
{
VclWindowEvent* pWinEvent = dynamic_cast<VclWindowEvent*>( pEvent );
@@ -311,6 +235,7 @@ IMPL_LINK( BackingWindow, WindowEventListener, VclSimpleEvent*, pEvent )
return 0;
}
+/*
void BackingWindow::prepareRecentFileMenu()
{
if( ! mxPopupMenu.is() )
@@ -345,21 +270,10 @@ void BackingWindow::prepareRecentFileMenu()
VCLXMenu* pTKMenu = VCLXMenu::GetImplementation( mxPopupMenu );
if ( pTKMenu )
pRecentMenu = dynamic_cast< PopupMenu * >( pTKMenu->GetMenu() );
- maOpenButton.SetPopupMenu( pRecentMenu );
+ mpOpenButton->SetPopupMenu( pRecentMenu );
}
}
-
-namespace
-{
-static void lcl_SetBlackButtonTextColor( PushButton& rButton )
-{
- AllSettings aSettings = rButton.GetSettings();
- StyleSettings aStyleSettings = aSettings.GetStyleSettings();
- aStyleSettings.SetButtonTextColor( Color(COL_BLACK) );
- aSettings.SetStyleSettings( aStyleSettings );
- rButton.SetSettings( aSettings );
-}
-}
+*/
void BackingWindow::initBackground()
{
@@ -391,33 +305,14 @@ void BackingWindow::initBackground()
Application::LoadBrandBitmap ("shell/backing_left", maBackgroundLeft);
Application::LoadBrandBitmap ("shell/backing_right", maBackgroundRight);
}
- maToolbox.SetItemImage( nItemId_Extensions, BitmapEx( FwkResId( BMP_BACKING_EXT ) ) );
-//### maToolbox.SetItemImage( nItemId_Reg, BitmapEx( FwkResId( BMP_BACKING_REG ) ) );
- maToolbox.SetItemImage( nItemId_Info, BitmapEx( FwkResId( BMP_BACKING_INFO ) ) );
- maToolbox.SetItemImage( nItemId_TplRep, BitmapEx( FwkResId( BMP_BACKING_TPLREP ) ) );
-
- // get icon images from fwk resource and set them on the appropriate buttons
- loadImage( FwkResId( BMP_BACKING_WRITER ), maWriterButton );
- loadImage( FwkResId( BMP_BACKING_CALC ), maCalcButton );
- loadImage( FwkResId( BMP_BACKING_IMPRESS ), maImpressButton );
- loadImage( FwkResId( BMP_BACKING_DRAW ), maDrawButton );
- loadImage( FwkResId( BMP_BACKING_DATABASE ), maDBButton );
- loadImage( FwkResId( BMP_BACKING_FORMULA ), maMathButton );
- loadImage( FwkResId( BMP_BACKING_OPENFILE ), maOpenButton );
- loadImage( FwkResId( BMP_BACKING_OPENTEMPLATE ), maTemplateButton );
-
- maOpenButton.SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
- maOpenButton.SetActivateHdl( LINK( this, BackingWindow, ActivateHdl ) );
-
- // fdo#41440: force black text color, since the background image is white.
- lcl_SetBlackButtonTextColor( maWriterButton );
- lcl_SetBlackButtonTextColor( maCalcButton );
- lcl_SetBlackButtonTextColor( maImpressButton );
- lcl_SetBlackButtonTextColor( maOpenButton );
- lcl_SetBlackButtonTextColor( maDrawButton );
- lcl_SetBlackButtonTextColor( maDBButton );
- lcl_SetBlackButtonTextColor( maMathButton );
- lcl_SetBlackButtonTextColor( maTemplateButton );
+
+ // CRASH
+ //mpOpenButton->SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
+ //mpOpenButton->SetActivateHdl( LINK( this, BackingWindow, ActivateHdl ) );
+
+ // this will be moved to somewhere saner later
+ nSCWidth = 780;
+ nSCHeight = maBackgroundLeft.GetSizePixel().Height();
}
void BackingWindow::initControls()
@@ -427,22 +322,6 @@ void BackingWindow::initControls()
mbInitControls = true;
- // calculate dialog size
- // begin with background bitmap
- maControlRect = Rectangle( Point(), maBackgroundLeft.GetSizePixel() );
- maControlRect.Left() += nShadowLeft;
- maControlRect.Right() -= nShadowRight;
- maControlRect.Top() += nShadowTop;
- maControlRect.Bottom() -= nShadowBottom;
-
- long nYPos = 0;
-
- if( maControlRect.GetWidth() < mnBtnPos + 20 )
- maControlRect.Right() = maControlRect.Left() + mnBtnPos + 20;
-
- if( maControlRect.GetWidth() < mnBtnPos + 10 )
- maControlRect.Right() = maControlRect.Left() + mnBtnPos + 10;
-
// collect the URLs of the entries in the File/New menu
SvtModuleOptions aModuleOptions;
std::set< OUString > aFileNewAppsAvailable;
@@ -482,99 +361,48 @@ void BackingWindow::initControls()
}
// layout the buttons
- layoutButton( WRITER_URL, 0, 0, aFileNewAppsAvailable,
+
+ layoutButton( WRITER_URL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SWRITER,
- maWriterButton, aMnemns );
- layoutButton( DRAW_URL, 1, 0, aFileNewAppsAvailable,
+ *mpWriterButton, aMnemns );
+ layoutButton( DRAW_URL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SDRAW,
- maDrawButton, aMnemns );
- nYPos += maButtonImageSize.Height() + 10;
- layoutButton( CALC_URL, 0, 0, aFileNewAppsAvailable,
+ *mpDrawButton, aMnemns );
+ layoutButton( CALC_URL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SCALC,
- maCalcButton, aMnemns );
- layoutButton( BASE_URL, 1, 0, aFileNewAppsAvailable,
+ *mpCalcButton, aMnemns );
+ layoutButton( BASE_URL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SDATABASE,
- maDBButton, aMnemns );
- nYPos += maButtonImageSize.Height() + 10;
- layoutButton( IMPRESS_WIZARD_URL, 0, 0, aFileNewAppsAvailable,
+ *mpDBButton, aMnemns );
+ layoutButton( IMPRESS_WIZARD_URL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SIMPRESS,
- maImpressButton, aMnemns );
- layoutButton( MATH_URL, 1, 0, aFileNewAppsAvailable,
+ *mpImpressButton, aMnemns );
+ layoutButton( MATH_URL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SMATH,
- maMathButton, aMnemns );
+ *mpMathButton, aMnemns );
- nYPos += 3*maButtonImageSize.Height() / 2;
-
- layoutButton( NULL, 0, 18, aFileNewAppsAvailable,
+ layoutButton( NULL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SWRITER,
- maOpenButton, aMnemns, maOpenString );
- layoutButton( NULL, 1, 0, aFileNewAppsAvailable,
+ *mpOpenButton, aMnemns, maOpenString );
+ layoutButton( NULL, aFileNewAppsAvailable,
aModuleOptions, SvtModuleOptions::E_SWRITER,
- maTemplateButton, aMnemns, maTemplateString );
- nYPos += 10;
+ *mpTemplateButton, aMnemns, maTemplateString );
- DBG_ASSERT( nYPos < maControlRect.GetHeight(), "misformatting !" );
- if( mnColumnWidth[0] + mnColumnWidth[1] + mnBtnPos + 20 > maControlRect.GetWidth() )
- maControlRect.Right() = maControlRect.Left() + mnColumnWidth[0] + mnColumnWidth[1] + mnBtnPos + 20;
+ layoutExternalLink( *mpExtensionsButton );
+ layoutExternalLink( *mpInfoButton );
+ layoutExternalLink( *mpTplRepButton );
- mnTextColumnWidth[0] = mnColumnWidth[0];
- mnTextColumnWidth[1] = mnColumnWidth[1];
-
- if( mnTextColumnWidth[1] > mnTextColumnWidth[0] )
- {
- mnColumnWidth[0] = mnColumnWidth[1];
- mnTextColumnWidth[0] = mnTextColumnWidth[1];
- }
- else
- {
- mnColumnWidth[1] = mnColumnWidth[0];
- mnTextColumnWidth[1] = mnTextColumnWidth[0];
- }
- if( maControlRect.GetWidth() < maControlRect.GetHeight() * 3 / 2 )
- {
- maControlRect.Right() = maControlRect.Left() + maControlRect.GetHeight() * 3 / 2;
- long nDelta = (maControlRect.GetWidth() - mnBtnPos - mnColumnWidth[1] - mnColumnWidth[0] - 20);
- mnColumnWidth[0] += nDelta/2;
- mnColumnWidth[1] += nDelta/2;
- }
-
- maToolbox.SetSelectHdl( LINK( this, BackingWindow, ToolboxHdl ) );
- if( mnHideExternalLinks == 0 )
- maToolbox.Show();
-
- // scale middle map to formatted width
- Size aMiddleSegmentSize( maControlRect.GetSize().Width() + nShadowLeft + nShadowRight,
- maBackgroundMiddle.GetSizePixel().Height() );
-
- long nLW = maBackgroundLeft.GetSizePixel().Width();
- long nRW = maBackgroundRight.GetSizePixel().Width();
- if( aMiddleSegmentSize.Width() > nLW + nRW )
- {
- aMiddleSegmentSize.Width() -= nLW;
- aMiddleSegmentSize.Width() -= nRW;
- maBackgroundMiddle.Scale( aMiddleSegmentSize );
- }
- else
- maBackgroundMiddle = BitmapEx();
+ //SAL _DEBUG("container size: " << mpStartCenterContainer->GetSizePixel().Width()
+ // << " " << mpStartCenterContainer->GetSizePixel().Height());
Resize();
- maWriterButton.GrabFocus();
+ mpWriterButton->GrabFocus();
}
-void BackingWindow::loadImage( const ResId& i_rId, PushButton& i_rButton )
-{
- BitmapEx aBmp( i_rId );
- Size aImgSize( aBmp.GetSizePixel() );
- if( aImgSize.Width() > maButtonImageSize.Width() )
- maButtonImageSize.Width() = aImgSize.Width();
- if( aImgSize.Height() > maButtonImageSize.Height() )
- maButtonImageSize.Height() = aImgSize.Height();
- i_rButton.SetModeImage( aBmp );
-}
void BackingWindow::layoutButton(
- const char* i_pURL, int nColumn, int i_nExtraWidth,
+ const char* i_pURL,
const std::set<OUString>& i_rURLS,
SvtModuleOptions& i_rOpt, SvtModuleOptions::EModule i_eMod,
PushButton& i_rBtn,
@@ -584,7 +412,7 @@ void BackingWindow::layoutButton(
{
OUString aURL( i_pURL ? OUString::createFromAscii( i_pURL ) : OUString() );
// setup button
- i_rBtn.SetPaintTransparent( sal_True );
+ i_rBtn.SetPaintTransparent( sal_False );
i_rBtn.SetClickHdl( LINK( this, BackingWindow, ClickHdl ) );
if( i_pURL && (! i_rOpt.IsModuleInstalled( i_eMod ) || i_rURLS.find( aURL ) == i_rURLS.end()) )
{
@@ -594,36 +422,39 @@ void BackingWindow::layoutButton(
// setup text
i_rBtn.SetFont( maTextFont );
i_rBtn.SetControlFont( maTextFont );
+
String aText( i_rStr.Len() ? i_rStr : SvFileInformationManager::GetDescription( INetURLObject( aURL ) ) );
i_rMnemns.CreateMnemonic( aText );
i_rBtn.SetText( aText );
- long nTextWidth = i_rBtn.GetTextWidth( i_rBtn.GetText() );
-
- nTextWidth += maButtonImageSize.Width() + 8 + i_nExtraWidth; // add some fuzz to be on the safe side
- if( nColumn >= 0 && nColumn < static_cast<int>(sizeof (mnColumnWidth) / sizeof (mnColumnWidth[0])) )
- {
- if( nTextWidth > mnColumnWidth[nColumn] )
- mnColumnWidth[nColumn] = nTextWidth;
- }
-
+ //without this line, imagebuttons with text don't work properly
i_rBtn.SetImageAlign( IMAGEALIGN_LEFT );
+
// show the controls
i_rBtn.Show();
}
+void BackingWindow::layoutExternalLink( PushButton& i_rBtn )
+{
+ i_rBtn.SetPaintTransparent( sal_False );
+ i_rBtn.SetClickHdl( LINK( this, BackingWindow, ExtLinkClickHdl ) );
+
+ if( mnHideExternalLinks == 0 )
+ i_rBtn.Show();
+}
+
void BackingWindow::Paint( const Rectangle& )
{
Resize();
Wallpaper aBack( svtools::ColorConfig().GetColorValue(::svtools::APPBACKGROUND).nColor );
Region aClip( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ) );
- Rectangle aBmpRect(maControlRect);
- aBmpRect.Left() -= nShadowLeft;
- aBmpRect.Top() -= nShadowTop;
- aBmpRect.Right() += nShadowRight;
- aBmpRect.Bottom() += nShadowBottom;
+
+ Rectangle aBmpRect(Point((GetOutputSizePixel().Width()-nSCWidth)/2,
+ (GetOutputSizePixel().Height()-nSCHeight)/2),
+ Size(nSCWidth,nSCHeight));
aClip.Exclude( aBmpRect );
+
Push( PUSH_CLIPREGION );
IntersectClipRegion( aClip );
DrawWallpaper( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ), aBack );
@@ -632,9 +463,14 @@ void BackingWindow::Paint( const Rectangle& )
VirtualDevice aDev( *this );
aDev.EnableRTL( IsRTLEnabled() );
aDev.SetOutputSizePixel( aBmpRect.GetSize() );
- Point aOffset( Point( 0, 0 ) - aBmpRect.TopLeft() );
+ Point aOffset( Point( 0, 0 ) - aBmpRect.TopLeft());
aDev.DrawWallpaper( Rectangle( aOffset, GetOutputSizePixel() ), aBack );
+ maBackgroundMiddle.Scale(
+ Size(nSCWidth - maBackgroundLeft.GetSizePixel().Width() - maBackgroundRight.GetSizePixel().Width(),
+ maBackgroundMiddle.GetSizePixel().Height()),
+ BMP_SCALE_FAST);
+
// draw bitmap
Point aTL( 0, 0 );
aDev.DrawBitmapEx( aTL, maBackgroundLeft );
@@ -649,87 +485,11 @@ void BackingWindow::Paint( const Rectangle& )
DrawOutDev( aBmpRect.TopLeft(), aBmpRect.GetSize(),
Point( 0, 0 ), aBmpRect.GetSize(),
aDev );
+
}
long BackingWindow::Notify( NotifyEvent& rNEvt )
{
- if( rNEvt.GetType() == EVENT_KEYINPUT )
- {
- if( ! mpAccExec )
- {
- mpAccExec = svt::AcceleratorExecute::createAcceleratorHelper();
- mpAccExec->init( comphelper::getProcessComponentContext(), mxFrame);
- }
-
- const KeyEvent* pEvt = rNEvt.GetKeyEvent();
- const KeyCode& rKeyCode(pEvt->GetKeyCode());
- if( pEvt && mpAccExec->execute(rKeyCode) )
- return 1;
- // #i110344# extrawurst: specialized arrow key control
- if( rKeyCode.GetModifier() == 0 )
- {
- if( rKeyCode.GetCode() == KEY_RIGHT )
- {
- if( maWriterButton.HasFocus() )
- maDrawButton.GrabFocus();
- else if( maCalcButton.HasFocus() )
- maDBButton.GrabFocus();
- else if( maImpressButton.HasFocus() )
- maMathButton.GrabFocus();
- else if( maOpenButton.HasFocus() )
- maTemplateButton.GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_LEFT )
- {
- if( maDrawButton.HasFocus() )
- maWriterButton.GrabFocus();
- else if( maDBButton.HasFocus() )
- maCalcButton.GrabFocus();
- else if( maMathButton.HasFocus() )
- maImpressButton.GrabFocus();
- else if( maTemplateButton.HasFocus() )
- maOpenButton.GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_UP )
- {
- // first column
- if( maOpenButton.HasFocus() )
- maImpressButton.GrabFocus();
- else if( maImpressButton.HasFocus() )
- maCalcButton.GrabFocus();
- else if( maCalcButton.HasFocus() )
- maWriterButton.GrabFocus();
- // second column
- else if( maTemplateButton.HasFocus() )
- maMathButton.GrabFocus();
- else if( maMathButton.HasFocus() )
- maDBButton.GrabFocus();
- else if( maDBButton.HasFocus() )
- maDrawButton.GrabFocus();
- return 1;
- }
- else if( rKeyCode.GetCode() == KEY_DOWN )
- {
- // first column
- if( maWriterButton.HasFocus() )
- maCalcButton.GrabFocus();
- else if( maCalcButton.HasFocus() )
- maImpressButton.GrabFocus();
- else if( maImpressButton.HasFocus() )
- maOpenButton.GrabFocus();
- // second column
- else if( maDrawButton.HasFocus() )
- maDBButton.GrabFocus();
- else if( maDBButton.HasFocus() )
- maMathButton.GrabFocus();
- else if( maMathButton.HasFocus() )
- maTemplateButton.GrabFocus();
- return 1;
- }
- }
- }
return Window::Notify( rNEvt );
}
@@ -742,97 +502,33 @@ void BackingWindow::setOwningFrame( const com::sun::star::uno::Reference< com::s
void BackingWindow::Resize()
{
- Size aWindowSize( GetSizePixel() );
- Size aControlSize = maControlRect.GetSize();
- maControlRect = Rectangle( Point( (aWindowSize.Width() - aControlSize.Width()) / 2,
- (aWindowSize.Height() - aControlSize.Height()) / 2 ),
- aControlSize );
-
- maToolbox.calcMinSize();
- Size aTBSize( maToolbox.getMinSize() );
- Point aTBPos( maControlRect.Left() + mnBtnPos,
- maControlRect.Bottom() - aTBSize.Height() - 10 );
- if( Application::GetSettings().GetLayoutRTL() )
- aTBPos.X() = maControlRect.Right() - aTBSize.Width() - mnBtnPos;
- maToolbox.SetPosSizePixel( aTBPos, aTBSize );
-
- // #i93631# squeeze controls so they fit into the box
- // this can be necessary due to application font height which has small deviations
- // from the size set
- const long nBDelta = maButtonImageSize.Height() + 10;
- const long nB2Delta = 3*maButtonImageSize.Height()/2;
- const long nLastDelta = maButtonImageSize.Height();
- long nDiff = 0;
- while( ( maControlRect.Top() -
- 3 * nDiff +
- 3 * (nBDelta - nDiff) +
- (nB2Delta- nDiff) +
- nLastDelta
- ) > aTBPos.Y() )
- {
- nDiff++;
- }
-
- long nYPos = maControlRect.Top() + mnBtnTop;
-
- // Recompute column widths
- mnTextColumnWidth[0] = maWriterButton.GetTextWidth( maWriterButton.GetText() ) + maButtonImageSize.Width() + 8;
- if( mnTextColumnWidth[0] < maCalcButton.GetTextWidth( maCalcButton.GetText() ) + maButtonImageSize.Width() + 8 )
- mnTextColumnWidth[0] = maCalcButton.GetTextWidth( maCalcButton.GetText() ) + maButtonImageSize.Width() + 8;
- if( mnTextColumnWidth[0] < maImpressButton.GetTextWidth( maImpressButton.GetText() ) + maButtonImageSize.Width() + 8 )
- mnTextColumnWidth[0] = maImpressButton.GetTextWidth( maImpressButton.GetText() ) + maButtonImageSize.Width() + 8;
- if( mnTextColumnWidth[0] < maOpenButton.GetTextWidth( maOpenButton.GetText() ) + maButtonImageSize.Width() + 26 )
- mnTextColumnWidth[0] = maOpenButton.GetTextWidth( maOpenButton.GetText() ) + maButtonImageSize.Width() + 26;
-
- mnTextColumnWidth[1] = maDrawButton.GetTextWidth( maDrawButton.GetText() ) + maButtonImageSize.Width() + 8;
- if( mnTextColumnWidth[1] < maDBButton.GetTextWidth( maDBButton.GetText() ) + maButtonImageSize.Width() + 8 )
- mnTextColumnWidth[1] = maDBButton.GetTextWidth( maDBButton.GetText() ) + maButtonImageSize.Width() + 8;
- if( mnTextColumnWidth[1] < maMathButton.GetTextWidth( maMathButton.GetText() ) + maButtonImageSize.Width() + 8 )
- mnTextColumnWidth[1] = maMathButton.GetTextWidth( maMathButton.GetText() ) + maButtonImageSize.Width() + 8;
- if( mnTextColumnWidth[1] < maTemplateButton.GetTextWidth( maTemplateButton.GetText() ) + maButtonImageSize.Width() + 8 )
- mnTextColumnWidth[1] = maTemplateButton.GetTextWidth( maTemplateButton.GetText() ) + maButtonImageSize.Width() + 8;
-
- maWriterButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos, nYPos ), Size( mnTextColumnWidth[0], maButtonImageSize.Height() ) );
- maDrawButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos + mnColumnWidth[0], nYPos ), Size( mnTextColumnWidth[1], maButtonImageSize.Height() ) );
- nYPos += nBDelta - nDiff;
- maCalcButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos, nYPos ), Size( mnTextColumnWidth[0], maButtonImageSize.Height() ) );
- maDBButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos + mnColumnWidth[0], nYPos ), Size( mnTextColumnWidth[1], maButtonImageSize.Height() ) );
- nYPos += nBDelta - nDiff;
- maImpressButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos, nYPos ), Size( mnTextColumnWidth[0], maButtonImageSize.Height() ) );
- maMathButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos + mnColumnWidth[0], nYPos ), Size( mnTextColumnWidth[1], maButtonImageSize.Height() ) );
-
- nYPos += nB2Delta - nDiff;
- maOpenButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos, nYPos ), Size( mnTextColumnWidth[0], maButtonImageSize.Height() ) );
- maTemplateButton.SetPosSizePixel( Point( maControlRect.Left() + mnBtnPos + mnColumnWidth[0], nYPos ), Size( mnTextColumnWidth[1], maButtonImageSize.Height() ) );
+ maStartCentButtons = Rectangle(
+ Point((GetOutputSizePixel().Width()-nSCWidth)/2 + nShadowTop + nPaddingTop,
+ (GetOutputSizePixel().Height()-nSCHeight)/2 + nShadowLeft + nPaddingLeft + nLogoHeight),
+ Size(nSCWidth - nShadowLeft - nShadowRight - nPaddingLeft - nPaddingRight,
+ nSCHeight - nShadowTop - nShadowBottom - nPaddingTop - nPaddingBottom - nLogoHeight));
+ if (isLayoutEnabled(this))
+ VclContainer::setLayoutAllocation(*GetWindow(WINDOW_FIRSTCHILD),
+ maStartCentButtons.TopLeft(), maStartCentButtons.GetSize());
if( !IsInPaint())
Invalidate();
}
-IMPL_LINK_NOARG(BackingWindow, ToolboxHdl)
+IMPL_LINK( BackingWindow, ExtLinkClickHdl, Button*, pButton )
{
- const char* pNodePath = NULL;
const char* pNode = NULL;
- switch( maToolbox.GetCurItemId() )
- {
- case nItemId_Extensions:
- pNodePath = "/org.openoffice.Office.Common/Help/StartCenter";
+ if( pButton == mpExtensionsButton )
pNode = "AddFeatureURL";
- break;
- case nItemId_Info:
- pNodePath = "/org.openoffice.Office.Common/Help/StartCenter";
+ else if( pButton == mpInfoButton )
pNode = "InfoURL";
- break;
- case nItemId_TplRep:
- pNodePath = "/org.openoffice.Office.Common/Help/StartCenter";
+ else if( pButton == mpTplRepButton )
pNode = "TemplateRepositoryURL";
- break;
- default:
- break;
- }
- if( pNodePath && pNode )
+
+ if( pNode )
{
+ const char* pNodePath = "/org.openoffice.Office.Common/Help/StartCenter";
try
{
Reference<lang::XMultiServiceFactory> xConfig = configuration::theDefaultProvider::get( comphelper::getProcessComponentContext() );
@@ -862,26 +558,25 @@ IMPL_LINK_NOARG(BackingWindow, ToolboxHdl)
{
}
}
-
return 0;
}
IMPL_LINK( BackingWindow, ClickHdl, Button*, pButton )
{
// dispatch the appropriate URL and end the dialog
- if( pButton == &maWriterButton )
+ if( pButton == mpWriterButton )
dispatchURL( WRITER_URL );
- else if( pButton == &maCalcButton )
+ else if( pButton == mpCalcButton )
dispatchURL( CALC_URL );
- else if( pButton == &maImpressButton )
+ else if( pButton == mpImpressButton )
dispatchURL( IMPRESS_WIZARD_URL );
- else if( pButton == &maDrawButton )
+ else if( pButton == mpDrawButton )
dispatchURL( DRAW_URL );
- else if( pButton == &maDBButton )
+ else if( pButton == mpDBButton )
dispatchURL( BASE_URL );
- else if( pButton == &maMathButton )
+ else if( pButton == mpMathButton )
dispatchURL( MATH_URL );
- else if( pButton == &maOpenButton )
+ else if( pButton == mpOpenButton )
{
Reference< XDispatchProvider > xFrame( mxFrame, UNO_QUERY );
@@ -892,7 +587,7 @@ IMPL_LINK( BackingWindow, ClickHdl, Button*, pButton )
dispatchURL( OPEN_URL, OUString(), xFrame, aArgs );
}
- else if( pButton == &maTemplateButton )
+ else if( pButton == mpTemplateButton )
{
Reference< XDispatchProvider > xFrame( mxFrame, UNO_QUERY );
@@ -906,12 +601,14 @@ IMPL_LINK( BackingWindow, ClickHdl, Button*, pButton )
return 0;
}
+/*
IMPL_LINK( BackingWindow, ActivateHdl, Button*, pButton )
{
- if( pButton == &maOpenButton )
+ if( pButton == mpOpenButton )
prepareRecentFileMenu();
return 0;
}
+*/
struct ImplDelayedDispatch
{
@@ -991,4 +688,12 @@ void BackingWindow::dispatchURL( const OUString& i_rURL,
}
}
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+Size BackingWindow::GetOptimalSize() const
+{
+ if (isLayoutEnabled(this))
+ return VclContainer::getLayoutRequisition(*GetWindow(WINDOW_FIRSTCHILD));
+
+ return Window::GetOptimalSize();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab:*/
diff --git a/framework/source/services/backingwindow.hxx b/framework/source/services/backingwindow.hxx
index ab453140223c..d52a8cbc383e 100644
--- a/framework/source/services/backingwindow.hxx
+++ b/framework/source/services/backingwindow.hxx
@@ -22,11 +22,13 @@
#include "rtl/ustring.hxx"
+#include "vcl/builder.hxx"
#include "vcl/button.hxx"
#include "vcl/menubtn.hxx"
#include "vcl/fixed.hxx"
#include "vcl/bitmapex.hxx"
#include "vcl/toolbox.hxx"
+#include "vcl/layout.hxx"
#include "unotools/moduleoptions.hxx"
#include "svtools/acceleratorexecute.hxx"
@@ -54,24 +56,7 @@ class MnemonicGenerator;
namespace framework
{
- // To get the transparent mouse-over look, the closer is actually a toolbox
- // overload DataChange to handle style changes correctly
- class DecoToolBox : public ToolBox
- {
- Size maMinSize;
-
- using Window::ImplInit;
- public:
- DecoToolBox( Window* pParent, WinBits nStyle = 0 );
- DecoToolBox( Window* pParent, const ResId& rResId );
-
- void DataChanged( const DataChangedEvent& rDCEvt );
-
- void calcMinSize();
- Size getMinSize();
- };
-
- class BackingWindow : public Window
+ class BackingWindow : public Window, public VclBuilderContainer
{
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > mxContext;
com::sun::star::uno::Reference<com::sun::star::frame::XDispatchProvider > mxDesktopDispatchProvider;
@@ -80,16 +65,22 @@ namespace framework
com::sun::star::uno::Reference< com::sun::star::frame::XPopupMenuController > mxPopupMenuController;
com::sun::star::uno::Reference< com::sun::star::awt::XPopupMenu > mxPopupMenu;
- ImageButton maWriterButton;
- ImageButton maCalcButton;
- ImageButton maImpressButton;
- MenuButton maOpenButton;
- ImageButton maDrawButton;
- ImageButton maDBButton;
- ImageButton maMathButton;
- ImageButton maTemplateButton;
+ PushButton* mpWriterButton;
+ PushButton* mpCalcButton;
+ PushButton* mpImpressButton;
+ //MenuButton* mpOpenButton;
+ PushButton* mpOpenButton;
+ PushButton* mpDrawButton;
+ PushButton* mpDBButton;
+ PushButton* mpMathButton;
+ PushButton* mpTemplateButton;
+
- DecoToolBox maToolbox;
+ PushButton* mpExtensionsButton;
+ PushButton* mpInfoButton;
+ PushButton* mpTplRepButton;
+
+ VclGrid* mpStartCenterContainer;
BitmapEx maBackgroundLeft;
BitmapEx maBackgroundMiddle;
@@ -102,35 +93,44 @@ namespace framework
Font maTextFont;
Rectangle maControlRect;
- long mnColumnWidth[2];
- long mnTextColumnWidth[2];
+ Rectangle maStartCentButtons;
+
Color maLabelTextColor;
- Size maButtonImageSize;
bool mbInitControls;
sal_Int32 mnHideExternalLinks;
svt::AcceleratorExecute* mpAccExec;
- long mnBtnPos;
- long mnBtnTop;
static const int nItemId_Extensions = 1;
static const int nItemId_Info = 3;
static const int nItemId_TplRep = 4;
+
static const int nShadowTop = 30;
static const int nShadowLeft = 30;
static const int nShadowRight = 30;
static const int nShadowBottom = 30;
+ static const int nPaddingTop = 30;
+ static const int nPaddingLeft = 50;
+ static const int nPaddingRight = 50;
+ static const int nPaddingBottom = 30;
+
+ static const int nLogoHeight = 150;
+ int nSCWidth;
+ int nSCHeight;
+
void loadImage( const ResId& i_rId, PushButton& i_rButton );
- void layoutButton( const char* i_pURL, int nColumn, int i_nExtraWidth, const std::set<OUString>& i_rURLS,
+ void layoutButton( const char* i_pURL, const std::set<OUString>& i_rURLS,
SvtModuleOptions& i_rOpt, SvtModuleOptions::EModule i_eMod,
PushButton& i_rBtn,
MnemonicGenerator& i_rMnemonicGen,
const String& i_rStr = String()
);
+ void layoutExternalLink( PushButton& i_rBtn );
+
void dispatchURL( const OUString& i_rURL,
const OUString& i_rTarget = OUString( "_default" ),
const com::sun::star::uno::Reference< com::sun::star::frame::XDispatchProvider >& i_xProv = com::sun::star::uno::Reference< com::sun::star::frame::XDispatchProvider >(),
@@ -138,13 +138,13 @@ namespace framework
);
DECL_LINK( ClickHdl, Button* );
- DECL_LINK( ActivateHdl, Button* );
- DECL_LINK( ToolboxHdl, void* );
+ DECL_LINK( ExtLinkClickHdl, Button* );
+ //DECL_LINK( ActivateHdl, Button* );
DECL_LINK( WindowEventListener, VclSimpleEvent* );
void initControls();
void initBackground();
- void prepareRecentFileMenu();
+ //void prepareRecentFileMenu();
public:
BackingWindow( Window* pParent );
~BackingWindow();
@@ -154,6 +154,8 @@ namespace framework
virtual long Notify( NotifyEvent& rNEvt );
virtual void GetFocus();
+ virtual Size GetOptimalSize() const;
+
void setOwningFrame( const com::sun::star::uno::Reference< com::sun::star::frame::XFrame >& xFrame );
};
diff --git a/framework/uiconfig/startmodule/ui/startcenter.ui b/framework/uiconfig/startmodule/ui/startcenter.ui
new file mode 100644
index 000000000000..067c4d50f921
--- /dev/null
+++ b/framework/uiconfig/startmodule/ui/startcenter.ui
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkImage" id="add_temp_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">framework/res/addtemplate_32.png</property>
+ </object>
+ <object class="GtkImage" id="calc_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">res/ods_32_8.png</property>
+ </object>
+ <object class="GtkImage" id="database_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">res/odb_32_8.png</property>
+ </object>
+ <object class="GtkImage" id="draw_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">res/odg_32_8.png</property>
+ </object>
+ <object class="GtkImage" id="extension_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">framework/res/extension.png</property>
+ </object>
+ <object class="GtkImage" id="impress_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">res/odp_32_8.png</property>
+ </object>
+ <object class="GtkImage" id="info_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">framework/res/info_26.png</property>
+ </object>
+ <object class="GtkImage" id="math_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">res/odf_32_8.png</property>
+ </object>
+ <object class="GtkImage" id="open_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">framework/res/folder_32.png</property>
+ </object>
+ <object class="GtkBox" id="StartCenter">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkGrid" id="sccontainer">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_homogeneous">True</property>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column_homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="writer">
+ <property name="label" translatable="yes">Text Document</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">writer_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="draw">
+ <property name="label" translatable="yes">Drawing</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">draw_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="calc">
+ <property name="label" translatable="yes">Spreadsheet</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">calc_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="database">
+ <property name="label" translatable="yes">Database</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">database_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="impress">
+ <property name="label" translatable="yes">Presentation</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">impress_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="math">
+ <property name="label" translatable="yes">Formula</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">math_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="open">
+ <property name="label" translatable="yes">Open...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">open_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="templates">
+ <property name="label" translatable="yes">Templates...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">templates_image</property>
+ <property name="relief">none</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkButton" id="extension">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">extension_image</property>
+ <property name="relief">none</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="info">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">info_image</property>
+ <property name="relief">none</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="add_temp">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">add_temp_image</property>
+ <property name="relief">none</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <object class="GtkImage" id="templates_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">framework/res/templates_32.png</property>
+ </object>
+ <object class="GtkImage" id="writer_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixbuf">res/odt_32_8.png</property>
+ </object>
+</interface>