mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
LyXToolBox: a QToolBox with minimum size management
The purpose of this custom widget is to allow the use of a QToolBox in a limited area. The stock QToolBox does not provide a minimum size hint that depends on the size of the pages; it assumes that there is enough room. This subclass sets the minimal size of the QToolbox. Without this, the size of the QToolbox is only determined by values in the ui file and therefore causes portability and localisation issues. Note that the computation of the minimum size hint depends on the minimum size hints of the page widgets. Therefore page widgets must have a layout with layoutSizeContraint = SetMinimumSize or similar.
This commit is contained in:
parent
70fe2c618e
commit
576cb5df77
@ -17,6 +17,7 @@
|
|||||||
#include "GuiCitation.h"
|
#include "GuiCitation.h"
|
||||||
|
|
||||||
#include "GuiSelectionManager.h"
|
#include "GuiSelectionManager.h"
|
||||||
|
#include "LyXToolBox.h"
|
||||||
#include "qt_helpers.h"
|
#include "qt_helpers.h"
|
||||||
|
|
||||||
#include "Buffer.h"
|
#include "Buffer.h"
|
||||||
|
55
src/frontends/qt4/LyXToolBox.cpp
Normal file
55
src/frontends/qt4/LyXToolBox.cpp
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
* \file LyXToolBox.cpp
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Guillaume Munch
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "LyXToolBox.h"
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QLayout>
|
||||||
|
|
||||||
|
#include "support/debug.h"
|
||||||
|
|
||||||
|
namespace lyx {
|
||||||
|
namespace frontend {
|
||||||
|
|
||||||
|
|
||||||
|
QSize LyXToolBox::minimumSizeHint() const
|
||||||
|
{
|
||||||
|
QSize s(0,0);
|
||||||
|
// Compute the max of the minimal sizes of the pages
|
||||||
|
QWidget * page;
|
||||||
|
for (int i = 0; (page = widget(i)); ++i)
|
||||||
|
s = s.expandedTo(page->minimumSizeHint());
|
||||||
|
// Add the height of the tabs
|
||||||
|
if (currentWidget())
|
||||||
|
s.rheight() += height() - currentWidget()->height();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LyXToolBox::showEvent(QShowEvent * e)
|
||||||
|
{
|
||||||
|
// Computation of the tab height might be incorrect yet (the proper sizes of
|
||||||
|
// the pages have only been computed now).
|
||||||
|
// It might still be incorrect after this. All this would be unnecessary if
|
||||||
|
// QToolBox made our life easier and exposed more information; for instance
|
||||||
|
// let us access the scroll areas enclosing the pages (from which one can
|
||||||
|
// deduce the real tab height).
|
||||||
|
layout()->invalidate();
|
||||||
|
// proceed with geometry update to avoid flicker
|
||||||
|
qApp->processEvents(QEventLoop::ExcludeUserInputEvents, 50);
|
||||||
|
QToolBox::showEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace frontend
|
||||||
|
} // namespace lyx
|
||||||
|
|
||||||
|
#include "moc_LyXToolBox.cpp"
|
||||||
|
|
46
src/frontends/qt4/LyXToolBox.h
Normal file
46
src/frontends/qt4/LyXToolBox.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// -*- C++ -*-
|
||||||
|
/**
|
||||||
|
* \file LyXToolBox.h
|
||||||
|
* This file is part of LyX, the document processor.
|
||||||
|
* Licence details can be found in the file COPYING.
|
||||||
|
*
|
||||||
|
* \author Guillaume Munch
|
||||||
|
*
|
||||||
|
* Full author contact details are available in file CREDITS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LYXTOOLBOX_H
|
||||||
|
#define LYXTOOLBOX_H
|
||||||
|
|
||||||
|
#include <QtGui/QToolBox>
|
||||||
|
|
||||||
|
namespace lyx {
|
||||||
|
namespace frontend {
|
||||||
|
|
||||||
|
// The purpose of this custom widget is to allow the use of a QToolBox in a
|
||||||
|
// limited area. The stock QToolBox does not provide a minimum size hint that
|
||||||
|
// depends on the size of the pages; it assumes that there is enough room. This
|
||||||
|
// subclass sets the minimal size of the QToolbox. Without this, the size of the
|
||||||
|
// QToolbox is only determined by values in the ui file and therefore causes
|
||||||
|
// portability and localisation issues. Note that the computation of the minimum
|
||||||
|
// size hint depends on the minimum size hints of the page widgets. Therefore
|
||||||
|
// page widgets must have a layout with layoutSizeContraint = SetMinimumSize or
|
||||||
|
// similar.
|
||||||
|
class LyXToolBox : public QToolBox
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
LyXToolBox(QWidget * p = 0, Qt::WindowFlags f = 0) : QToolBox(p, f) {}
|
||||||
|
QSize minimumSizeHint() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void showEvent(QShowEvent * e);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace frontend
|
||||||
|
} // namespace lyx
|
||||||
|
|
||||||
|
|
||||||
|
#endif // LYXTOOLBOX_H
|
@ -143,6 +143,7 @@ SOURCEFILES = \
|
|||||||
InsetParamsWidget.cpp \
|
InsetParamsWidget.cpp \
|
||||||
LengthCombo.cpp \
|
LengthCombo.cpp \
|
||||||
LyXFileDialog.cpp \
|
LyXFileDialog.cpp \
|
||||||
|
LyXToolBox.cpp \
|
||||||
LaTeXHighlighter.cpp \
|
LaTeXHighlighter.cpp \
|
||||||
LayoutBox.cpp \
|
LayoutBox.cpp \
|
||||||
Menus.cpp \
|
Menus.cpp \
|
||||||
@ -252,6 +253,7 @@ MOCHEADER = \
|
|||||||
LayoutBox.h \
|
LayoutBox.h \
|
||||||
LengthCombo.h \
|
LengthCombo.h \
|
||||||
LyXFileDialog.h \
|
LyXFileDialog.h \
|
||||||
|
LyXToolBox.h \
|
||||||
Menus.h \
|
Menus.h \
|
||||||
PanelStack.h \
|
PanelStack.h \
|
||||||
TocModel.h \
|
TocModel.h \
|
||||||
|
@ -194,7 +194,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QToolBox" name="citationTB">
|
<widget class="lyx::frontend::LyXToolBox" name="citationTB">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
@ -208,14 +208,6 @@
|
|||||||
<number>1</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page">
|
<widget class="QWidget" name="page">
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>572</width>
|
|
||||||
<height>111</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<attribute name="label">
|
<attribute name="label">
|
||||||
<string>&Search Citation</string>
|
<string>&Search Citation</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
@ -377,14 +369,6 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="page_2">
|
<widget class="QWidget" name="page_2">
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>572</width>
|
|
||||||
<height>105</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<attribute name="label">
|
<attribute name="label">
|
||||||
<string>For&matting</string>
|
<string>For&matting</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
@ -558,6 +542,14 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>lyx::frontend::LyXToolBox</class>
|
||||||
|
<extends>QToolBox</extends>
|
||||||
|
<header>LyXToolBox.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>availableLV</tabstop>
|
<tabstop>availableLV</tabstop>
|
||||||
<tabstop>addPB</tabstop>
|
<tabstop>addPB</tabstop>
|
||||||
|
Loading…
Reference in New Issue
Block a user