added the GUI for incremental backups (don't use it yet, it crashes)
This commit is contained in:
parent
2546341d70
commit
85d66b8c3a
13 changed files with 560 additions and 8 deletions
|
@ -43,6 +43,7 @@
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <XmlRpcValue.h>
|
#include <XmlRpcValue.h>
|
||||||
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
|
|
||||||
#include "LiveSupport/Core/Ptr.h"
|
#include "LiveSupport/Core/Ptr.h"
|
||||||
|
|
||||||
|
@ -55,6 +56,8 @@ namespace Storage {
|
||||||
namespace LiveSupport {
|
namespace LiveSupport {
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
|
using namespace boost::posix_time;
|
||||||
|
|
||||||
/* ================================================================ constants */
|
/* ================================================================ constants */
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,6 +140,16 @@ class SearchCriteria
|
||||||
*/
|
*/
|
||||||
SearchConditionListType searchConditions;
|
SearchConditionListType searchConditions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The mtime to use for "ls:mtime".
|
||||||
|
*/
|
||||||
|
Ptr<const ptime>::Ref mtimeValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The comparison operator to use for "ls:mtime".
|
||||||
|
*/
|
||||||
|
std::string mtimeComparisonOperator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The maximum number of conditions to be returned.
|
* The maximum number of conditions to be returned.
|
||||||
*/
|
*/
|
||||||
|
@ -252,6 +265,18 @@ class SearchCriteria
|
||||||
const std::string & value)
|
const std::string & value)
|
||||||
throw(std::invalid_argument);
|
throw(std::invalid_argument);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a search condition specifying the mtime (modified-at time).
|
||||||
|
*
|
||||||
|
* @param comparisonOperator one of "=", "partial", "prefix",
|
||||||
|
* "<", "<=", ">" or ">="
|
||||||
|
* @param value the value of the mtime to compare to
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
addMtimeCondition(const std::string & comparisonOperator,
|
||||||
|
Ptr<const ptime>::Ref value)
|
||||||
|
throw(std::invalid_argument);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a search condition.
|
* Add a search condition.
|
||||||
*
|
*
|
||||||
|
|
|
@ -162,7 +162,7 @@ class TimeConversion
|
||||||
* @return a struct tm, holding the same time.
|
* @return a struct tm, holding the same time.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
ptimeToTm(Ptr<ptime>::Ref convertFrom, struct tm & convertTo)
|
ptimeToTm(Ptr<const ptime>::Ref convertFrom, struct tm & convertTo)
|
||||||
throw ();
|
throw ();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -33,9 +33,11 @@
|
||||||
#include "configure.h"
|
#include "configure.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "LiveSupport/Core/TimeConversion.h"
|
||||||
#include "LiveSupport/Core/SearchCriteria.h"
|
#include "LiveSupport/Core/SearchCriteria.h"
|
||||||
|
|
||||||
using namespace LiveSupport::Core;
|
using namespace LiveSupport::Core;
|
||||||
|
using namespace boost::posix_time;
|
||||||
|
|
||||||
/* =================================================== local data structures */
|
/* =================================================== local data structures */
|
||||||
|
|
||||||
|
@ -86,6 +88,28 @@ SearchCriteria :: addCondition(const std::string & key,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Add a search condition specifying the mtime (modified-at time).
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
SearchCriteria :: addMtimeCondition(const std::string & comparisonOperator,
|
||||||
|
Ptr<const ptime>::Ref value)
|
||||||
|
throw(std::invalid_argument)
|
||||||
|
{
|
||||||
|
std::string lowerCaseOp = lowerCase(comparisonOperator);
|
||||||
|
|
||||||
|
if (lowerCaseOp == "="
|
||||||
|
|| lowerCaseOp == "partial" || lowerCaseOp == "prefix"
|
||||||
|
|| lowerCaseOp == "<" || lowerCaseOp == "<="
|
||||||
|
|| lowerCaseOp == ">" || lowerCaseOp == ">=") {
|
||||||
|
mtimeComparisonOperator = lowerCaseOp;
|
||||||
|
mtimeValue = value;
|
||||||
|
} else {
|
||||||
|
throw std::invalid_argument("bad comparison operator argument");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* Convert to an XmlRpc::XmlRpcValue.
|
* Convert to an XmlRpc::XmlRpcValue.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
@ -111,6 +135,19 @@ SearchCriteria :: operator XmlRpc::XmlRpcValue() const
|
||||||
condition["val"] = it->value;
|
condition["val"] = it->value;
|
||||||
conditionList[i] = condition;
|
conditionList[i] = condition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mtimeValue) {
|
||||||
|
int i = conditionList.size();
|
||||||
|
struct tm * mtimeStructTm;
|
||||||
|
TimeConversion::ptimeToTm(mtimeValue, *mtimeStructTm);
|
||||||
|
|
||||||
|
XmlRpc::XmlRpcValue condition;
|
||||||
|
condition["cat"] = "ls:mtime";
|
||||||
|
condition["op"] = mtimeComparisonOperator;
|
||||||
|
condition["val"] = XmlRpc::XmlRpcValue(mtimeStructTm);
|
||||||
|
conditionList[i] = condition;
|
||||||
|
}
|
||||||
|
|
||||||
returnValue["conditions"] = conditionList;
|
returnValue["conditions"] = conditionList;
|
||||||
|
|
||||||
if (limit) {
|
if (limit) {
|
||||||
|
@ -121,6 +158,7 @@ SearchCriteria :: operator XmlRpc::XmlRpcValue() const
|
||||||
returnValue["offset"] = offset;
|
returnValue["offset"] = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cerr << returnValue << std::endl;
|
||||||
return returnValue;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,8 @@ TimeConversion :: tmToPtime(const struct tm *time)
|
||||||
* Convert a boost::ptime to a struct tm
|
* Convert a boost::ptime to a struct tm
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
TimeConversion :: ptimeToTm(Ptr<ptime>::Ref convertFrom, struct tm & convertTo)
|
TimeConversion :: ptimeToTm(Ptr<const ptime>::Ref convertFrom,
|
||||||
|
struct tm & convertTo)
|
||||||
throw ()
|
throw ()
|
||||||
{
|
{
|
||||||
date date = convertFrom->date();
|
date date = convertFrom->date();
|
||||||
|
|
|
@ -147,7 +147,8 @@ WIDGETS_LIB_OBJS = ${TMP_DIR}/ImageButton.o \
|
||||||
${TMP_DIR}/Colors.o \
|
${TMP_DIR}/Colors.o \
|
||||||
${TMP_DIR}/DialogWindow.o \
|
${TMP_DIR}/DialogWindow.o \
|
||||||
${TMP_DIR}/ScrolledWindow.o \
|
${TMP_DIR}/ScrolledWindow.o \
|
||||||
${TMP_DIR}/ScrolledNotebook.o
|
${TMP_DIR}/ScrolledNotebook.o \
|
||||||
|
${TMP_DIR}/DateTimeChooserWindow.o
|
||||||
|
|
||||||
TEST_EXE_OBJS = ${TMP_DIR}/TestWindow.o \
|
TEST_EXE_OBJS = ${TMP_DIR}/TestWindow.o \
|
||||||
${TMP_DIR}/main.o
|
${TMP_DIR}/main.o
|
||||||
|
|
|
@ -0,0 +1,160 @@
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2004 Media Development Loan Fund
|
||||||
|
|
||||||
|
This file is part of the LiveSupport project.
|
||||||
|
http://livesupport.campware.org/
|
||||||
|
To report bugs, send an e-mail to bugs@campware.org
|
||||||
|
|
||||||
|
LiveSupport is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
LiveSupport is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with LiveSupport; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Author : $Author: fgerlits $
|
||||||
|
Version : $Revision$
|
||||||
|
Location : $URL: svn+ssh://fgerlits@code.campware.org/home/svn/repo/livesupport/trunk/livesupport/src/modules/widgets/include/LiveSupport/Widgets/DateTimeChooserWindow.h $
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------*/
|
||||||
|
#ifndef DateTimeChooserWindow_h
|
||||||
|
#define DateTimeChooserWindow_h
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error This is a C++ include file
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* ============================================================ include files */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "configure.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <gtkmm/box.h>
|
||||||
|
#include <gtkmm/label.h>
|
||||||
|
#include <gtkmm/calendar.h>
|
||||||
|
#include <gtkmm/main.h>
|
||||||
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
|
|
||||||
|
#include "LiveSupport/Core/Ptr.h"
|
||||||
|
#include "LiveSupport/Core/LocalizedObject.h"
|
||||||
|
#include "LiveSupport/Widgets/EntryBin.h"
|
||||||
|
|
||||||
|
#include "LiveSupport/Widgets/WhiteWindow.h"
|
||||||
|
|
||||||
|
namespace LiveSupport {
|
||||||
|
namespace Widgets {
|
||||||
|
|
||||||
|
using namespace LiveSupport::Core;
|
||||||
|
using namespace boost::posix_time;
|
||||||
|
|
||||||
|
/* ================================================================ constants */
|
||||||
|
|
||||||
|
|
||||||
|
/* =================================================================== macros */
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================== data types */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A dialog window for choosing a date/time.
|
||||||
|
*
|
||||||
|
* The constructor is called with a resource bundle. The resource bundle
|
||||||
|
* is expected to contain keys named cancelButtonLabel, okButtonLabel,
|
||||||
|
* hourLabel and minuteLabel.
|
||||||
|
*
|
||||||
|
* The return value of the run() method is a boost::posix_time::ptime value.
|
||||||
|
* The DateTimeChooserWindow object is not destroyed when it returns from
|
||||||
|
* run(); it is the responsibility of the caller to delete it (or it can be
|
||||||
|
* reused a few times first).
|
||||||
|
*
|
||||||
|
* @author $Author: fgerlits $
|
||||||
|
* @version $Revision$
|
||||||
|
*/
|
||||||
|
class DateTimeChooserWindow : public WhiteWindow,
|
||||||
|
public LocalizedObject
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* The calendar where the date is chosen.
|
||||||
|
*/
|
||||||
|
Gtk::Calendar * calendar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry field for the hour.
|
||||||
|
*/
|
||||||
|
EntryBin * hourEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry field for the minute.
|
||||||
|
*/
|
||||||
|
EntryBin * minuteEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The return value; set to 0 if the user pressed Cancel.
|
||||||
|
*/
|
||||||
|
Ptr<ptime>::Ref chosenDateTime;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* The event handler for the Cancel button clicked.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
onCancelButtonClicked(void) throw ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event handler for the OK button clicked.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
onOkButtonClicked(void) throw ();
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param bundle a resource bundle containing the localized
|
||||||
|
* button labels
|
||||||
|
*/
|
||||||
|
DateTimeChooserWindow(Ptr<ResourceBundle>::Ref bundle) throw ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A virtual destructor, as this class has virtual functions.
|
||||||
|
*/
|
||||||
|
virtual
|
||||||
|
~DateTimeChooserWindow(void) throw ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the window and return the date/time selected.
|
||||||
|
* The returned value may be a 0 pointer (if the user pressed Cancel),
|
||||||
|
* and it may be not_a_date_time, if the user's selection is invalid.
|
||||||
|
*/
|
||||||
|
Ptr<const ptime>::Ref
|
||||||
|
run(void) throw ();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ================================================= external data structures */
|
||||||
|
|
||||||
|
|
||||||
|
/* ====================================================== function prototypes */
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace Widgets
|
||||||
|
} // namespace LiveSupport
|
||||||
|
|
||||||
|
#endif // DateTimeChooserWindow_h
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
#include "LiveSupport/Widgets/EntryBin.h"
|
#include "LiveSupport/Widgets/EntryBin.h"
|
||||||
#include "LiveSupport/Widgets/DialogWindow.h"
|
#include "LiveSupport/Widgets/DialogWindow.h"
|
||||||
#include "LiveSupport/Widgets/ZebraTreeView.h"
|
#include "LiveSupport/Widgets/ZebraTreeView.h"
|
||||||
|
#include "LiveSupport/Widgets/DateTimeChooserWindow.h"
|
||||||
|
|
||||||
|
|
||||||
namespace LiveSupport {
|
namespace LiveSupport {
|
||||||
|
@ -374,6 +375,19 @@ class WidgetFactory :
|
||||||
Ptr<ResourceBundle>::Ref bundle,
|
Ptr<ResourceBundle>::Ref bundle,
|
||||||
int buttons = DialogWindow::okButton)
|
int buttons = DialogWindow::okButton)
|
||||||
throw ();
|
throw ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a DateTimeChooserWindow.
|
||||||
|
* It lets the user select a date/time.
|
||||||
|
* It is the reponsibility of the caller to dispose of the created
|
||||||
|
* object properly.
|
||||||
|
*
|
||||||
|
* @param bundle localization for the button(s).
|
||||||
|
* @return the DateTimeChooserWindow object.
|
||||||
|
*/
|
||||||
|
DateTimeChooserWindow *
|
||||||
|
createDateTimeChooserWindow(Ptr<ResourceBundle>::Ref bundle)
|
||||||
|
throw ();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
175
livesupport/src/modules/widgets/src/DateTimeChooserWindow.cxx
Normal file
175
livesupport/src/modules/widgets/src/DateTimeChooserWindow.cxx
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2004 Media Development Loan Fund
|
||||||
|
|
||||||
|
This file is part of the LiveSupport project.
|
||||||
|
http://livesupport.campware.org/
|
||||||
|
To report bugs, send an e-mail to bugs@campware.org
|
||||||
|
|
||||||
|
LiveSupport is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
LiveSupport is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with LiveSupport; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Author : $Author: fgerlits $
|
||||||
|
Version : $Revision$
|
||||||
|
Location : $URL: svn+ssh://fgerlits@code.campware.org/home/svn/repo/livesupport/trunk/livesupport/src/modules/widgets/src/DateTimeChooserWindow.cxx $
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* ============================================================ include files */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "configure.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "LiveSupport/Widgets/WidgetFactory.h"
|
||||||
|
#include "LiveSupport/Widgets/Colors.h"
|
||||||
|
#include "LiveSupport/Widgets/Button.h"
|
||||||
|
|
||||||
|
#include "LiveSupport/Widgets/DateTimeChooserWindow.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace LiveSupport::Widgets;
|
||||||
|
|
||||||
|
/* =================================================== local data structures */
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================ local constants & macros */
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================== local function prototypes */
|
||||||
|
|
||||||
|
|
||||||
|
/* ============================================================= module code */
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Constructor.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
DateTimeChooserWindow :: DateTimeChooserWindow(Ptr<ResourceBundle>::Ref bundle)
|
||||||
|
throw ()
|
||||||
|
: WhiteWindow("",
|
||||||
|
Colors::White,
|
||||||
|
WidgetFactory::getInstance()->getWhiteWindowCorners(),
|
||||||
|
WhiteWindow::isModal | WhiteWindow::isBornHidden),
|
||||||
|
LocalizedObject(bundle)
|
||||||
|
{
|
||||||
|
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();
|
||||||
|
|
||||||
|
Gtk::Label * hourLabel;
|
||||||
|
Gtk::Label * minuteLabel;
|
||||||
|
Button * cancelButton;
|
||||||
|
Button * okButton;
|
||||||
|
|
||||||
|
try {
|
||||||
|
set_title(*getResourceUstring("windowTitle"));
|
||||||
|
hourLabel = Gtk::manage(new Gtk::Label(
|
||||||
|
*getResourceUstring("hourLabel")));
|
||||||
|
minuteLabel = Gtk::manage(new Gtk::Label(
|
||||||
|
*getResourceUstring("minuteLabel")));
|
||||||
|
cancelButton = Gtk::manage(wf->createButton(
|
||||||
|
*getResourceUstring("cancelButtonLabel")));
|
||||||
|
okButton = Gtk::manage(wf->createButton(
|
||||||
|
*getResourceUstring("okButtonLabel")));
|
||||||
|
} catch (std::invalid_argument &e) {
|
||||||
|
std::cerr << e.what() << std::endl;
|
||||||
|
std::exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
calendar = Gtk::manage(new Gtk::Calendar());
|
||||||
|
hourEntry = Gtk::manage(wf->createEntryBin());
|
||||||
|
minuteEntry = Gtk::manage(wf->createEntryBin());
|
||||||
|
|
||||||
|
cancelButton->signal_clicked().connect(sigc::mem_fun(*this,
|
||||||
|
&DateTimeChooserWindow::onCancelButtonClicked));
|
||||||
|
okButton->signal_clicked().connect(sigc::mem_fun(*this,
|
||||||
|
&DateTimeChooserWindow::onOkButtonClicked));
|
||||||
|
|
||||||
|
Gtk::ButtonBox * buttonBox = Gtk::manage(new Gtk::HButtonBox(
|
||||||
|
Gtk::BUTTONBOX_END, 5));
|
||||||
|
buttonBox->pack_start(*cancelButton);
|
||||||
|
buttonBox->pack_start(*okButton);
|
||||||
|
|
||||||
|
Gtk::Box * entryBox = Gtk::manage(new Gtk::HBox());
|
||||||
|
entryBox->pack_start(*hourLabel, Gtk::PACK_SHRINK, 5);
|
||||||
|
entryBox->pack_start(*hourEntry, Gtk::PACK_EXPAND_WIDGET, 5);
|
||||||
|
entryBox->pack_start(*minuteLabel, Gtk::PACK_SHRINK, 5);
|
||||||
|
entryBox->pack_start(*minuteEntry, Gtk::PACK_EXPAND_WIDGET, 5);
|
||||||
|
|
||||||
|
Gtk::Box * layout = Gtk::manage(new Gtk::VBox());
|
||||||
|
layout->pack_start(*calendar, Gtk::PACK_EXPAND_WIDGET, 5);
|
||||||
|
layout->pack_start(*entryBox, Gtk::PACK_SHRINK, 5);
|
||||||
|
layout->pack_start(*buttonBox, Gtk::PACK_SHRINK, 5);
|
||||||
|
|
||||||
|
set_default_size(200, 300);
|
||||||
|
|
||||||
|
add(*layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Event handler for the Cancel button clicked
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
DateTimeChooserWindow :: onCancelButtonClicked(void) throw ()
|
||||||
|
{
|
||||||
|
chosenDateTime.reset();
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Event handler for the OK button clicked.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
DateTimeChooserWindow :: onOkButtonClicked(void) throw ()
|
||||||
|
{
|
||||||
|
std::stringstream dateTime;
|
||||||
|
|
||||||
|
guint year;
|
||||||
|
guint month;
|
||||||
|
guint day;
|
||||||
|
calendar->get_date(year, month, day);
|
||||||
|
dateTime << std::setfill('0') << std::setw(4)
|
||||||
|
<< year
|
||||||
|
<< std::setfill('0') << std::setw(2)
|
||||||
|
<< month + 1
|
||||||
|
<< std::setfill('0') << std::setw(2)
|
||||||
|
<< day;
|
||||||
|
|
||||||
|
Glib::ustring hour = hourEntry ->get_text().substr(0,2);
|
||||||
|
Glib::ustring minute = minuteEntry->get_text().substr(0,2);
|
||||||
|
dateTime << "T"
|
||||||
|
<< std::setfill('0') << std::setw(2)
|
||||||
|
<< hour
|
||||||
|
<< std::setfill('0') << std::setw(2)
|
||||||
|
<< minute
|
||||||
|
<< "00";
|
||||||
|
|
||||||
|
chosenDateTime.reset(new ptime(from_iso_string(dateTime.str())));
|
||||||
|
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Show the window and return the button clicked.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
Ptr<const ptime>::Ref
|
||||||
|
DateTimeChooserWindow :: run(void) throw ()
|
||||||
|
{
|
||||||
|
show_all();
|
||||||
|
Gtk::Main::run(*this);
|
||||||
|
return chosenDateTime;
|
||||||
|
}
|
||||||
|
|
|
@ -673,3 +673,14 @@ WidgetFactory :: createDialogWindow(Ptr<Glib::ustring>::Ref message,
|
||||||
return new DialogWindow(message, buttons, bundle);
|
return new DialogWindow(message, buttons, bundle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Create a date/time chooser window.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
DateTimeChooserWindow *
|
||||||
|
WidgetFactory :: createDateTimeChooserWindow(Ptr<ResourceBundle>::Ref bundle)
|
||||||
|
throw ()
|
||||||
|
{
|
||||||
|
return new DateTimeChooserWindow(bundle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,13 +39,13 @@
|
||||||
#include <gtkmm/stock.h>
|
#include <gtkmm/stock.h>
|
||||||
#include <gtkmm/paned.h>
|
#include <gtkmm/paned.h>
|
||||||
|
|
||||||
#include "LiveSupport/Widgets/ScrolledWindow.h"
|
|
||||||
#include "BackupView.h"
|
#include "BackupView.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace LiveSupport::Core;
|
using namespace LiveSupport::Core;
|
||||||
using namespace LiveSupport::Widgets;
|
using namespace LiveSupport::Widgets;
|
||||||
using namespace LiveSupport::GLiveSupport;
|
using namespace LiveSupport::GLiveSupport;
|
||||||
|
using namespace boost::posix_time;
|
||||||
|
|
||||||
/* =================================================== local data structures */
|
/* =================================================== local data structures */
|
||||||
|
|
||||||
|
@ -67,26 +67,54 @@ BackupView :: BackupView (Ptr<GLiveSupport>::Ref gLiveSupport,
|
||||||
: LocalizedObject(bundle),
|
: LocalizedObject(bundle),
|
||||||
gLiveSupport(gLiveSupport)
|
gLiveSupport(gLiveSupport)
|
||||||
{
|
{
|
||||||
|
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();
|
||||||
|
|
||||||
Gtk::Label * backupTitleLabel;
|
Gtk::Label * backupTitleLabel;
|
||||||
|
Gtk::Label * mtimeLabel;
|
||||||
|
Gtk::Button * chooseTimeButton;
|
||||||
|
Gtk::Button * resetTimeButton;
|
||||||
try {
|
try {
|
||||||
backupTitleLabel = Gtk::manage(new Gtk::Label(
|
backupTitleLabel = Gtk::manage(new Gtk::Label(
|
||||||
*getResourceUstring("backupTitleLabel")));
|
*getResourceUstring("backupTitleLabel")));
|
||||||
|
mtimeLabel = Gtk::manage(new Gtk::Label(
|
||||||
|
*getResourceUstring("mtimeTextLabel")));
|
||||||
|
chooseTimeButton = Gtk::manage(wf->createButton(
|
||||||
|
*getResourceUstring("chooseTimeButtonLabel")));
|
||||||
|
resetTimeButton = Gtk::manage(wf->createButton(
|
||||||
|
*getResourceUstring("resetTimeButtonLabel")));
|
||||||
} catch (std::invalid_argument &e) {
|
} catch (std::invalid_argument &e) {
|
||||||
std::cerr << e.what() << std::endl;
|
std::cerr << e.what() << std::endl;
|
||||||
std::exit(1);
|
std::exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();
|
chooseTimeButton->signal_clicked().connect(sigc::mem_fun(
|
||||||
|
*this, &BackupView::onChooseTimeButtonClicked ));
|
||||||
|
resetTimeButton->signal_clicked().connect(sigc::mem_fun(
|
||||||
|
*this, &BackupView::onResetTimeButtonClicked ));
|
||||||
|
|
||||||
backupTitleEntry = Gtk::manage(wf->createEntryBin());
|
backupTitleEntry = Gtk::manage(wf->createEntryBin());
|
||||||
|
mtimeEntry = Gtk::manage(wf->createEntryBin());
|
||||||
|
|
||||||
|
mtimeEntry->getEntry()->set_editable(false);
|
||||||
|
mtimeEntry->getEntry()->set_alignment(0.5);
|
||||||
|
mtimeEntry->getEntry()->set_width_chars(20);
|
||||||
|
writeMtimeEntry();
|
||||||
|
|
||||||
Gtk::Box * backupTitleBox = Gtk::manage(new Gtk::HBox);
|
Gtk::Box * backupTitleBox = Gtk::manage(new Gtk::HBox);
|
||||||
backupTitleBox->pack_start(*backupTitleLabel, Gtk::PACK_SHRINK, 5);
|
backupTitleBox->pack_start(*backupTitleLabel, Gtk::PACK_SHRINK, 5);
|
||||||
backupTitleBox->pack_start(*backupTitleEntry, Gtk::PACK_SHRINK, 5);
|
backupTitleBox->pack_start(*backupTitleEntry, Gtk::PACK_SHRINK, 5);
|
||||||
|
|
||||||
|
Gtk::Box * mtimeBox = Gtk::manage(new Gtk::HBox);
|
||||||
|
mtimeBox->pack_start(*mtimeLabel, Gtk::PACK_SHRINK, 5);
|
||||||
|
mtimeBox->pack_start(*mtimeEntry, Gtk::PACK_SHRINK, 5);
|
||||||
|
mtimeBox->pack_start(*chooseTimeButton, Gtk::PACK_SHRINK, 5);
|
||||||
|
mtimeBox->pack_start(*resetTimeButton, Gtk::PACK_SHRINK, 5);
|
||||||
|
|
||||||
Gtk::Box * criteriaView = constructCriteriaView();
|
Gtk::Box * criteriaView = constructCriteriaView();
|
||||||
|
|
||||||
Gtk::Box * topPane = Gtk::manage(new Gtk::VBox);
|
Gtk::Box * topPane = Gtk::manage(new Gtk::VBox);
|
||||||
topPane->pack_start(*backupTitleBox, Gtk::PACK_SHRINK, 5);
|
topPane->pack_start(*backupTitleBox, Gtk::PACK_SHRINK, 5);
|
||||||
|
topPane->pack_start(*mtimeBox, Gtk::PACK_SHRINK, 5);
|
||||||
topPane->pack_start(*criteriaView, Gtk::PACK_EXPAND_WIDGET, 5);
|
topPane->pack_start(*criteriaView, Gtk::PACK_EXPAND_WIDGET, 5);
|
||||||
|
|
||||||
Gtk::Box * bottomPane = constructBackupListView();
|
Gtk::Box * bottomPane = constructBackupListView();
|
||||||
|
@ -96,6 +124,9 @@ BackupView :: BackupView (Ptr<GLiveSupport>::Ref gLiveSupport,
|
||||||
twoPanedView->pack2(*bottomPane, Gtk::PACK_EXPAND_WIDGET, 5);
|
twoPanedView->pack2(*bottomPane, Gtk::PACK_EXPAND_WIDGET, 5);
|
||||||
|
|
||||||
add(*twoPanedView);
|
add(*twoPanedView);
|
||||||
|
|
||||||
|
dateTimeChooserWindow.reset(wf->createDateTimeChooserWindow(
|
||||||
|
gLiveSupport->getBundle("dateTimeChooserWindow") ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -185,6 +216,32 @@ BackupView :: constructBackupListView(void) throw ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Event handler for the time chooser button being clicked.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
BackupView :: onChooseTimeButtonClicked(void) throw ()
|
||||||
|
{
|
||||||
|
Ptr<const ptime>::Ref userMtime = dateTimeChooserWindow->run();
|
||||||
|
|
||||||
|
if (userMtime && *userMtime != not_a_date_time) {
|
||||||
|
mtime = userMtime;
|
||||||
|
writeMtimeEntry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Event handler for the "reset time" button being clicked.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
BackupView :: onResetTimeButtonClicked(void) throw ()
|
||||||
|
{
|
||||||
|
mtime.reset();
|
||||||
|
writeMtimeEntry();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* Initiate the creation of a new backup.
|
* Initiate the creation of a new backup.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
@ -194,6 +251,10 @@ BackupView :: onCreateBackup(void) throw ()
|
||||||
Ptr<Glib::ustring>::Ref title = readTitle();
|
Ptr<Glib::ustring>::Ref title = readTitle();
|
||||||
Ptr<SearchCriteria>::Ref criteria = criteriaEntry->getSearchCriteria();
|
Ptr<SearchCriteria>::Ref criteria = criteriaEntry->getSearchCriteria();
|
||||||
|
|
||||||
|
if (mtime) {
|
||||||
|
criteria->addMtimeCondition(">=", mtime);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
backupList->add(title, criteria);
|
backupList->add(title, criteria);
|
||||||
|
|
||||||
|
@ -336,3 +397,17 @@ BackupView :: readTitle(void) throw ()
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Format and write the contents of mtime into the mtimeEntry.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
BackupView :: writeMtimeEntry(void) throw ()
|
||||||
|
{
|
||||||
|
if (mtime) {
|
||||||
|
mtimeEntry->set_text(to_simple_string(*mtime));
|
||||||
|
} else {
|
||||||
|
mtimeEntry->set_text("-");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,11 +41,14 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gtkmm/box.h>
|
#include <gtkmm/box.h>
|
||||||
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
|
|
||||||
#include "LiveSupport/Core/Ptr.h"
|
#include "LiveSupport/Core/Ptr.h"
|
||||||
#include "LiveSupport/Core/LocalizedObject.h"
|
#include "LiveSupport/Core/LocalizedObject.h"
|
||||||
|
#include "LiveSupport/Core/TimeConversion.h"
|
||||||
#include "LiveSupport/Widgets/Button.h"
|
#include "LiveSupport/Widgets/Button.h"
|
||||||
#include "LiveSupport/Widgets/ScrolledWindow.h"
|
#include "LiveSupport/Widgets/ScrolledWindow.h"
|
||||||
|
#include "LiveSupport/Widgets/DateTimeChooserWindow.h"
|
||||||
#include "AdvancedSearchEntry.h"
|
#include "AdvancedSearchEntry.h"
|
||||||
#include "BackupList.h"
|
#include "BackupList.h"
|
||||||
#include "GLiveSupport.h"
|
#include "GLiveSupport.h"
|
||||||
|
@ -55,6 +58,7 @@ namespace GLiveSupport {
|
||||||
|
|
||||||
using namespace LiveSupport::Core;
|
using namespace LiveSupport::Core;
|
||||||
using namespace LiveSupport::Widgets;
|
using namespace LiveSupport::Widgets;
|
||||||
|
using namespace boost::posix_time;
|
||||||
|
|
||||||
/* ================================================================ constants */
|
/* ================================================================ constants */
|
||||||
|
|
||||||
|
@ -94,6 +98,21 @@ class BackupView : public Gtk::VBox,
|
||||||
*/
|
*/
|
||||||
EntryBin * backupTitleEntry;
|
EntryBin * backupTitleEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The "modified since" time for the backup.
|
||||||
|
*/
|
||||||
|
Ptr<const ptime>::Ref mtime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The entry field holding the "modified since" time for the backup.
|
||||||
|
*/
|
||||||
|
EntryBin * mtimeEntry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The window for entering the "modified since" time.
|
||||||
|
*/
|
||||||
|
Ptr<DateTimeChooserWindow>::Ref dateTimeChooserWindow;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The object for entering the backup criteria.
|
* The object for entering the backup criteria.
|
||||||
*/
|
*/
|
||||||
|
@ -140,6 +159,12 @@ class BackupView : public Gtk::VBox,
|
||||||
Ptr<Glib::ustring>::Ref
|
Ptr<Glib::ustring>::Ref
|
||||||
readTitle(void) throw ();
|
readTitle(void) throw ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format and write the contents of mtime into the mtimeEntry.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
writeMtimeEntry(void) throw ();
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
@ -147,6 +172,18 @@ class BackupView : public Gtk::VBox,
|
||||||
*/
|
*/
|
||||||
Ptr<GLiveSupport>::Ref gLiveSupport;
|
Ptr<GLiveSupport>::Ref gLiveSupport;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event handler for the time chooser button being clicked.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
onChooseTimeButtonClicked(void) throw ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event handler for the "reset time" button being clicked.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
onResetTimeButtonClicked(void) throw ();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initiate the creation of a new backup.
|
* Initiate the creation of a new backup.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -163,7 +163,7 @@ OptionsWindow :: OptionsWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
|
||||||
|
|
||||||
// show everything
|
// show everything
|
||||||
set_name(windowName);
|
set_name(windowName);
|
||||||
set_default_size(700, 400);
|
set_default_size(700, 450);
|
||||||
set_modal(false);
|
set_modal(false);
|
||||||
property_window_position().set_value(Gtk::WIN_POS_NONE);
|
property_window_position().set_value(Gtk::WIN_POS_NONE);
|
||||||
|
|
||||||
|
|
|
@ -280,6 +280,10 @@ root:table
|
||||||
dateColumnLabel:string { "Date" }
|
dateColumnLabel:string { "Date" }
|
||||||
statusColumnLabel:string { "Status" }
|
statusColumnLabel:string { "Status" }
|
||||||
|
|
||||||
|
mtimeTextLabel:string { "Modified since:" }
|
||||||
|
chooseTimeButtonLabel:string { "Choose time" }
|
||||||
|
resetTimeButtonLabel:string { "Reset" }
|
||||||
|
|
||||||
backupButtonLabel:string { "Backup" }
|
backupButtonLabel:string { "Backup" }
|
||||||
deleteButtonLabel:string { "Delete" }
|
deleteButtonLabel:string { "Delete" }
|
||||||
saveButtonLabel:string { "Save" }
|
saveButtonLabel:string { "Save" }
|
||||||
|
@ -291,6 +295,17 @@ root:table
|
||||||
backupErrorMsg:string { "Backup error: " }
|
backupErrorMsg:string { "Backup error: " }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dateTimeChooserWindow:table
|
||||||
|
{
|
||||||
|
windowTitle:string { "Select the date and time" }
|
||||||
|
|
||||||
|
cancelButtonLabel:string { "Cancel" }
|
||||||
|
okButtonLabel:string { "OK" }
|
||||||
|
|
||||||
|
hourLabel:string { "hour:" }
|
||||||
|
minuteLabel:string { "minute:" }
|
||||||
|
}
|
||||||
|
|
||||||
metadataTypes:table
|
metadataTypes:table
|
||||||
{
|
{
|
||||||
title:string { "Title" }
|
title:string { "Title" }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue