Abdelrazak Younes <[EMAIL PROTECTED]> writes: | Hello, | | Minus potential compilation problems with gtk and/or xforms I think I | am ready to merge my branch with trunk. Please find attached the | complete patch. I will wait for some green lights before applying. | | Abdel.
| Index: src/BufferView_pimpl.C | =================================================================== | --- src/BufferView_pimpl.C (revision 14120) | +++ src/BufferView_pimpl.C (working copy) | @@ -58,14 +58,14 @@ | #include "insets/insettext.h" | | #include "frontends/Alert.h" | +#include "frontends/Clipboard.h" | #include "frontends/Dialogs.h" | #include "frontends/FileDialog.h" | #include "frontends/font_metrics.h" | #include "frontends/LyXView.h" | -#include "frontends/LyXScreenFactory.h" | -#include "frontends/screen.h" | +#include "frontends/Gui.h" | #include "frontends/WorkArea.h" | -#include "frontends/WorkAreaFactory.h" | +#include "frontends/Painter.h" Can you sort the includes please? (it is already so close so why not go all the way) | | #include "graphics/Previews.h" | | @@ -82,6 +82,10 @@ | #include <functional> | #include <vector> | | +using lyx::frontend::WorkArea; | +using lyx::frontend::Clipboard; | +using lyx::frontend::Gui; | + | using lyx::pos_type; | | using lyx::support::addPath; | @@ -103,7 +107,6 @@ | using std::mem_fun_ref; | using std::vector; | | - | extern BufferList bufferlist; | | | @@ -142,8 +145,8 @@ | { | xsel_cache_.set = false; | | - workarea_.reset(WorkAreaFactory::create(*owner_, width, height)); | - screen_.reset(LyXScreenFactory::create(workarea())); | + work_area_id_ = owner_->gui().newWorkArea(width, height); | + work_area_ = & owner_->gui().workArea(work_area_id_); | | // Setup the signals | timecon = cursor_timeout.timeout | @@ -314,20 +317,26 @@ | } | | | -WorkArea & BufferView::Pimpl::workarea() const | +lyx::frontend::Gui & BufferView::Pimpl::gui() const | { | - return *workarea_.get(); | + return owner_->gui(); | } | | | -LyXScreen & BufferView::Pimpl::screen() const | +lyx::frontend::WorkArea & BufferView::Pimpl::workarea() const | { | - return *screen_.get(); | + return *work_area_; | } | | | -Painter & BufferView::Pimpl::painter() const | +lyx::frontend::Clipboard & BufferView::Pimpl::clipboard() const | { | + return owner_->gui().clipboard(); | +} | + | + | +lyx::frontend::Painter & BufferView::Pimpl::painter() const | +{ | return workarea().getPainter(); | } | | @@ -473,7 +482,7 @@ | | // estimated average paragraph height: | if (wh_ == 0) | - wh_ = workarea().workHeight() / 4; | + wh_ = workarea().height() / 4; | int h = t.getPar(anchor_ref_).height(); | | // Normalize anchor/offset (MV): | @@ -486,7 +495,7 @@ | int sumh = 0; | int nh = 0; | for (lyx::pit_type pit = anchor_ref_; pit <= parsize; ++pit) { | - if (sumh > workarea().workHeight()) | + if (sumh > workarea().height()) | break; | int const h2 = t.getPar(pit).height(); | sumh += h2; | @@ -511,7 +520,7 @@ | if (!buffer_) | return; | | - screen().hideCursor(); | + owner_->gui().guiCursor().hide(); | | LyXText & t = *bv_->text(); | | @@ -530,7 +539,7 @@ | | int const height = 2 * defaultRowHeight(); | int const first = height; | - int const last = workarea().workHeight() - height; | + int const last = workarea().height() - height; | LCursor & cur = cursor_; | | bv_funcs::CurStatus st = bv_funcs::status(bv_, cur); | @@ -591,7 +600,7 @@ | * dispatch() itself, because that's called recursively. | */ | if (available()) | - screen().showCursor(*bv_); | + owner_->gui().guiCursor().show(*bv_); | } | | | @@ -618,7 +627,7 @@ | xsel_cache_.set = cur.selection(); | sel = cur.selectionAsString(false); | if (!sel.empty()) | - workarea().putClipboard(sel); | + clipboard().put(sel); | } | } | | @@ -626,7 +635,7 @@ | void BufferView::Pimpl::selectionLost() | { | if (available()) { | - screen().hideCursor(); | + owner_->gui().guiCursor().hide(); | cursor_.clearSelection(); | xsel_cache_.set = false; | } | @@ -638,12 +647,12 @@ | static int work_area_width; | static int work_area_height; | | - bool const widthChange = workarea().workWidth() != work_area_width; | - bool const heightChange = workarea().workHeight() != work_area_height; | + bool const widthChange = workarea().width() != work_area_width; | + bool const heightChange = workarea().height() != work_area_height; | | // Update from work area | - work_area_width = workarea().workWidth(); | - work_area_height = workarea().workHeight(); | + work_area_width = workarea().width(); | + work_area_height = workarea().height(); Have temporary for workarea somehwere? | @@ -666,7 +675,7 @@ | int const asc = font_metrics::maxAscent(font); | int const des = font_metrics::maxDescent(font); | Point const p = bv_funcs::getPos(cursor_, cursor_.boundary()); | - if (p.y_ - asc >= 0 && p.y_ + des < workarea().workHeight()) | + if (p.y_ - asc >= 0 && p.y_ + des < workarea().height()) | return false; | } | center(); | @@ -721,14 +730,14 @@ | } | if (forceupdate) { | // Second drawing step | - screen().redraw(*bv_, vi); | + workarea().redraw(*bv_, vi); | } else { | // Abort updating of the coord | // cache - just restore the old one | std::swap(theCoords, backup); | } | } else | - screen().greyOut(); | + workarea().greyOut(); | | // And the scrollbar | updateScrollbar(); | @@ -740,7 +749,7 @@ | void BufferView::Pimpl::cursorToggle() | { | if (buffer_) { | - screen().toggleCursor(*bv_); | + owner_->gui().guiCursor().toggle(*bv_); | | // Use this opportunity to deal with any child processes that | // have finished but are waiting to communicate this fact | @@ -867,13 +876,13 @@ | Paragraph const & par = bot.text()->paragraphs()[pit]; | anchor_ref_ = pit; | offset_ref_ = bv_funcs::coordOffset(cursor_, cursor_.boundary()).y_ | - + par.ascent() - workarea().workHeight() / 2; | + + par.ascent() - workarea().height() / 2; | } | | | void BufferView::Pimpl::stuffClipboard(string const & content) const | { | - workarea().putClipboard(content); | + clipboard().put(content); | } | | | @@ -998,13 +1007,13 @@ | if (!available()) | return false; | | - screen().hideCursor(); | + owner_->gui().guiCursor().hide(); | | // Either the inset under the cursor or the | // surrounding LyXText will handle this event. | | // Build temporary cursor. | - cmd.y = min(max(cmd.y,-1), workarea().workHeight()); | + cmd.y = min(max(cmd.y,-1), workarea().height()); spacing | InsetBase * inset = bv_->text()->editXY(cur, cmd.x, cmd.y); | //lyxerr << BOOST_CURRENT_FUNCTION | // << " * hit inset at tip: " << inset << endl; | @@ -1036,7 +1045,7 @@ | | // See workAreaKeyPress | cursor_timeout.restart(); | - screen().showCursor(*bv_); | + owner_->gui().guiCursor().show(*bv_); | | // Skip these when selecting | if (cmd.action != LFUN_MOUSE_MOTION) { | Index: src/BufferView_pimpl.h | =================================================================== | --- src/BufferView_pimpl.h (revision 14120) | +++ src/BufferView_pimpl.h (working copy) | @@ -35,25 +35,33 @@ | #include <boost/signals/trackable.hpp> | | | + Do we need three empty lines? | class Change; | class LyXKeySym; | class LyXView; | -class WorkArea; | -class LyXScreen; | + | class FuncRequest; | class FuncStatus; | class ViewMetricsInfo; | | +namespace lyx { | +namespace frontend { | +class Gui; | +class WorkArea; | +class Clipboard; | +class Painter; | +class GuiCursor; | +} | +} | | + | /// | class BufferView::Pimpl : public boost::signals::trackable { | public: | /// | Pimpl(BufferView & bv, LyXView * owner, int width, int height); | /// | - Painter & painter() const; | - /// return the screen for this bview | - LyXScreen & screen() const; | + lyx::frontend::Painter & painter() const; | /// | void setBuffer(Buffer * buf); | /// | @@ -110,6 +118,14 @@ | bool repaintAll() { return refresh_inside_; } | /// | void repaintAll(bool r) {refresh_inside_ = r; } | + | + /// the frontend | + lyx::frontend::Gui & gui() const; | + /// our workarea | + lyx::frontend::WorkArea & workarea() const; | + /// the clipboard | + lyx::frontend::Clipboard & clipboard() const; | + | private: | /// An error list (replaces the error insets) | ErrorList errorlist_; | @@ -148,10 +164,7 @@ | LyXView * owner_; | /// | Buffer * buffer_; | - /// | - boost::scoped_ptr<LyXScreen> screen_; | - /// | - boost::scoped_ptr<WorkArea> workarea_; | + | /// Estimated average par height for scrollbar | int wh_; | /// | @@ -179,8 +192,10 @@ | std::vector<Position> saved_positions; | /// | void menuInsertLyXFile(std::string const & filen); | - /// our workarea | - WorkArea & workarea() const; | + | + lyx::frontend::WorkArea * work_area_; Do we want bald pointers? Even just as cache? | Index: src/frontends/gtk/GView.h | =================================================================== | --- src/frontends/gtk/GView.h (revision 14120) | +++ src/frontends/gtk/GView.h (working copy) | @@ -12,9 +12,12 @@ | #ifndef GVIEW_H | #define GVIEW_H | | -#include "frontends/LyXView.h" | #include "bufferview_funcs.h" | | +#include "frontends/LyXView.h" | + | +#include "TheGui.h" This "TheGui" thing sounds/looks strange. what is it? Can it get a more descriptive name? | + /// | + TheGui frontend_; | }; | | } // namespace frontend | Index: src/frontends/gtk/GWorkArea.C | =================================================================== | --- src/frontends/gtk/GWorkArea.C (revision 14120) | +++ src/frontends/gtk/GWorkArea.C (working copy) | @@ -504,7 +504,7 @@ | } | | | -void GWorkArea::haveSelection(bool toHave) const | +void GWorkArea::haveSelection(bool toHave) | { | if (toHave) { | Glib::RefPtr<Gtk::Clipboard> clipboard = | @@ -533,7 +533,7 @@ | | // ENCODING: we assume that the backend passes us ISO-8859-1 and | // convert from that to UTF-8 before passing to GTK | -void GWorkArea::putClipboard(string const & str) const | +void GWorkArea::putClipboard(string const & str) | { Why the const removals? | Index: src/frontends/qt4/QRef.C | =================================================================== | --- src/frontends/qt4/QRef.C (revision 14120) | +++ src/frontends/qt4/QRef.C (working copy) | @@ -4,7 +4,7 @@ | * Licence details can be found in the file COPYING. | * | * \author John Levon | - * \author Jürgen Spitzmüller | + * \author Jurgen Spitzmuller | * | * Full author contact details are available in file CREDITS. | */ | Index: src/frontends/qt4/QtView.C | =================================================================== | --- src/frontends/qt4/QtView.C (revision 14120) | +++ src/frontends/qt4/QtView.C (working copy) | @@ -3,7 +3,7 @@ | * This file is part of LyX, the document processor. | * Licence details can be found in the file COPYING. | * | - * \author Lars Gullik Bjønnes | + * \author Lars Gullik Bjønnes | * \author John Levon | * \author Abdelrazak Younes | * Hmm... your compiler mangles charsets. | Index: src/support/lstrings.C | =================================================================== | --- src/support/lstrings.C (revision 14120) | +++ src/support/lstrings.C (working copy) | @@ -546,6 +546,40 @@ | } | | | +string const externalLineEnding(string const & str) | +{ | +#ifdef Q_WS_MACX | + // The MAC clipboard uses \r for lineendings, and we use \n | + return subst(str, '\n', '\r'); | +#endif | + | + return str; | +/* | +#ifdef Q_WS_WIN | + // Windows clipboard uses \r\n for lineendings, and we use \n | + return subst(str, '\n', '\r\n'); | +#endif | +*/ | +} | + | + | +string const internalLineEnding(string const & str) | +{ | +#ifdef Q_WS_MACX | + // The MAC clipboard uses \r for lineendings, and we use \n | + return subst(str, '\r', '\n'); | +#endif | + | + return str; | +/* | +#ifdef Q_WS_WIN | + // Windows clipboard uses \r\n for lineendings, and we use \n | + return subst(str, '\r\n', '\n'); | +#endif | +*/ | +} | + | + | #ifndef I_AM_NOT_AFRAID_OF_HEADER_LIBRARIES | #if USE_BOOST_FORMAT Are thise releated to the gui changes? Why? (and I donÃ't like the IFDEF implementation. Should be broken out into an win file and a mac file. -- Lgb