mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-09-20 23:07:43 +00:00
Some cosmetic changes so that GuiWorkArea can be embeddable in a Qt designer dialog.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@27499 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
97707102da
commit
0685dfef74
@ -233,14 +233,28 @@ SyntheticMouseEvent::SyntheticMouseEvent()
|
||||
{}
|
||||
|
||||
|
||||
|
||||
GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & lv)
|
||||
: buffer_view_(new BufferView(buffer)), lyx_view_(&lv),
|
||||
GuiWorkArea::GuiWorkArea(QWidget *)
|
||||
: buffer_view_(0), lyx_view_(0),
|
||||
cursor_visible_(false),
|
||||
need_resize_(false), schedule_redraw_(false),
|
||||
preedit_lines_(1), completer_(new GuiCompleter(this))
|
||||
{
|
||||
buffer.workAreaManager().add(this);
|
||||
}
|
||||
|
||||
|
||||
GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & gv)
|
||||
: buffer_view_(0), lyx_view_(0),
|
||||
cursor_visible_(false),
|
||||
need_resize_(false), schedule_redraw_(false),
|
||||
preedit_lines_(1), completer_(new GuiCompleter(this))
|
||||
{
|
||||
setGuiView(gv);
|
||||
setBuffer(buffer);
|
||||
}
|
||||
|
||||
|
||||
void GuiWorkArea::init()
|
||||
{
|
||||
// Setup the signals
|
||||
connect(&cursor_timeout_, SIGNAL(timeout()),
|
||||
this, SLOT(toggleCursor()));
|
||||
@ -258,17 +272,6 @@ GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & lv)
|
||||
cursor_ = new frontend::CursorWidget();
|
||||
cursor_->hide();
|
||||
|
||||
// HACK: Prevents an additional redraw when the scrollbar pops up
|
||||
// which regularily happens on documents with more than one page.
|
||||
// The policy should be set to "Qt::ScrollBarAsNeeded" soon.
|
||||
// Since we have no geometry information yet, we assume that
|
||||
// a document needs a scrollbar if there is more then four
|
||||
// paragraph in the outermost text.
|
||||
if (buffer.text().paragraphs().size() > 4)
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
|
||||
QTimer::singleShot(50, this, SLOT(fixVerticalScrollBar()));
|
||||
|
||||
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setAcceptDrops(true);
|
||||
setMouseTracking(true);
|
||||
@ -285,7 +288,7 @@ GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & lv)
|
||||
// the viewport because we have our own backing pixmap.
|
||||
viewport()->setAttribute(Qt::WA_NoSystemBackground);
|
||||
|
||||
setFocusPolicy(Qt::WheelFocus);
|
||||
setFocusPolicy(Qt::StrongFocus);
|
||||
|
||||
viewport()->setCursor(Qt::IBeamCursor);
|
||||
|
||||
@ -303,6 +306,8 @@ GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & lv)
|
||||
// Enables input methods for asian languages.
|
||||
// Must be set when creating custom text editing widgets.
|
||||
setAttribute(Qt::WA_InputMethodEnabled, true);
|
||||
|
||||
dialogMode_ = false;
|
||||
}
|
||||
|
||||
|
||||
@ -316,6 +321,31 @@ GuiWorkArea::~GuiWorkArea()
|
||||
}
|
||||
|
||||
|
||||
void GuiWorkArea::setGuiView(GuiView & gv)
|
||||
{
|
||||
lyx_view_ = &gv;
|
||||
}
|
||||
|
||||
|
||||
void GuiWorkArea::setBuffer(Buffer & buffer)
|
||||
{
|
||||
delete buffer_view_;
|
||||
buffer_view_ = new BufferView(buffer),
|
||||
buffer.workAreaManager().add(this);
|
||||
|
||||
// HACK: Prevents an additional redraw when the scrollbar pops up
|
||||
// which regularily happens on documents with more than one page.
|
||||
// The policy should be set to "Qt::ScrollBarAsNeeded" soon.
|
||||
// Since we have no geometry information yet, we assume that
|
||||
// a document needs a scrollbar if there is more then four
|
||||
// paragraph in the outermost text.
|
||||
if (buffer.text().paragraphs().size() > 4)
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
|
||||
QTimer::singleShot(50, this, SLOT(fixVerticalScrollBar()));
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
void GuiWorkArea::fixVerticalScrollBar()
|
||||
{
|
||||
if (!isFullScreen())
|
||||
@ -660,8 +690,14 @@ void GuiWorkArea::contextMenuEvent(QContextMenuEvent * e)
|
||||
|
||||
void GuiWorkArea::focusInEvent(QFocusEvent * e)
|
||||
{
|
||||
if (lyx_view_->currentWorkArea() != this)
|
||||
lyx_view_->setCurrentWorkArea(this);
|
||||
LYXERR(Debug::DEBUG, "GuiWorkArea::focusInEvent(): " << this << std::endl);
|
||||
GuiWorkArea * old_gwa = theGuiApp()->currentView()->currentWorkArea();
|
||||
if (old_gwa)
|
||||
old_gwa->stopBlinkingCursor();
|
||||
lyx_view_->setCurrentWorkArea(this);
|
||||
|
||||
//if (lyx_view_->currentWorkArea() != this) {
|
||||
// lyx_view_->setCurrentWorkArea(this);
|
||||
|
||||
startBlinkingCursor();
|
||||
QAbstractScrollArea::focusInEvent(e);
|
||||
@ -670,6 +706,7 @@ void GuiWorkArea::focusInEvent(QFocusEvent * e)
|
||||
|
||||
void GuiWorkArea::focusOutEvent(QFocusEvent * e)
|
||||
{
|
||||
LYXERR(Debug::DEBUG, "GuiWorkArea::focusOutEvent(): " << this << std::endl);
|
||||
stopBlinkingCursor();
|
||||
QAbstractScrollArea::focusOutEvent(e);
|
||||
}
|
||||
@ -835,6 +872,18 @@ void GuiWorkArea::generateSyntheticMouseEvent()
|
||||
|
||||
void GuiWorkArea::keyPressEvent(QKeyEvent * ev)
|
||||
{
|
||||
// Do not process here some keys if dialogMode_ is set
|
||||
if (dialogMode_
|
||||
&& (ev->modifiers() == Qt::NoModifier
|
||||
|| ev->modifiers() == Qt::ShiftModifier)
|
||||
&& (ev->key() == Qt::Key_Escape
|
||||
|| ev->key() == Qt::Key_Enter
|
||||
|| ev->key() == Qt::Key_Return)
|
||||
) {
|
||||
ev->ignore();
|
||||
return;
|
||||
}
|
||||
|
||||
// intercept some keys if completion popup is visible
|
||||
if (completer_->popupVisible()) {
|
||||
switch (ev->key()) {
|
||||
|
@ -101,10 +101,19 @@ class GuiWorkArea : public QAbstractScrollArea, public WorkArea
|
||||
|
||||
public:
|
||||
///
|
||||
GuiWorkArea(Buffer & buffer, GuiView & lv);
|
||||
GuiWorkArea(QWidget *);
|
||||
///
|
||||
GuiWorkArea(Buffer & buffer, GuiView & gv);
|
||||
///
|
||||
~GuiWorkArea();
|
||||
|
||||
///
|
||||
void setBuffer(Buffer &);
|
||||
///
|
||||
void setGuiView(GuiView &);
|
||||
/// Dummy methods for Designer.
|
||||
void setWidgetResizable(bool) {}
|
||||
void setWidget(QWidget *) {}
|
||||
///
|
||||
void setFullScreen(bool full_screen);
|
||||
/// is LyXView in fullscreen mode?
|
||||
@ -127,9 +136,20 @@ public:
|
||||
///
|
||||
void resizeBufferView();
|
||||
|
||||
bool isInDialog() {
|
||||
return dialogMode_;
|
||||
}
|
||||
|
||||
///
|
||||
GuiCompleter & completer() { return *completer_; }
|
||||
|
||||
|
||||
/// Return true if dialogMode is set
|
||||
bool& dialogMode() { return dialogMode_; }
|
||||
|
||||
/// Return the GuiView this workArea belongs to
|
||||
GuiView const & view() const { return *lyx_view_; }
|
||||
GuiView & view() { return *lyx_view_; }
|
||||
|
||||
Q_SIGNALS:
|
||||
///
|
||||
void titleChanged(GuiWorkArea *);
|
||||
@ -153,6 +173,8 @@ private Q_SLOTS:
|
||||
|
||||
private:
|
||||
friend class GuiCompleter;
|
||||
///
|
||||
void init();
|
||||
|
||||
/// update the passed area.
|
||||
void update(int x, int y, int w, int h);
|
||||
@ -238,6 +260,10 @@ private:
|
||||
|
||||
///
|
||||
GuiCompleter * completer_;
|
||||
|
||||
/// Special mode in which Esc and Enter (with or without Shift)
|
||||
/// are ignored
|
||||
bool dialogMode_;
|
||||
}; // GuiWorkArea
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user