#endif
#include "BufferView_pimpl.h"
-#include "WorkArea.h"
-#include "lyxscreen.h"
+#include "frontends/WorkArea.h"
+#include "frontends/screen.h"
#include "lyxtext.h"
#include "lyxrow.h"
#include "paragraph.h"
-#include "LyXView.h"
+#include "frontends/LyXView.h"
#include "commandtags.h"
#include "lyxfunc.h"
#include "debug.h"
lyxerr[Debug::INFO] << "Setting buffer in BufferView ("
<< b << ")" << endl;
if (buffer_) {
+#if 0
insetSleep();
+#endif
buffer_->delUser(bv_);
// Put the old text into the TextCache, but
// require bv_->text.
owner_->getDialogs()->updateBufferDependent(true);
redraw();
+#if 0
insetWakeup();
+#endif
} else {
lyxerr[Debug::INFO] << " No Buffer!" << endl;
owner_->updateMenubar();
int BufferView::Pimpl::scrollUp(long time)
{
- if (!buffer_) return 0;
- if (!screen_.get()) return 0;
+ if (!buffer_ || !screen_.get())
+ return 0;
double value = workarea_.getScrollbarValue();
- if (value == 0) return 0;
+ if (value == 0)
+ return 0;
+#if 1
float add_value = (bv_->text->defaultHeight()
+ float(time) * float(time) * 0.125);
if (add_value > workarea_.height())
add_value = float(workarea_.height() -
bv_->text->defaultHeight());
+#else
+ float add_value = float(workarea_.height()) * float(time) / 100;
+#endif
value -= add_value;
int BufferView::Pimpl::scrollDown(long time)
{
- if (!buffer_) return 0;
- if (!screen_.get()) return 0;
+ if (!buffer_ || !screen_.get())
+ return 0;
double value = workarea_.getScrollbarValue();
pair<float, float> p = workarea_.getScrollbarBounds();
double const max = p.second;
- if (value == max) return 0;
+ if (value == max)
+ return 0;
+#if 1
float add_value = (bv_->text->defaultHeight()
+ float(time) * float(time) * 0.125);
if (add_value > workarea_.height())
add_value = float(workarea_.height() -
bv_->text->defaultHeight());
+#else
+ float add_value = float(workarea_.height()) * float(time) / 100;
+#endif
value += add_value;
if (!buffer_ || !screen_.get())
return;
- Inset * inset_hit = checkInsetHit(bv_->text, xpos, ypos);
-
// ok ok, this is a hack.
+ // Why??? (Jug20020424)
if (button == 4 || button == 5) {
switch (button) {
case 4:
scrollDown(lyxrc.wheel_jump);
break;
}
+ // We shouldn't go further down as we really should only do the
+ // scrolling and be done with this. Otherwise we may open some
+ // dialogs (Jug 20020424).
+ return;
}
+ Inset * inset_hit = checkInsetHit(bv_->text, xpos, ypos);
+
// Middle button press pastes if we have a selection
// We do this here as if the selection was inside an inset
// it could get cleared on the unlocking of the inset so
void BufferView::Pimpl::workAreaButtonRelease(int x, int y,
unsigned int button)
{
- if (!buffer_ || !screen_.get()) return;
+ // do nothing if we used the mouse wheel
+ if (!buffer_ || !screen_.get() || button == 4 || button == 5)
+ return;
// If we hit an inset, we have the inset coordinates in these
// and inset_hit points to the inset. If we do not hit an
screen_->update(bv_->text, bv_);
bool fitc = false;
while (bv_->text->status() == LyXText::CHANGED_IN_DRAW) {
- if (bv_->text->fullRebreak(bv_)) {
- st = LyXText::NEED_MORE_REFRESH;
- bv_->text->setCursor(bv_, bv_->text->cursor.par(),
- bv_->text->cursor.pos());
- fitc = true;
+ bv_->text->fullRebreak(bv_);
+ st = LyXText::NEED_MORE_REFRESH;
+ bv_->text->setCursor(bv_, bv_->text->cursor.par(),
+ bv_->text->cursor.pos());
+ if (bv_->text->selection.set()) {
+ bv_->text->setCursor(bv_, bv_->text->selection.start,
+ bv_->text->selection.start.par(),
+ bv_->text->selection.start.pos());
+ bv_->text->setCursor(bv_, bv_->text->selection.end,
+ bv_->text->selection.end.par(),
+ bv_->text->selection.end.pos());
}
+ fitc = true;
bv_->text->status(bv_, st);
screen_->update(bv_->text, bv_);
}
// span several workarea-heights) we'll move to the top again, but this
// is better than just jump down and only display part of the row.
new_y = bv_->text->first_y + workarea_.height();
- } else {
+ } else {
if (text->inset_owner) {
new_y = bv_->text->cursor.iy()
+ bv_->theLockingInset()->insetInInsetY()
return;
LyXText * text = bv_->getLyXText();
- if (text->real_current_font.isRightToLeft()) {
+ if (text->real_current_font.isRightToLeft()
+ && !(bv_->theLockingInset()
+ && bv_->theLockingInset()->lyxCode()== Inset::ERT_CODE))
+ {
if (owner_->getIntl()->keymap == Intl::PRIMARY)
owner_->getIntl()->KeyMapSec();
} else {
}
+#if 0
void BufferView::Pimpl::insetSleep()
{
if (bv_->theLockingInset() && !inset_slept) {
inset_slept = false;
}
}
+#endif
void BufferView::Pimpl::insetUnlock()
} else {
bv_->getLyXText()->insertStringAsLines(bv_, clip);
}
+ bv_->getLyXText()->clearSelection();
update(bv_->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
else
update(lt, BufferView::SELECT);
showCursor();
+ } else if (bv_->text->status() != LyXText::UNCHANGED) {
+ bv_->theLockingInset()->hideInsetCursor(bv_);
+ update(bv_->text, BufferView::SELECT|BufferView::FITCUR);
+ showCursor();
}
if (!lt->selection.set())
lyxerr[Debug::ACTION] << "BufferView::Pimpl::Dispatch: action["
<< action <<"] arg[" << argument << "]" << endl;
+ LyXTextClass const & tclass = textclasslist[buffer_->params.textclass];
+
switch (action) {
// --- Misc -------------------------------------------
case LFUN_APPENDIX:
InsetCommandParams p;
p.setCmdName("tableofcontents");
Inset * inset = new InsetTOC(p);
- if (!insertInset(inset, "Standard"))
+ if (!insertInset(inset, tclass.defaultLayoutName()))
delete inset;
break;
}
lyxerr[Debug::INFO] << "LFUN_LAYOUT: (arg) "
<< argument << endl;
+ // This is not the good solution to the empty argument
+ // problem, but it will hopefully suffice for 1.2.0.
+ // The correct solution would be to augument the
+ // function list/array with information about what
+ // functions needs arguments and their type.
+ if (argument.empty()) {
+ owner_->getLyXFunc()->setErrorMessage(
+ _("LyX function 'layout' needs an argument."));
+ break;
+ }
+
// Derive layout number from given argument (string)
// and current buffer's textclass (number). */
- textclass_type tclass = buffer_->params.textclass;
- bool hasLayout =
- textclasslist[tclass].hasLayout(argument);
+ bool hasLayout = tclass.hasLayout(argument);
string layout = argument;
// If the entry is obsolete, use the new one instead.
if (hasLayout) {
- string const & obs = textclasslist[tclass][layout]
- .obsoleted_by();
+ string const & obs = tclass[layout].obsoleted_by();
if (!obs.empty())
layout = obs;
}
BufferView::SELECT
| BufferView::FITCUR
| BufferView::CHANGE);
+ lt->setCursor(bv_, lt->cursor.par(), lt->cursor.pos());
moveCursorUpdate(false);
}
break;
{
LyXText * lt = bv_->getLyXText();
- LyXLayout const & style = textclasslist[buffer_->params.textclass][lt->cursor.par()->layout()];
+ LyXLayout const & style = tclass[lt->cursor.par()->layout()];
if (style.free_spacing) {
lt->insertChar(bv_, ' ');
break;
case LFUN_INSET_WIDE_FLOAT:
- {
// check if the float type exist
if (floatList.typeExist(argument)) {
InsetFloat * new_inset =
new InsetFloat(buffer_->params, argument);
new_inset->wide(true);
- if (insertInset(new_inset))
- new_inset->edit(bv_);
- else
- delete new_inset;
+ insertAndEditInset(new_inset);
} else {
lyxerr << "Non-existent float type: "
<< argument << endl;
}
-
- }
- break;
+ break;
#if 0
case LFUN_INSET_LIST:
{
InsetCommandParams p("printindex");
Inset * inset = new InsetPrintIndex(p);
- if (!insertInset(inset, "Standard"))
+ if (!insertInset(inset, tclass.defaultLayoutName()))
delete inset;
}
break;
{
InsetCommandParams p("lyxparent", argument);
Inset * inset = new InsetParent(p, *buffer_);
- if (!insertInset(inset, "Standard"))
+ if (!insertInset(inset, tclass.defaultLayoutName()))
delete inset;
}
break;
case LFUN_FLOAT_LIST:
- {
- // We should check the argument for validity. (Lgb)
- Inset * inset = new InsetFloatList(argument);
- if (!insertInset(inset, "Standard"))
- delete inset;
- }
- break;
+ if (floatList.typeExist(argument)) {
+ Inset * inset = new InsetFloatList(argument);
+ if (!insertInset(inset, tclass.defaultLayoutName()))
+ delete inset;
+ } else {
+ lyxerr << "Non-existent float type: "
+ << argument << endl;
+ }
+ break;
case LFUN_THESAURUS_ENTRY:
{