]> 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 711cd51dcbaea2f21ec40dd70a909c03f32285ba..b4228a5f53cc97597f6064faca4ff3b0bdea9130 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <config.h>
 #include <support/debug.h>
+#include <limits>
 
 #include "GuiCompareHistory.h"
 
@@ -22,7 +23,8 @@
 #include "support/convert.h"
 #include "support/lstrings.h"
 
-
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 using namespace std;
 using namespace lyx::support;
@@ -38,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()));
@@ -48,16 +50,27 @@ GuiCompareHistory::GuiCompareHistory(GuiView & lv)
 bool GuiCompareHistory::initialiseParams(std::string const &)
 {
        string revstring = lyxview().currentBufferView()->buffer().lyxvc().revisionInfo(LyXVC::File);
-       int rev=0;
+       int rev = 0;
 
        string tmp;
-       // RCS case
-       if (!isStrInt(revstring))
-               revstring = rsplit(revstring, tmp , '.' );
-       if (isStrInt(revstring))
-               rev = convert<int>(revstring);
-
-       okPB->setEnabled(rev);
+       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-1);
@@ -125,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); }