X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxvc.C;h=3e09e77d346b5bfffffb89b72d1d2d5a636558dd;hb=c1e009f2d3baa65a05345224ae14f1fe521b8199;hp=40dcf2547d6164aa2f95435f6f3e881dfb9d2ae6;hpb=efe0b0b8eb340b7c34ead8afe5d81b410d5e7865;p=lyx.git diff --git a/src/lyxvc.C b/src/lyxvc.C index 40dcf2547d..3e09e77d34 100644 --- a/src/lyxvc.C +++ b/src/lyxvc.C @@ -1,26 +1,29 @@ #include -#ifdef __GNUG__ -#pragma implementation -#endif - -#include - #include "lyxvc.h" #include "vc-backend.h" #include "debug.h" -#include "lyx_gui_misc.h" #include "buffer.h" #include "BufferView.h" #include "gettext.h" +#include "funcrequest.h" + +#include "frontends/Alert.h" +#include "frontends/LyXView.h" + #include "support/filetools.h" #include "support/lyxlib.h" -#include "LyXView.h" -#include "lyxfunc.h" + +#include using std::endl; using std::pair; + +/* WARNING: Several of the vcs-> methods end up + * deleting this object via BufferView::reload() ! + */ + LyXVC::LyXVC() { vcs = 0; @@ -71,43 +74,74 @@ void LyXVC::buffer(Buffer * buf) } +bool LyXVC::ensureClean() +{ + if (owner_->isClean()) + return true; + + string const file = MakeDisplayPath(owner_->fileName(), 30); + string text = bformat(_("The document %1$s has unsaved changes.\n\n" + "Do you want to save the document?"), file); + int const ret = Alert::prompt(_("Save changed document?"), + text, 0, 1, _("&Save"), _("&Cancel")); + + if (ret == 0) { + vcs->owner()->getUser()->owner()->dispatch(FuncRequest(LFUN_MENUWRITE)); + } + + return owner_->isClean(); +} + + void LyXVC::registrer() { + string const filename = owner_->fileName(); + + // there must be a file to save + if (!IsFileReadable(filename)) { + Alert::error(_("Document not saved"), + _("You must save the document " + "before it can be registered.")); + return; + } + // it is very likely here that the vcs is not created yet... - // so... we use RCS as default, later this should perhaps be - // a lyxrc option. if (!vcs) { - vcs = new RCS(owner_->fileName()); + string const cvs_entries = "CVS/Entries"; + + if (IsFileReadable(cvs_entries)) { + lyxerr[Debug::LYXVC] + << "LyXVC: registering " + << MakeDisplayPath(filename) + << " with CVS" << endl; + vcs = new CVS(cvs_entries, filename); + + } else { + lyxerr[Debug::LYXVC] + << "LyXVC: registering " + << MakeDisplayPath(filename) + << " with RCS" << endl; + vcs = new RCS(filename); + } + vcs->owner(owner_); } - - // If the document is changed, we might want to save it - if (!vcs->owner()->isLyxClean() && - AskQuestion(_("Changes in document:"), - MakeDisplayPath(vcs->owner()->fileName(), 50), - _("Save document and proceed?"))) { - vcs->owner()->getUser()->owner() - ->getLyXFunc()->dispatch(LFUN_MENUWRITE); - } // Maybe the save fails, or we answered "no". In both cases, // the document will be dirty, and we abort. - if (!vcs->owner()->isLyxClean()) { + if (!ensureClean()) return; - } lyxerr[Debug::LYXVC] << "LyXVC: registrer" << endl; pair tmp = - askForText(_("LyX VC: Initial description"), + Alert::askForText(_("LyX VC: Initial description"), _("(no initial description)")); if (!tmp.first || tmp.second.empty()) { // should we insist on checking tmp.second.empty()? lyxerr[Debug::LYXVC] << "LyXVC: user cancelled" << endl; - WriteAlert(_("Info"), - _("This document has NOT been registered.")); return; } - + vcs->registrer(tmp.second); } @@ -115,22 +149,18 @@ void LyXVC::registrer() void LyXVC::checkIn() { // If the document is changed, we might want to save it - if (!vcs->owner()->isLyxClean() && - AskQuestion(_("Changes in document:"), - MakeDisplayPath(vcs->owner()->fileName(), 50), - _("Save document and proceed?"))) { + if (!vcs->owner()->isClean()) { vcs->owner()->getUser()->owner() - ->getLyXFunc()->dispatch(LFUN_MENUWRITE); + ->dispatch(FuncRequest(LFUN_MENUWRITE)); } // Maybe the save fails, or we answered "no". In both cases, // the document will be dirty, and we abort. - if (!vcs->owner()->isLyxClean()) { + if (!vcs->owner()->isClean()) return; - } lyxerr[Debug::LYXVC] << "LyXVC: checkIn" << endl; - pair tmp = askForText(_("LyX VC: Log Message")); + pair tmp = Alert::askForText(_("LyX VC: Log Message")); if (tmp.first) { if (tmp.second.empty()) { tmp.second = _("(no log message)"); @@ -145,30 +175,26 @@ void LyXVC::checkIn() void LyXVC::checkOut() { lyxerr[Debug::LYXVC] << "LyXVC: checkOut" << endl; - if (!vcs->owner()->isLyxClean() - && !AskQuestion(_("Changes in document:"), - MakeDisplayPath(vcs->owner()->fileName(), 50), - _("Ignore changes and proceed with check out?"))) { + if (!ensureClean()) return; - } vcs->checkOut(); - } void LyXVC::revert() { lyxerr[Debug::LYXVC] << "LyXVC: revert" << endl; - // Here we should check if the buffer is dirty. And if it is - // we should warn the user that reverting will discard all - // changes made since the last check in. - if (AskQuestion(_("When you revert, you will loose all changes made"), - _("to the document since the last check in."), - _("Do you still want to do it?"))) { + string const file = MakeDisplayPath(owner_->fileName(), 20); + string text = bformat(_("Reverting to the stored version of the " + "document %1$s will lose all current changes.\n\n" + "Do you want to revert to the saved version?"), file); + int const ret = Alert::prompt(_("Revert to stored version of document?"), + text, 0, 1, _("&Revert"), _("&Cancel")); + + if (ret == 0) vcs->revert(); - } } @@ -200,9 +226,14 @@ bool LyXVC::inUse() } -string const & LyXVC::version() const +//string const & LyXVC::version() const +//{ +// return vcs->version(); +//} + +string const LyXVC::versionString() const { - return vcs->version(); + return vcs->versionString(); }