X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView_pimpl.C;h=f5f1be2b2dadde664b78e2cc4fe440d6d73f6fd8;hb=77866d9e88cbbd1f5f580a7daf15751352792e12;hp=220390374e5b8989bf4b948f6a9abfefda0a3c84;hpb=33c5d408fae53babcf6a37b78fdbf953e76f862f;p=lyx.git diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index 220390374e..f5f1be2b2d 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -115,7 +115,7 @@ void SetXtermCursor(Window win) { static Cursor cursor; static bool cursor_undefined = true; - if (cursor_undefined){ + if (cursor_undefined) { cursor = XCreateFontCursor(fl_get_display(), XC_xterm); XFlush(fl_get_display()); cursor_undefined = false; @@ -155,6 +155,10 @@ BufferView::Pimpl::Pimpl(BufferView * b, LyXView * o, .connect(slot(this, &BufferView::Pimpl::tripleClick)); workarea_.workAreaKeyPress .connect(slot(this, &BufferView::Pimpl::workAreaKeyPress)); + workarea_.selectionRequested + .connect(slot(this, &BufferView::Pimpl::selectionRequested)); + workarea_.selectionLost + .connect(slot(this, &BufferView::Pimpl::selectionLost)); cursor_timeout.timeout.connect(slot(this, &BufferView::Pimpl::cursorToggle)); @@ -403,17 +407,26 @@ void BufferView::Pimpl::updateScrollbar() } long const text_height = bv_->text->height; + long const work_height = workarea_.height(); + if (text_height <= work_height) { + workarea_.setScrollbarBounds(0.0, 0.0); + current_scrollbar_value = bv_->text->first; + workarea_.setScrollbar(current_scrollbar_value, 1.0); + return; + } + double const lineh = bv_->text->defaultHeight(); double const slider_size = (text_height == 0) ? 1.0 : 1.0 / double(text_height); - - static long old_text_height = 0; - static double old_lineh = 0; - static double old_slider_size = 0; + + static long old_text_height; + static double old_lineh; + static double old_slider_size; if (text_height != old_text_height) { - workarea_.setScrollbarBounds(0, text_height - workarea_.height()); + workarea_.setScrollbarBounds(0.0, + text_height - work_height); old_text_height = text_height; } if (lineh != old_lineh) { @@ -435,6 +448,7 @@ void BufferView::Pimpl::scrollCB(double value) if (!buffer_) return; current_scrollbar_value = long(value); + if (current_scrollbar_value < 0) current_scrollbar_value = 0; @@ -568,11 +582,7 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state) bv_->text->setSelection(bv_); screen_->toggleToggle(bv_->text, bv_); fitCursor(); -#if 0 - screen_->showCursor(bv_->text, bv_); -#else showCursor(); -#endif } @@ -628,11 +638,7 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, screen_->toggleSelection(bv_->text, bv_); bv_->text->clearSelection(); bv_->text->fullRebreak(bv_); -#if 0 - screen_->update(bv_->text, bv_); -#else update(); -#endif updateScrollbar(); // Single left click in math inset? @@ -642,8 +648,10 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, selection_possible = false; owner_->updateLayoutChoice(); owner_->message(inset->editMessage()); + // IMO the inset has to be first in edit-mode and then we send the + // button press. (Jug 20020222) + inset->edit(bv_); //, xpos, ypos, button); inset->insetButtonPress(bv_, xpos, ypos, button); - inset->edit(bv_, xpos, ypos, button); return; } @@ -736,6 +744,28 @@ void BufferView::Pimpl::tripleClick(int /*x*/, int /*y*/, unsigned int button) } +void BufferView::Pimpl::selectionRequested() +{ + if (!available()) + return; + + string const sel(bv_->getLyXText()->selectionAsString(bv_->buffer(), + false)); + if (!sel.empty()) { + workarea_.putClipboard(sel); + } +} + + +void BufferView::Pimpl::selectionLost() +{ + hideCursor(); + toggleSelection(); + bv_->getLyXText()->clearSelection(); + showCursor(); +} + + void BufferView::Pimpl::enterView() { if (active() && available()) { @@ -780,8 +810,15 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, if (button == 2) return; + // finish selection + if (button == 1) { + workarea_.haveSelection(bv_->getLyXText()->selection.set()); + } + setState(); owner_->showState(); + owner_->updateMenubar(); + owner_->updateToolbar(); // Did we hit an editable inset? if (inset_hit) { @@ -834,29 +871,6 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, return; } -#ifdef WITH_WARNINGS -#warning variable c is set but never used. What is it good for?? (JMarc) -#warning isnt this code dead ?? "open a float" ??? (jbl) -#endif - // check whether we want to open a float - if (bv_->text) { - bool hit = false; - char c = ' '; - if (bv_->text->cursor.pos() < - bv_->text->cursor.par()->size()) { - c = bv_->text->cursor.par()-> - getChar(bv_->text->cursor.pos()); - } - if (bv_->text->cursor.pos() - 1 >= 0) { - c = bv_->text->cursor.par()-> - getChar(bv_->text->cursor.pos() - 1); - } - if (hit == true) { - selection_possible = false; - return; - } - } - // Maybe we want to edit a bibitem ale970302 if (bv_->text->cursor.par()->bibkey && x < 20 + bibitemMaxWidth(bv_, textclasslist. @@ -869,7 +883,8 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, } -Box BufferView::Pimpl::insetDimensions(LyXText const & text, LyXCursor const & cursor) const +Box BufferView::Pimpl::insetDimensions(LyXText const & text, + LyXCursor const & cursor) const { Paragraph /*const*/ & par = *cursor.par(); pos_type const pos = cursor.pos(); @@ -892,7 +907,9 @@ Box BufferView::Pimpl::insetDimensions(LyXText const & text, LyXCursor const & c } -Inset * BufferView::Pimpl::checkInset(LyXText const & text, LyXCursor const & cursor, int & x, int & y) const +Inset * BufferView::Pimpl::checkInset(LyXText const & text, + LyXCursor const & cursor, + int & x, int & y) const { pos_type const pos(cursor.pos()); Paragraph /*const*/ & par(*cursor.par()); @@ -1154,7 +1171,7 @@ void BufferView::Pimpl::cursorPrevious(LyXText * text) text->cursor.y() - text->cursor.row()->baseline() + text->cursor.row()->height() - - workarea_.height() + 1 ); + - workarea_.height() + 1); updateScrollbar(); } @@ -1226,7 +1243,7 @@ void BufferView::Pimpl::restorePosition(unsigned int i) Buffer * b = bufferlist.exists(fname) ? bufferlist.getBuffer(fname) : bufferlist.loadLyXFile(fname); // don't ask, just load it - if (b != 0 ) buffer(b); + if (b != 0) buffer(b); } Paragraph * par = buffer_->getParFromID(saved_positions[i].par_id); @@ -1450,7 +1467,7 @@ void BufferView::Pimpl::MenuInsertLyXFile(string const & filen) string initpath = lyxrc.document_path; if (available()) { - string const trypath = owner_->buffer()->filepath; + string const trypath = owner_->buffer()->filePath(); // If directory is writeable, use this as default. if (IsDirWriteable(trypath)) initpath = trypath; @@ -1459,9 +1476,9 @@ void BufferView::Pimpl::MenuInsertLyXFile(string const & filen) FileDialog fileDlg(bv_->owner(), _("Select LyX document to insert"), LFUN_FILE_INSERT, - make_pair(string(_("Documents")), + make_pair(string(_("Documents|#o#O")), string(lyxrc.document_path)), - make_pair(string(_("Examples")), + make_pair(string(_("Examples|#E#e")), string(AddPath(system_lyxdir, "examples")))); FileDialog::Result result = @@ -2957,13 +2974,13 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_CITATION_INSERT: { InsetCommandParams p; - p.setFromString( argument ); + p.setFromString(argument); - InsetCitation * inset = new InsetCitation( p ); + InsetCitation * inset = new InsetCitation(p); if (!insertInset(inset)) delete inset; else - updateInset( inset, true ); + updateInset(inset, true); } break; @@ -2975,7 +2992,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) string const db = token(argument, ' ', 0); string const bibstyle = token(argument, ' ', 1); - InsetCommandParams p( "BibTeX", db, bibstyle ); + InsetCommandParams p("BibTeX", db, bibstyle); InsetBibtex * inset = new InsetBibtex(p); if (insertInset(inset)) { @@ -3073,7 +3090,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_PARENTINSERT: { lyxerr << "arg " << argument << endl; - InsetCommandParams p( "lyxparent", argument ); + InsetCommandParams p("lyxparent", argument); Inset * inset = new InsetParent(p, *buffer_); if (!insertInset(inset, "Standard")) delete inset; @@ -3307,7 +3324,7 @@ void BufferView::Pimpl::smartQuote() if (style.pass_thru || (!insertInset(new InsetQuotes(c, bv_->buffer()->params)))) - Dispatch(LFUN_SELFINSERT, "\""); + bv_->owner()->getLyXFunc()->dispatch(LFUN_SELFINSERT, "\""); } @@ -3413,7 +3430,7 @@ void BufferView::Pimpl::updateInset(Inset * inset, bool mark_dirty) } else if (bv_->theLockingInset()->updateInsetInInset(bv_, inset)) { if (bv_->text->updateInset(bv_, bv_->theLockingInset())) { update(); - if (mark_dirty){ + if (mark_dirty) { buffer_->markDirty(); } updateScrollbar();