mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
00c37e4781
TODO 1: All occurrences of "LyXView::showErrorList()" in the "kernel" should be replaced by a boost signal emission (Buffer::errors()). This signal is already connected to this showErrorList() slot. TODO 2: The ErrorList mechanism is used wrongly in a number of place, most notably in "Converter.C". Instead of replacing the ErrorList in the "Buffer" class, the "Converter" class should maintain its own list instead and connect directly to the LyXView::showErrorList() slot. Buffer: * errorList_: new private member and associated access methods. * setErrorList(): new accessor method. * addError(): apend an error to the errorList_. * error(): deleted. * errors(): new boost signal, unused for now. Shall be used instead of LyXView::showErrorList(). LyXView: * getErrorList(), addError(), errorlist_, errorConnection_: deleted. * errorsConnection_: new boost connection for the Buffer::errors() signal. lyx_main.C: * LyX::exec2(): manually print all errors. BufferView.h: remove unneeded ErrorList forward declaration. BufferView::pimpl::menuInsertLyXFile(): delete Buffer::error() connection and add a FIXME comment text.C: Use Buffer::addError() instead of Buffer::error() signal emission. ControlErrorList.C: get the ErrorList from the Buffer instead of LyXView git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14467 a592a061-630c-0410-9148-cb99ea01b6c8
235 lines
5.6 KiB
C++
235 lines
5.6 KiB
C++
// -*- C++ -*-
|
|
/**
|
|
* \file BufferView.h
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author Alfredo Braustein
|
|
* \author Lars Gullik Bjønnes
|
|
* \author John Levon
|
|
* \author Jürgen Vigna
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*/
|
|
|
|
#ifndef BUFFER_VIEW_H
|
|
#define BUFFER_VIEW_H
|
|
|
|
#include "metricsinfo.h"
|
|
|
|
#include "frontends/LyXKeySym.h"
|
|
|
|
#include "support/types.h"
|
|
|
|
#include <boost/utility.hpp>
|
|
|
|
#include <string>
|
|
|
|
class Buffer;
|
|
class Change;
|
|
class DocIterator;
|
|
class FuncRequest;
|
|
class FuncStatus;
|
|
class Language;
|
|
class LCursor;
|
|
class LyXText;
|
|
class LyXView;
|
|
class ParIterator;
|
|
class ViewMetricsInfo;
|
|
|
|
namespace Update {
|
|
enum flags {
|
|
FitCursor = 1,
|
|
Force = 2,
|
|
SinglePar = 4,
|
|
MultiParSel = 8
|
|
};
|
|
|
|
inline flags operator|(flags const f, flags const g)
|
|
{
|
|
return static_cast<flags>(int(f) | int(g));
|
|
}
|
|
|
|
inline flags operator&(flags const f, flags const g)
|
|
{
|
|
return static_cast<flags>(int(f) & int(g));
|
|
}
|
|
|
|
} // namespace
|
|
|
|
/// Scrollbar Parameters
|
|
struct ScrollbarParameters
|
|
{
|
|
void reset(int h = 0, int p = 0, int l = 0)
|
|
{
|
|
height = h;
|
|
position = p;
|
|
lineScrollHeight = l;
|
|
}
|
|
|
|
/// The total document height in pixels
|
|
int height;
|
|
/// The current position in the document, in pixels
|
|
int position;
|
|
/// the line-scroll amount, in pixels
|
|
int lineScrollHeight;
|
|
};
|
|
|
|
/**
|
|
* A buffer view encapsulates a view onto a particular
|
|
* buffer, and allows access to operate upon it. A view
|
|
* is a sliding window of the entire document rendering.
|
|
*
|
|
* Eventually we will allow several views onto a single
|
|
* buffer, but not yet.
|
|
*/
|
|
class BufferView : boost::noncopyable {
|
|
public:
|
|
/**
|
|
* Create a view with the given owner main window,
|
|
* of the given dimensions.
|
|
*/
|
|
BufferView(LyXView * owner);
|
|
|
|
~BufferView();
|
|
|
|
/// set the buffer we are viewing
|
|
void setBuffer(Buffer * b);
|
|
/// return the buffer being viewed
|
|
Buffer * buffer() const;
|
|
/// return the first layout of the Buffer.
|
|
std::string firstLayout();
|
|
|
|
/// return the owning main view
|
|
LyXView * owner() const;
|
|
|
|
/// resize event has happened
|
|
void resize();
|
|
|
|
/// reload the contained buffer
|
|
void reload();
|
|
/// load a buffer into the view
|
|
bool loadLyXFile(std::string const & name, bool tolastfiles = true);
|
|
|
|
/** perform pending painting updates. \c fitcursor means first
|
|
* to do a fitcursor, and to force an update if screen
|
|
* position changes. \c forceupdate means to force an update
|
|
* in any case.
|
|
* \return true if a full updateMetrics() is needed.
|
|
*/
|
|
bool update(Update::flags flags = Update::FitCursor | Update::Force);
|
|
|
|
/// move the screen to fit the cursor. Only to be called with
|
|
/// good y coordinates (after a bv::metrics)
|
|
bool fitCursor();
|
|
/// reset the scrollbar to reflect current view position
|
|
void updateScrollbar();
|
|
/// return the Scrollbar Parameters
|
|
ScrollbarParameters const & scrollbarParameters() const;
|
|
|
|
/// FIXME
|
|
bool available() const;
|
|
|
|
/// Save the current position as bookmark i
|
|
void savePosition(unsigned int i);
|
|
/// Restore the position from bookmark i
|
|
void restorePosition(unsigned int i);
|
|
/// does the given bookmark have a saved position ?
|
|
bool isSavedPosition(unsigned int i);
|
|
/// save bookmarks to .lyx/session
|
|
void saveSavedPositions();
|
|
|
|
/// return the current change at the cursor
|
|
Change const getCurrentChange();
|
|
|
|
/// return the lyxtext we are using
|
|
LyXText * getLyXText();
|
|
|
|
/// return the lyxtext we are using
|
|
LyXText const * getLyXText() const;
|
|
|
|
/// simple replacing. Use the font of the first selected character
|
|
void replaceSelectionWithString(std::string const & str);
|
|
|
|
/// move cursor to the named label
|
|
void gotoLabel(std::string const & label);
|
|
|
|
/// set the cursor based on the given TeX source row
|
|
void setCursorFromRow(int row);
|
|
|
|
/// center the document view around the cursor
|
|
void center();
|
|
/// scroll document by the given number of lines of default height
|
|
void scroll(int lines);
|
|
/// Scroll the view by a number of pixels
|
|
void scrollDocView(int pixels);
|
|
|
|
/// return the pixel width of the document view
|
|
int workWidth() const;
|
|
/// return the pixel height of the document view
|
|
int workHeight() const;
|
|
|
|
/// switch between primary and secondary keymaps for RTL entry
|
|
void switchKeyMap();
|
|
|
|
/// return true for events that will handle
|
|
FuncStatus getStatus(FuncRequest const & cmd);
|
|
/// execute the given function
|
|
bool dispatch(FuncRequest const & argument);
|
|
|
|
///
|
|
void selectionRequested();
|
|
///
|
|
void selectionLost();
|
|
|
|
///
|
|
void workAreaResize(int width, int height);
|
|
|
|
/// Receive a keypress
|
|
void workAreaKeyPress(LyXKeySymPtr key, key_modifier::state state);
|
|
|
|
/// a function should be executed from the workarea
|
|
bool workAreaDispatch(FuncRequest const & ev);
|
|
|
|
/// clear the X selection
|
|
void unsetXSel();
|
|
|
|
/// access to offset
|
|
int offset_ref() const;
|
|
/// access to anchor
|
|
lyx::pit_type anchor_ref() const;
|
|
|
|
/// access to full cursor
|
|
LCursor & cursor();
|
|
/// access to full cursor
|
|
LCursor const & cursor() const;
|
|
///
|
|
LyXText * text() const;
|
|
/// sets cursor and open all relevant collapsable insets.
|
|
void setCursor(DocIterator const &);
|
|
/// sets cursor; this is used when handling LFUN_MOUSE_PRESS.
|
|
void mouseSetCursor(LCursor & cur);
|
|
|
|
/* Sets the selection. When \c backwards == false, set anchor
|
|
* to \c cur and cursor to \c cur + \c length. When \c
|
|
* backwards == true, set anchor to \c cur and cursor to \c
|
|
* cur + \c length.
|
|
*/
|
|
void putSelectionAt(DocIterator const & cur,
|
|
int length, bool backwards);
|
|
///
|
|
ViewMetricsInfo const & viewMetricsInfo();
|
|
///
|
|
void updateMetrics(bool singlepar = false);
|
|
|
|
private:
|
|
///
|
|
class Pimpl;
|
|
///
|
|
friend class BufferView::Pimpl;
|
|
///
|
|
Pimpl * pimpl_;
|
|
};
|
|
|
|
#endif // BUFFERVIEW_H
|