]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiCompareHistory.cpp
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / GuiCompareHistory.cpp
index d33103244a883ea4be070dc8baa2f544746ea5ed..b4228a5f53cc97597f6064faca4ff3b0bdea9130 100644 (file)
@@ -9,6 +9,8 @@
  */
 
 #include <config.h>
+#include <support/debug.h>
+#include <limits>
 
 #include "GuiCompareHistory.h"
 
@@ -21,7 +23,8 @@
 #include "support/convert.h"
 #include "support/lstrings.h"
 
-
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 using namespace std;
 using namespace lyx::support;
@@ -37,8 +40,8 @@ GuiCompareHistory::GuiCompareHistory(GuiView & lv)
        setupUi(this);
        setModal(Qt::WindowModal);
 
-       connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
-       connect(cancelPB, SIGNAL(clicked()), this, SLOT(slotCancel()));
+       connect(buttonBox, SIGNAL(clicked(QAbstractButton *)),
+               this, SLOT(slotButtonBox(QAbstractButton *)));
 
        connect(revbackRB, SIGNAL(clicked()), this, SLOT(selectRevback()));
        connect(betweenrevRB, SIGNAL(clicked()), this, SLOT(selectBetweenrev()));
@@ -47,16 +50,30 @@ GuiCompareHistory::GuiCompareHistory(GuiView & lv)
 bool GuiCompareHistory::initialiseParams(std::string const &)
 {
        string revstring = lyxview().currentBufferView()->buffer().lyxvc().revisionInfo(LyXVC::File);
-       int rev=0;
-       if (prefixIs(revstring, "r"))
-               revstring = ltrim(revstring,"r");
-       if (isStrInt(revstring))
-               rev = convert<int>(revstring);
-
-       okPB->setEnabled(rev);
+       int rev = 0;
+
+       string tmp;
+       bool enableBetween = true;
+       // GIT case, hash is long
+       if (revstring.length() > 20) {
+               enableBetween = false;
+               rev = numeric_limits<int>::max();
+       } else {
+               // RCS case
+               if (!isStrInt(revstring))
+                       revstring = rsplit(revstring, tmp , '.' );
+               // both SVN & RCS cases
+               if (isStrInt(revstring))
+                       rev = convert<int>(revstring);
+       }
+
+       // later we can provide comparison between two hashes
+       betweenrevRB->setEnabled(enableBetween);
+
+       buttonBox->button(QDialogButtonBox::Ok)->setEnabled(rev);
        rev1SB->setMaximum(rev);
        rev2SB->setMaximum(rev);
-       revbackSB->setMaximum(rev);
+       revbackSB->setMaximum(rev-1);
        rev2SB->setValue(rev);
        rev1SB->setValue(rev-1);
 
@@ -91,8 +108,11 @@ void GuiCompareHistory::selectBetweenrev()
 void GuiCompareHistory::enableControls()
 {
        bool rb = revbackRB->isChecked();
+       oldL->setEnabled(!rb);
+       newL->setEnabled(!rb);
        rev1SB->setEnabled(!rb);
        rev2SB->setEnabled(!rb);
+       rev2SB->setEnabled(!rb);
        betweenrevRB->setChecked(!rb);
        revbackSB->setEnabled(rb);
 }
@@ -118,6 +138,21 @@ void GuiCompareHistory::slotCancel()
 }
 
 
+void GuiCompareHistory::slotButtonBox(QAbstractButton * button)
+{
+       switch (buttonBox->standardButton(button)) {
+       case QDialogButtonBox::Ok:
+               slotOK();
+               break;
+       case QDialogButtonBox::Cancel:
+               slotCancel();
+               break;
+       default:
+               break;
+       }
+}
+
+
 Dialog * createGuiCompareHistory(GuiView & lv) { return new GuiCompareHistory(lv); }