You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesdk/cervisia/cervisiashell.cpp

223 lines
6.3 KiB

/*
* Copyright (C) 1999-2002 Bernd Gehrmann
* bernd@mail.berlios.de
* Copyright (c) 2002-2004 Christian Loose <christian.loose@kdemail.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "cervisiashell.h"
#include <tdeapplication.h>
#include <tdeconfig.h>
#include <kedittoolbar.h>
#include <khelpmenu.h>
#include <kkeydialog.h>
#include <klibloader.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include <kstatusbar.h>
#include <kstdaction.h>
#include <kurl.h>
CervisiaShell::CervisiaShell( const char *name )
: KParts::MainWindow( name )
, m_part(0)
{
setXMLFile( "cervisiashellui.rc" );
KLibFactory* factory = KLibLoader::self()->factory("libcervisiapart");
if( factory )
{
m_part = static_cast<KParts::ReadOnlyPart*>(factory->create(this,
"cervisiaview", "KParts::ReadOnlyPart"));
if( m_part )
setCentralWidget(m_part->widget());
}
else
{
KMessageBox::detailedError(this, i18n("The Cervisia library could not be loaded."),
KLibLoader::self()->lastErrorMessage());
kapp->quit();
return;
}
setupActions();
//
// Magic needed for status texts
//
actionCollection()->setHighlightingEnabled(true);
connect( actionCollection(), TQ_SIGNAL( actionStatusText(const TQString &) ),
statusBar(), TQ_SLOT( message(const TQString &) ) );
connect( actionCollection(), TQ_SIGNAL( clearStatusText() ),
statusBar(), TQ_SLOT( clear() ) );
m_part->actionCollection()->setHighlightingEnabled(true);
connect( m_part->actionCollection(), TQ_SIGNAL( actionStatusText(const TQString &) ),
statusBar(), TQ_SLOT( message(const TQString &) ) );
connect( m_part->actionCollection(), TQ_SIGNAL( clearStatusText() ),
statusBar(), TQ_SLOT( clear() ) );
createGUI( m_part );
// enable auto-save of toolbar/menubar/statusbar and window size settings
// and apply the previously saved settings
setAutoSaveSettings("MainWindow", true);
// if the session is restoring, we already read the settings
if( !kapp->isRestored() )
readSettings();
}
CervisiaShell::~CervisiaShell()
{
delete m_part;
}
void CervisiaShell::setupActions()
{
setStandardToolBarMenuEnabled( true );
TDEAction *action = KStdAction::configureToolbars( this, TQ_SLOT(slotConfigureToolBars()),
actionCollection() );
TQString hint = i18n("Allows you to configure the toolbar");
action->setToolTip( hint );
action->setWhatsThis( hint );
action = KStdAction::keyBindings( this, TQ_SLOT(slotConfigureKeys()),
actionCollection() );
hint = i18n("Allows you to customize the keybindings");
action->setToolTip( hint );
action->setWhatsThis( hint );
action = KStdAction::quit( kapp, TQ_SLOT( quit() ), actionCollection() );
hint = i18n("Exits Cervisia");
action->setToolTip( hint );
action->setWhatsThis( hint );
setHelpMenuEnabled(false);
(void) new KHelpMenu(this, instance()->aboutData(), false, actionCollection());
action = actionCollection()->action("help_contents");
hint = i18n("Invokes the TDE help system with the Cervisia documentation");
action->setToolTip( hint );
action->setWhatsThis( hint );
action = actionCollection()->action("help_report_bug");
hint = i18n("Opens the bug report dialog");
action->setToolTip( hint );
action->setWhatsThis( hint );
action = actionCollection()->action("help_about_app");
hint = i18n("Displays the version number and copyright information");
action->setToolTip( hint );
action->setWhatsThis( hint );
action = actionCollection()->action("help_about_kde");
hint = i18n("Displays the information about TDE and its version number");
action->setToolTip( hint );
action->setWhatsThis( hint );
}
void CervisiaShell::openURL()
{
if( !m_lastOpenDir.isEmpty() )
m_part->openURL(KURL::fromPathOrURL(m_lastOpenDir));
}
void CervisiaShell::openURL(const KURL& url)
{
m_part->openURL(url);
}
void CervisiaShell::slotConfigureKeys()
{
KKeyDialog dlg;
dlg.insert(actionCollection());
if( m_part )
dlg.insert(m_part->actionCollection());
dlg.configure();
}
void CervisiaShell::slotConfigureToolBars()
{
saveMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
KEditToolbar dlg( factory() );
connect(&dlg,TQ_SIGNAL(newToolbarConfig()),this,TQ_SLOT(slotNewToolbarConfig()));
dlg.exec();
}
void CervisiaShell::slotNewToolbarConfig()
{
applyMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
}
bool CervisiaShell::queryExit()
{
writeSettings();
return true;
}
void CervisiaShell::readProperties(TDEConfig* config)
{
m_lastOpenDir = config->readPathEntry("Current Directory");
// if the session is restoring, make sure we open the URL
// since it's not handled by main()
if( kapp->isRestored() )
openURL();
}
void CervisiaShell::saveProperties(TDEConfig* config)
{
// Save current working directory (if part was created)
if( m_part )
{
config->writePathEntry("Current Directory", m_part->url().path());
// write to disk
config->sync();
}
}
void CervisiaShell::readSettings()
{
TDEConfig* config = TDEGlobal::config();
config->setGroup("Session");
readProperties(config);
}
void CervisiaShell::writeSettings()
{
TDEConfig* config = TDEGlobal::config();
config->setGroup("Session");
saveProperties(config);
}
#include "cervisiashell.moc"