Add common session handling infrastructure for dialogs.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22061 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2007-12-10 13:05:00 +00:00
parent 15601573d2
commit 41681e7185
7 changed files with 65 additions and 32 deletions

View File

@ -13,6 +13,7 @@
#include "Dialog.h"
#include "GuiView.h"
#include "qt_helpers.h"
#include "Buffer.h"
#include "FuncRequest.h"
@ -21,6 +22,9 @@
#include "support/debug.h"
#include <QSettings>
#include <QString>
#include <string>
using namespace std;
@ -241,5 +245,27 @@ void Dialog::checkStatus()
enableView(false);
}
QString Dialog::sessionKey() const
{
return "view-" + QString::number(lyxview_->id())
+ "/" + toqstr(name());
}
void Dialog::saveSession() const
{
QSettings settings;
settings.setValue(sessionKey() + "/geometry", asQWidget()->saveGeometry());
}
void Dialog::restoreSession()
{
QSettings settings;
asQWidget()->restoreGeometry(
settings.value(sessionKey() + "/geometry").toByteArray());
}
} // namespace frontend
} // namespace lyx

View File

@ -16,6 +16,7 @@
#include <string>
class QString;
class QWidget;
namespace lyx {
@ -56,6 +57,26 @@ public:
virtual QWidget * asQWidget() = 0;
virtual QWidget const * asQWidget() const = 0;
/// Session key.
/**
* This key must be used for any session setting.
**/
QString sessionKey() const;
/// Save session settings.
/**
* This default implementation saves the geometry state.
* Reimplement to save more settings.
**/
virtual void saveSession() const;
/// Restore session settings.
/**
* This default implementation restores the geometry state.
* Reimplement to restore more settings.
**/
virtual void restoreSession();
/** \name Container Access
* These methods are publicly accessible because they are invoked
* by the parent container acting on commands from the LyX kernel.

View File

@ -16,7 +16,6 @@
#include "qt_helpers.h"
#include <QCloseEvent>
#include <QSettings>
#include <QShowEvent>
@ -33,24 +32,6 @@ void DialogView::setViewTitle(docstring const & title)
setWindowTitle("LyX: " + toqstr(title));
}
void DialogView::showEvent(QShowEvent * e)
{
QSettings settings;
QString key = toqstr(name()) + "/geometry";
restoreGeometry(settings.value(key).toByteArray());
QDialog::showEvent(e);
}
void DialogView::closeEvent(QCloseEvent * e)
{
QSettings settings;
QString key = toqstr(name()) + "/geometry";
settings.setValue(key, saveGeometry());
QDialog::closeEvent(e);
}
} // namespace frontend
} // namespace lyx

View File

@ -39,14 +39,9 @@ public:
virtual QWidget * asQWidget() { return this; }
virtual QWidget const * asQWidget() const { return this; }
public:
protected:
///
void setViewTitle(docstring const & title);
///
void closeEvent(QCloseEvent *);
///
void showEvent(QShowEvent *);
};
} // namespace frontend

View File

@ -14,8 +14,6 @@
#include "Dialog.h"
#include "GuiView.h"
#include "qt_helpers.h"
#include "support/debug.h"
#include <QDockWidget>
@ -23,8 +21,11 @@ namespace lyx {
namespace frontend {
/// Dock Widget container for LyX dialogs.
/// This template class that encapsulates a given Widget inside a
/// QDockWidget and presents a Dialog interface
/**
* This template class that encapsulates a given Widget inside a
* QDockWidget and presents a Dialog interface
* FIXME: create a DockView.cpp file
**/
class DockView : public QDockWidget, public Dialog
{
public:

View File

@ -13,6 +13,8 @@
#include "GuiProgress.h"
#include "qt_helpers.h"
#include "support/Systemcall.h"
#include <QApplication>
@ -27,7 +29,7 @@ GuiProgress::GuiProgress(GuiView & parent, Qt::DockWidgetArea area,
{
setWindowTitle(qt_("LaTeX Progress"));
setWidget(&text_edit);
lyx::support::Systemcall::registerProgressInterface(this);
support::Systemcall::registerProgressInterface(this);
}

View File

@ -421,6 +421,10 @@ void GuiView::closeEvent(QCloseEvent * close_event)
#endif
settings.setValue(key + "/icon_size", iconSize());
d.toolbars_->saveToolbarInfo();
// Now take care of all other dialogs:
std::map<string, DialogPtr>::const_iterator it = d.dialogs_.begin();
for (; it!= d.dialogs_.end(); ++it)
it->second->saveSession();
}
guiApp->unregisterView(id_);
@ -1619,8 +1623,11 @@ Dialog * GuiView::find_or_build(string const & name)
if (it != d.dialogs_.end())
return it->second.get();
d.dialogs_[name].reset(build(name));
return d.dialogs_[name].get();
Dialog * dialog = build(name);
d.dialogs_[name].reset(dialog);
if (lyxrc.allow_geometry_session)
dialog->restoreSession();
return dialog;
}