aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2001-03-05 10:12:26 +0000
committerFritz Elfert <felfert@to.com>2001-03-05 10:12:26 +0000
commit3c5877e3f7fcd101a9868e6da86f12b92b6d4896 (patch)
treefb8ca31738d782bb0d11e55dc2e4794db2d17ae3
parent3ebac278eff9f4ba457a5f1ccbce9857ea00dba5 (diff)
downloadplptools-3c5877e3f7fcd101a9868e6da86f12b92b6d4896.tar.gz
plptools-3c5877e3f7fcd101a9868e6da86f12b92b6d4896.tar.bz2
plptools-3c5877e3f7fcd101a9868e6da86f12b92b6d4896.zip
Fixed some 64bit related stuff in psitime and plpdirent.
More work on restore in kpsion.
-rw-r--r--Makefile.am2
-rw-r--r--README19
-rw-r--r--kde2/kpsion/Makefile.am3
-rw-r--r--kde2/kpsion/kpsion.cpp866
-rw-r--r--kde2/kpsion/kpsion.h140
-rw-r--r--kde2/kpsion/main.cpp121
-rw-r--r--kde2/kpsion/statusbarprogress.cpp438
-rw-r--r--kde2/kpsion/statusbarprogress.h169
-rw-r--r--kde2/po/de/kpsion.po392
-rw-r--r--kde2/po/de/libplpprops.po59
-rw-r--r--kde2/po/kpsion.pot365
-rw-r--r--lib/plpdirent.cc28
-rw-r--r--lib/plpdirent.h22
-rw-r--r--lib/psitime.cc14
-rw-r--r--lib/psitime.h19
15 files changed, 2137 insertions, 520 deletions
diff --git a/Makefile.am b/Makefile.am
index 1fc21cc..4a6fa57 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -30,7 +30,7 @@ dist-hook:
$(MAKE) -C $(distdir)/kde2 -f Makefile.am am_edit
kdoc:
- kdoc -d $(TMPDEST)doc/api -n libplp $(TMPDEST)lib/*.h
+ kdoc -d $(TMPDEST)doc/api -n libplp --strip-h-path $(TMPDEST)lib/*.h
specfile:
sed -e "s/_VERSION_/$(VERSION)/" < $(TMPDEST)etc/plptools.spec.in \
diff --git a/README b/README
index ff2b700..883bb40 100644
--- a/README
+++ b/README
@@ -87,16 +87,15 @@
--enable-kde
Enable build of KDE related stuff. This needs installed
- KDE 2.0.1 headers/development-libraries as well as QT
+ KDE 2.1 headers/development-libraries as well as QT 2.2.4
headers/development-libraries.
- You will get 3 programs and a shared and static library.
+ You will get 3 programs and a shared and static library (in
+ case you enabled KDE: 4 Programs 4 shared libraries).
By default, the install-prefix is /usr/local, so you probably
should add /usr/local/lib to your /etc/ld.so.conf and then run
ldconfig after installation. Another option is to run configure
with the option --prefix=/usr
- When enabling KDE stuff, you will get an additional library
- kio_plp.so, which installs into KDE's library dir.
Please read the man pages ncpd(8) plpftp(1) and plpnfsd(8)! The
information there is more up-to-date.
@@ -136,8 +135,16 @@
drives. You now can copy, move, rename, open ... all those
operations you are used to. Any KDE application which supports
URLs should be able to deal with the files on the Psion.
- Currently there are no mime-types for Psion-Files but i soon will
- add these.
+ If you have the toplevel directory displayed in Konqueror, the
+ Property dialog for the drives (right-click on an icon of a
+ drive, Properties) comes up in a modified fashion which allows
+ you to see the drive usage as well as triggering backup, restore
+ and format. The toplevel Properties (right-click on the view's
+ background, Properties) brings up a Dialog which displays machine-
+ related information. (Same info like the "machinfo" command in
+ plpftp. Currently there are no mime-types for Psion-Files but i
+ soon will add these. Backup, restore and format is done by a separate
+ standalone program "KPsion".
Have fun.
-Fritz
diff --git a/kde2/kpsion/Makefile.am b/kde2/kpsion/Makefile.am
index 6cbc731..d0b27f4 100644
--- a/kde2/kpsion/Makefile.am
+++ b/kde2/kpsion/Makefile.am
@@ -12,7 +12,8 @@ lib_LTLIBRARIES = libkpsion.la
bin_PROGRAMS = kpsion
libkpsion_la_LDFLAGS = $(LIBDEBUG) $(all_libraries) -module -version-info $(LIBVERSION)
-libkpsion_la_SOURCES = kpsion.cpp setupdialog.cpp wizards.cpp
+libkpsion_la_SOURCES = kpsion.cpp setupdialog.cpp wizards.cpp \
+ statusbarprogress.cpp
libkpsion_la_LIBADD = -L$(top_srcdir)/lib -lplp $(LIB_KFILE)
kpsion_SOURCES = main.cpp
diff --git a/kde2/kpsion/kpsion.cpp b/kde2/kpsion/kpsion.cpp
index 808ed1a..2e605d9 100644
--- a/kde2/kpsion/kpsion.cpp
+++ b/kde2/kpsion/kpsion.cpp
@@ -41,16 +41,15 @@
#include <qtimer.h>
#include <qlayout.h>
#include <qiodevice.h>
+#include <qheader.h>
#include <qdir.h>
+#include <qmessagebox.h>
#include <ppsocket.h>
#include <rfsvfactory.h>
#include <rpcsfactory.h>
#include <bufferarray.h>
-#include <iomanip>
-#include <strstream>
-
// internal use for developing offline without
// having a Psion connected.
// !!!!! set to 0 for production code !!!!!
@@ -58,37 +57,88 @@
#define STID_CONNECTION 1
+class KPsionCheckListItem::KPsionCheckListItemMetaData {
+ friend KPsionCheckListItem;
+
+private:
+ KPsionCheckListItemMetaData();
+ ~KPsionCheckListItemMetaData() { };
+
+ bool parentIsKPsionCheckListItem;
+ bool dontPropagate;
+ int backupType;
+ int size;
+ time_t when;
+ u_int32_t timeHi;
+ u_int32_t timeLo;
+ u_int32_t attr;
+ QString name;
+};
+
+KPsionCheckListItem::KPsionCheckListItemMetaData::KPsionCheckListItemMetaData() {
+ when = 0;
+ size = 0;
+ timeHi = 0;
+ timeLo = 0;
+ attr = 0;
+ name = QString::null;
+ backupType = KPsionBackupListView::UNKNOWN;
+}
+
+KPsionCheckListItem::~KPsionCheckListItem() {
+ delete meta;
+}
+
+KPsionCheckListItem *KPsionCheckListItem::
+firstChild() const {
+ return (KPsionCheckListItem *)QListViewItem::firstChild();
+}
+
+KPsionCheckListItem *KPsionCheckListItem::
+nextSibling() const {
+ return (KPsionCheckListItem *)QListViewItem::nextSibling();
+}
+
void KPsionCheckListItem::
init(bool myparent) {
setSelectable(false);
- dontPropagate = false;
- parentIsKPsionCheckListItem = myparent;
+ meta = new KPsionCheckListItemMetaData();
+ meta->dontPropagate = false;
+ meta->parentIsKPsionCheckListItem = myparent;
}
void KPsionCheckListItem::
-setMetaData(int bType, time_t bWhen) {
- backupType = bType;
- when = bWhen;
+setMetaData(int type, time_t when, QString name, int size,
+ u_int32_t tHi, u_int32_t tLo, u_int32_t attr) {
+ meta->backupType = type;
+ meta->when = when;
+ meta->name = name;
+ meta->size = size;
+ meta->timeHi = tHi;
+ meta->timeLo = tLo;
+ meta->attr = attr;
}
void KPsionCheckListItem::
stateChange(bool state) {
QCheckListItem::stateChange(state);
- if (dontPropagate)
+ if (meta->dontPropagate)
return;
- if (parentIsKPsionCheckListItem)
- ((KPsionCheckListItem *)parent())->propagateUp(state);
+ if (meta->parentIsKPsionCheckListItem)
+ ((KPsionCheckListItem *)QListViewItem::parent())->propagateUp(state);
+ else
+ emit rootToggled();
propagateDown(state);
}
void KPsionCheckListItem::
propagateDown(bool state) {
setOn(state);
- KPsionCheckListItem *child = (KPsionCheckListItem *)firstChild();
+ KPsionCheckListItem *child = firstChild();
while (child) {
child->propagateDown(state);
- child = (KPsionCheckListItem *)child->nextSibling();
+ child = child->nextSibling();
}
}
@@ -96,15 +146,15 @@ void KPsionCheckListItem::
propagateUp(bool state) {
bool deactivateThis = false;
- KPsionCheckListItem *child = (KPsionCheckListItem *)firstChild();
+ KPsionCheckListItem *child = firstChild();
while (child) {
if ((child->isOn() != state) || (!child->isEnabled())) {
deactivateThis = true;
break;
}
- child = (KPsionCheckListItem *)child->nextSibling();
+ child = child->nextSibling();
}
- dontPropagate = true;
+ meta->dontPropagate = true;
if (deactivateThis) {
setOn(true);
setEnabled(false);
@@ -116,9 +166,68 @@ propagateUp(bool state) {
// enabled/disabled without activating.
// -> force it.
listView()->repaintItem(this);
- dontPropagate = false;
- if (parentIsKPsionCheckListItem)
- ((KPsionCheckListItem *)parent())->propagateUp(state);
+ meta->dontPropagate = false;
+ if (meta->parentIsKPsionCheckListItem)
+ ((KPsionCheckListItem *)QListViewItem::parent())->propagateUp(state);
+ else
+ emit rootToggled();
+}
+
+QString KPsionCheckListItem::
+key(int column, bool ascending) const {
+ if (meta->when) {
+ QString tmp;
+ tmp.sprintf("%08d", meta->when);
+ return tmp;
+ }
+ return text();
+}
+
+QString KPsionCheckListItem::
+psionname() {
+ if (meta->parentIsKPsionCheckListItem)
+ return meta->name;
+ else
+ return QString::null;
+}
+
+QString KPsionCheckListItem::
+unixname() {
+ if (meta->parentIsKPsionCheckListItem)
+ return KPsionMainWindow::psion2unix(meta->name);
+ else
+ return QString::null;
+}
+
+QString KPsionCheckListItem::
+tarname() {
+ if (meta->parentIsKPsionCheckListItem)
+ return ((KPsionCheckListItem *)QListViewItem::parent())->tarname();
+ else
+ return meta->name;
+}
+
+int KPsionCheckListItem::
+backupType() {
+ if (meta->parentIsKPsionCheckListItem)
+ return ((KPsionCheckListItem *)QListViewItem::parent())->backupType();
+ else
+ return meta->backupType;
+}
+
+time_t KPsionCheckListItem::
+when() {
+ if (meta->parentIsKPsionCheckListItem)
+ return ((KPsionCheckListItem *)QListViewItem::parent())->when();
+ else
+ return meta->when;
+}
+
+PlpDirent KPsionCheckListItem::
+plpdirent() {
+ assert(meta->parentIsKPsionCheckListItem);
+ return PlpDirent(meta->size, meta->attr, meta->timeHi, meta->timeLo,
+ meta->name);
}
KPsionBackupListView::KPsionBackupListView(QWidget *parent, const char *name)
@@ -133,17 +242,25 @@ KPsionBackupListView::KPsionBackupListView(QWidget *parent, const char *name)
setRootIsDecorated(true);
}
+KPsionCheckListItem *KPsionBackupListView::
+firstChild() const {
+ return (KPsionCheckListItem *)QListView::firstChild();
+}
+
void KPsionBackupListView::
readBackups(QString uid) {
QString bdir(backupDir);
bdir += "/";
bdir += uid;
QDir d(bdir);
+ kapp->processEvents();
const QFileInfoList *fil =
d.entryInfoList("*.tar.gz", QDir::Files|QDir::Readable, QDir::Name);
QFileInfoListIterator it(*fil);
QFileInfo *fi;
while ((fi = it.current())) {
+ kapp->processEvents();
+
bool isValid = false;
KTarGz tgz(fi->absFilePath());
const KTarEntry *te;
@@ -169,30 +286,51 @@ readBackups(QString uid) {
}
if (isValid) {
- QString n = i18n("%1 backup, created at %2").arg(bTypeName).arg(date.toString());
+ QString n = i18n("%1 backup, created at %2").arg(bTypeName).arg(KGlobal::locale()->formatDateTime(date, false));
+ QByteArray a = ((KTarFile *)te)->data();
+ QTextIStream indexData(a);
+
+ indexData.readLine();
+ indexData.flags(QTextStream::hex);
+ indexData.fill('0');
+ indexData.width(8);
KPsionCheckListItem *i =
new KPsionCheckListItem(this, n,
KPsionCheckListItem::CheckBox);
- i->setMetaData(bType, te->date());
- i->setPixmap(0, KGlobal::iconLoader()->loadIcon("mime_empty", KIcon::Small));
+ i->setMetaData(bType, te->date(), tgz.fileName(), 0, 0, 0, 0);
+ i->setPixmap(0, KGlobal::iconLoader()->loadIcon("mime_empty",
+ KIcon::Small));
+ connect(i, SIGNAL(rootToggled()), this, SLOT(slotRootToggled()));
+
QStringList files = tgz.directory()->entries();
for (QStringList::Iterator f = files.begin();
f != files.end(); f++)
if ((*f != "KPsionFullIndex") &&
(*f != "KPsionIncrementalIndex"))
- listTree(i, tgz.directory()->entry(*f), 0);
+ listTree(i, tgz.directory()->entry(*f), indexData, 0);
}
tgz.close();
++it;
}
+ header()->setClickEnabled(false);
+ header()->setResizeEnabled(false);
+ header()->setMovingEnabled(false);
+ setMinimumSize(columnWidth(0) + 4, height());
+ QWhatsThis::add(this, i18n(
+ "<qt>Here, you can select the available backups."
+ " Select the items you want to restore, the click"
+ " on <b>Start</b> to start restoring these items."
+ "</qt>"));
}
void KPsionBackupListView::
-listTree(KPsionCheckListItem *cli, const KTarEntry *te, int level) {
+listTree(KPsionCheckListItem *cli, const KTarEntry *te, QTextIStream &idx,
+ int level) {
KPsionCheckListItem *i =
new KPsionCheckListItem(cli, te->name(),
KPsionCheckListItem::CheckBox);
+ kapp->processEvents();
if (te->isDirectory()) {
if (level)
i->setPixmap(0, KGlobal::iconLoader()->loadIcon("folder",
@@ -200,17 +338,118 @@ listTree(KPsionCheckListItem *cli, const KTarEntry *te, int level) {
else
i->setPixmap(0, KGlobal::iconLoader()->loadIcon("hdd_unmount",
KIcon::Small));
+ i->setMetaData(0, 0, QString::null, 0, 0, 0, 0);
KTarDirectory *td = (KTarDirectory *)te;
QStringList files = td->entries();
for (QStringList::Iterator f = files.begin(); f != files.end(); f++)
- listTree(i, td->entry(*f), level + 1);
- } else
+ listTree(i, td->entry(*f), idx, level + 1);
+ } else {
+ uint32_t timeHi;
+ uint32_t timeLo;
+ uint32_t size;
+ uint32_t attr;
+ QString name;
+
i->setPixmap(0, KGlobal::iconLoader()->loadIcon("mime_empty",
KIcon::Small));
+ idx >> timeHi >> timeLo >> size >> attr >> name;
+ i->setMetaData(0, 0, name, size, timeHi, timeLo, attr);
+ }
+}
+
+void KPsionBackupListView::
+slotRootToggled() {
+ bool anyOn = false;
+ KPsionCheckListItem *i = firstChild();
+ while (i != 0L) {
+ if (i->isOn()) {
+ anyOn = true;
+ break;
+ }
+ i = i->nextSibling();
+ }
+ emit itemsEnabled(anyOn);
+}
+
+QStringList KPsionBackupListView::
+getSelectedTars() {
+ QStringList l;
+
+ KPsionCheckListItem *i = firstChild();
+ while (i != 0L) {
+ if (i->isOn())
+ l += i->tarname();
+ i = i->nextSibling();
+ }
+ return l;
+}
+
+bool KPsionBackupListView::
+autoSelect(QString drive) {
+ KPsionCheckListItem *latest = NULL;
+ time_t stamp = 0;
+
+ drive += ":";
+ // Find latest full backup for given drive
+ KPsionCheckListItem *i = firstChild();
+ while (i != 0L) {
+ if ((i->backupType() == FULL) && (i->when() > stamp)) {
+ KPsionCheckListItem *c = i->firstChild();
+ while (c != 0L) {
+ if (c->text() == drive) {
+ latest = c;
+ stamp = i->when();
+ break;
+ }
+ c = c->nextSibling();
+ }
+ }
+ i = i->nextSibling();
+ }
+ // Now find all incremental backups for given drive which are newer than
+ // selected backup
+ if (latest != 0) {
+ latest->setOn(true);
+ i = firstChild();
+ while (i != 0L) {
+ if ((i->backupType() == INCREMENTAL) && (i->when() >= stamp)) {
+ KPsionCheckListItem *c = i->firstChild();
+ while (c != 0L) {
+ if (c->text() == drive)
+ c->setOn(true);
+ c = c->nextSibling();
+ }
+ }
+ i = i->nextSibling();
+ }
+ }
+ return (latest != 0L);
+}
+
+void KPsionBackupListView::
+collectEntries(KPsionCheckListItem *i) {
+ while (i != 0L) {
+ KPsionCheckListItem *c = i->firstChild();
+ if (c == 0L) {
+ if (i->isOn())
+ toRestore.push_back(i->plpdirent());
+ } else
+ collectEntries(c);
+ i = i->nextSibling();
+ }
}
PlpDir &KPsionBackupListView::
-getRestoreList() {
+getRestoreList(QString tarname) {
+ toRestore.clear();
+ KPsionCheckListItem *i = firstChild();
+ while (i != 0L) {
+ if ((i->tarname() == tarname) && (i->isOn())) {
+ collectEntries(i->firstChild());
+ break;
+ }
+ i = i->nextSibling();
+ }
return toRestore;
}
@@ -222,6 +461,18 @@ KPsionMainWindow::KPsionMainWindow()
statusBar()->setItemAlignment(STID_CONNECTION,
QLabel::AlignLeft|QLabel::AlignVCenter);
+ progress = new KPsionStatusBarProgress(statusBar(), "progressBar");
+ statusBar()->addWidget(progress, 10);
+
+ connect(progress, SIGNAL(pressed()), this, SLOT(slotProgressBarPressed()));
+ connect(this, SIGNAL(setProgress(int)), progress, SLOT(setValue(int)));
+ connect(this, SIGNAL(setProgress(int, int)), progress,
+ SLOT(setValue(int, int)));
+ connect(this, SIGNAL(setProgressText(const QString &)), progress,
+ SLOT(setText(const QString &)));
+ connect(this, SIGNAL(enableProgressText(bool)), progress,
+ SLOT(setTextEnabled(bool)));
+
backupRunning = false;
restoreRunning = false;
formatRunning = false;
@@ -267,6 +518,11 @@ KPsionMainWindow::KPsionMainWindow()
connected = false;
shuttingDown = false;
+ args = KCmdLineArgs::parsedArgs();
+ if (args->isSet("autobackup")) {
+ firstTry = false;
+ reconnectTime = 0;
+ }
tryConnect();
}
@@ -282,6 +538,24 @@ KPsionMainWindow::~KPsionMainWindow() {
delete rpcsSocket;
}
+QString KPsionMainWindow::
+unix2psion(const char * const path) {
+ QString tmp = path;
+ tmp.replace(QRegExp("/"), "\\");
+ tmp.replace(QRegExp("%2f"), "/");
+ tmp.replace(QRegExp("%25"), "%");
+ return tmp;
+}
+
+QString KPsionMainWindow::
+psion2unix(const char * const path) {
+ QString tmp = path;
+ tmp.replace(QRegExp("%"), "%25");
+ tmp.replace(QRegExp("/"), "%2f");
+ tmp.replace(QRegExp("\\"), "/");
+ return tmp;
+}
+
void KPsionMainWindow::
setupActions() {
@@ -447,6 +721,18 @@ queryPsion() {
}
#endif
if (!machineFound) {
+ if (args->isSet("autobackup")) {
+ connected = false;
+ if (plpRfsv)
+ delete plpRfsv;
+ if (plpRpcs)
+ delete plpRpcs;
+ if (rfsvSocket)
+ delete rfsvSocket;
+ if (rfsvSocket)
+ delete rpcsSocket;
+ return;
+ }
NewPsionWizard *wiz = new NewPsionWizard(this, "newpsionwiz");
wiz->exec();
}
@@ -457,11 +743,9 @@ queryPsion() {
QString KPsionMainWindow::
getMachineUID() {
// ??! None of QString's formatting methods knows about long long.
- ostrstream s;
- s << hex << setw(16) << machineUID;
- QString ret = s.str();
- ret = ret.left(16);
- return ret;
+ char tmp[20];
+ sprintf(tmp, "%16llx", machineUID);
+ return QString(tmp);
}
bool KPsionMainWindow::
@@ -506,28 +790,37 @@ tryConnect() {
nextTry = reconnectTime;
statusMsg += i18n(" (Retry in %1 seconds.)");
QTimer::singleShot(1000, this, SLOT(slotUpdateTimer()));
+
+ statusBar()->changeItem(statusMsg.arg(reconnectTime),
+ STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg.arg(reconnectTime));
+ } else {
+ statusBar()->changeItem(statusMsg, STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg);
}
- statusBar()->changeItem(statusMsg.arg(reconnectTime),
- STID_CONNECTION);
- if (showMB)
- KMessageBox::error(this, statusMsg.arg(reconnectTime));
return;
}
rfsvfactory factory(rfsvSocket);
plpRfsv = factory.create(false);
if (plpRfsv == 0L) {
- statusMsg = i18n("RFSV could not establish link: %1.").arg(factory.getError());
+ statusMsg = i18n("RFSV could not establish link: %1.").arg(KGlobal::locale()->translate(factory.getError()));
delete rfsvSocket;
rfsvSocket = 0L;
if (reconnectTime) {
nextTry = reconnectTime;
statusMsg += i18n(" (Retry in %1 seconds.)");
QTimer::singleShot(1000, this, SLOT(slotUpdateTimer()));
+ statusBar()->changeItem(statusMsg.arg(reconnectTime),
+ STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg.arg(reconnectTime));
+ } else {
+ statusBar()->changeItem(statusMsg, STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg);
}
- statusBar()->changeItem(statusMsg.arg(reconnectTime),
- STID_CONNECTION);
- if (showMB)
- KMessageBox::error(this, statusMsg.arg(reconnectTime));
return;
}
@@ -542,17 +835,21 @@ tryConnect() {
nextTry = reconnectTime;
statusMsg += i18n(" (Retry in %1 seconds.)");
QTimer::singleShot(1000, this, SLOT(slotUpdateTimer()));
+ statusBar()->changeItem(statusMsg.arg(reconnectTime),
+ STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg.arg(reconnectTime));
+ } else {
+ statusBar()->changeItem(statusMsg, STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg);
}
- statusBar()->changeItem(statusMsg.arg(reconnectTime),
- STID_CONNECTION);
- if (showMB)
- KMessageBox::error(this, statusMsg.arg(reconnectTime));
return;
}
rpcsfactory factory2(rpcsSocket);
plpRpcs = factory2.create(false);
if (plpRpcs == 0L) {
- statusMsg = i18n("RPCS could not establish link: %1.").arg(factory.getError());
+ statusMsg = i18n("RPCS could not establish link: %1.").arg(KGlobal::locale()->translate(factory2.getError()));
delete plpRfsv;
plpRfsv = 0L;
delete rfsvSocket;
@@ -563,11 +860,15 @@ tryConnect() {
nextTry = reconnectTime;
statusMsg += i18n(" (Retry in %1 seconds.)");
QTimer::singleShot(1000, this, SLOT(slotUpdateTimer()));
+ statusBar()->changeItem(statusMsg.arg(reconnectTime),
+ STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg.arg(reconnectTime));
+ } else {
+ statusBar()->changeItem(statusMsg, STID_CONNECTION);
+ if (showMB)
+ KMessageBox::error(this, statusMsg);
}
- statusBar()->changeItem(statusMsg.arg(reconnectTime),
- STID_CONNECTION);
- if (showMB)
- KMessageBox::error(this, statusMsg.arg(reconnectTime));
return;
}
#endif
@@ -587,6 +888,10 @@ slotUpdateTimer() {
}
void KPsionMainWindow::
+slotProgressBarPressed() {
+}
+
+void KPsionMainWindow::
slotStartFullBackup() {
fullBackup = true;
doBackup();
@@ -598,33 +903,40 @@ slotStartIncBackup() {
doBackup();
}
+const KTarEntry *KPsionMainWindow::
+findTarEntry(const KTarEntry *te, QString path, QString rpath) {
+ const KTarEntry *fte = NULL;
+ if (te->isDirectory() && (path.left(rpath.length()) == rpath)) {
+ KTarDirectory *td = (KTarDirectory *)te;
+ QStringList files = td->entries();
+ for (QStringList::Iterator f = files.begin(); f != files.end(); f++) {
+ QString tmp = rpath;
+ if (tmp.length())
+ tmp += "/";
+ tmp += *f;
+ fte = findTarEntry(td->entry(*f), path, tmp);
+ if (fte != 0L)
+ break;
+ }
+ } else {
+ if (path == rpath)
+ fte = te;
+ }
+ return fte;
+}
+
void KPsionMainWindow::
doBackup() {
backupRunning = true;
switchActions();
toBackup.clear();
- KDialog *d = new KDialog(this, "backupDialog", false);
- d->setCaption(i18n("Backup"));
- QGridLayout *gl = new QGridLayout(d);
- progressLabel = new KSqueezedTextLabel(d);
- gl->addWidget(progressLabel, 1, 1);
- progress = new KProgress(0, 100, 0, KProgress::Horizontal, d,
- "backupProgress");
-
- gl->addWidget(progress, 2, 1);
- gl->addRowSpacing(0, KDialog::marginHint());
- gl->addRowSpacing(3, KDialog::marginHint());
- gl->addColSpacing(0, KDialog::marginHint());
- gl->addColSpacing(2, KDialog::marginHint());
- gl->setColStretch(1, 1);
- gl->setRowStretch(1, 1);
- d->setMinimumSize(250, 80);
- d->show();
// Collect list of files to backup
backupSize = 0;
backupCount = 0;
progressTotal = 0;
+ emit enableProgressText(true);
+ emit setProgress(0);
for (QIconViewItem *i = view->firstItem(); i; i = i->nextItem()) {
if (i->isSelected()) {
QString drv = i->key();
@@ -632,14 +944,16 @@ doBackup() {
int drvNum = *(drv.data()) - 'A';
PlpDrive drive;
if (plpRfsv->devinfo(drvNum, drive) != rfsv::E_PSI_GEN_NONE) {
+ statusBar()->changeItem(i18n("Connected to %1").arg(machineName),
+ STID_CONNECTION);
+ emit enableProgressText(false);
+ emit setProgress(0);
KMessageBox::error(this, i18n("Could not retrieve drive details for drive %1").arg(drv));
- d->hide();
- delete d;
backupRunning = false;
switchActions();
return;
}
- progressLabel->setText(i18n("Scanning drive %1").arg(drv));
+ emit setProgressText(i18n("Scanning drive %1").arg(drv));
progressLocal = drive.getSize() - drive.getSpace();
progressLocalCount = 0;
@@ -648,17 +962,19 @@ doBackup() {
collectFiles(drv);
}
}
- progressLabel->setText(i18n("%1 files need backup").arg(backupSize));
+ emit setProgressText(i18n("%1 files need backup").arg(backupSize));
if (backupCount == 0) {
+ emit enableProgressText(false);
+ emit setProgress(0);
+ statusBar()->changeItem(i18n("Connected to %1").arg(machineName),
+ STID_CONNECTION);
KMessageBox::information(this, i18n("No files need backup"));
- d->hide();
- delete d;
backupRunning = false;
switchActions();
return;
}
- statusBar()->message(i18n("Backup"));
+ // statusBar()->message(i18n("Backup"));
progressCount = 0;
progressTotal = backupSize;
progressPercent = -1;
@@ -671,10 +987,12 @@ doBackup() {
QDir archiveDir(archiveName);
if (!archiveDir.exists())
if (!archiveDir.mkdir(archiveName)) {
+ emit enableProgressText(false);
+ emit setProgress(0);
+ statusBar()->changeItem(i18n("Connected to %1").arg(machineName),
+ STID_CONNECTION);
KMessageBox::error(this, i18n("Could not create backup folder %1").arg(archiveName));
- d->hide();
- delete d;
- statusBar()->clear();
+ // statusBar()->clear();
backupRunning = false;
switchActions();
return;
@@ -697,40 +1015,19 @@ doBackup() {
bool badBackup = false;
Enum<rfsv::errs> res;
// Now the real backup
+ progressTotalText = i18n("Backup %1% done");
for (int i = 0; i < toBackup.size(); i++) {
PlpDirent e = toBackup[i];
const char *fn = e.getName();
- const char *p;
- char *q;
- char unixname[1024];
-
- for (p = fn, q = unixname; *p; p++, q++)
- switch (*p) {
- case '%':
- *q++ = '%';
- *q++ = '2';
- *q = '5';
- break;
- case '/':
- *q++ = '%';
- *q++ = '2';
- *q= 'f';
- break;
- case '\\':
- *q = '/';
- break;
- default:
- *q = *p;
- }
- *q = '\0';
+ QString unixname = psion2unix(fn);
+ QByteArray ba;
+ QDataStream os(ba, IO_WriteOnly);
- ostrstream os;
-
- progressLabel->setText(i18n("Backing up %1").arg(fn));
+ emit setProgressText(QString("%1").arg(fn));
progressLocal = e.getSize();
progressLocalCount = 0;
progressLocalPercent = -1;
- progress->setValue(0);
+ emit setProgress(0);
u_int32_t handle;
@@ -751,10 +1048,9 @@ doBackup() {
do {
if ((res = plpRfsv->fread(handle, buff, RFSV_SENDLEN, len)) ==
rfsv::E_PSI_GEN_NONE) {
- os.write(buff, len);
+ os.writeRawBytes((char *)buff, len);
updateProgress(len);
}
- kapp->processEvents();
} while ((len > 0) && (res == rfsv::E_PSI_GEN_NONE));
delete[]buff;
plpRfsv->fclose(handle);
@@ -767,17 +1063,16 @@ doBackup() {
continue;
}
}
- backupTgz->writeFile(unixname, "root", "root", os.pcount(),
- os.str());
+ backupTgz->writeFile(unixname, "root", "root", ba.size(), ba.data());
}
if (!badBackup) {
// Reset archive attributes of all backuped files.
- progressLabel->setText(i18n("Resetting archive attributes ..."));
+ emit setProgressText(i18n("Resetting archive attributes"));
progressLocal = backupSize;
progressLocalCount = 0;
progressLocalPercent = -1;
- progress->setValue(0);
+ emit setProgress(0);
for (int i = 0; i < toBackup.size(); i++) {
PlpDirent e = toBackup[i];
const char *fn = e.getName();
@@ -802,41 +1097,327 @@ doBackup() {
delete backupTgz;
if (badBackup)
unlink(archiveName.data());
- d->hide();
- delete d;
backupRunning = false;
switchActions();
+ statusBar()->changeItem(i18n("Connected to %1").arg(machineName),
+ STID_CONNECTION);
+ emit enableProgressText(false);
+ emit setProgress(0);
statusBar()->message(i18n("Backup done"), 2000);
}
+KPsionRestoreDialog::KPsionRestoreDialog(QWidget *parent, QString uid)
+ : KDialogBase(parent, "restoreDialog", true, i18n("Restore"),
+ KDialogBase::Cancel | KDialogBase::Ok,
+ KDialogBase::Ok, true) {
+
+ setButtonOKText(i18n("Start"));
+ enableButtonOK(false);
+ setButtonWhatsThis(KDialogBase::Ok,
+ i18n("Select items in the list of"
+ " available backups, then click"
+ " here to start restore of these"
+ " items."));
+
+ QWidget *w = new QWidget(this);
+ setMainWidget(w);
+ QGridLayout *gl = new QGridLayout(w, 1, 1, KDialog::marginHint(),
+ KDialog::marginHint());
+ backupView = new KPsionBackupListView(w, "restoreSelector");
+ gl->addWidget(backupView, 0, 0);
+ backupView->readBackups(uid);
+ connect(backupView, SIGNAL(itemsEnabled(bool)), this,
+ SLOT(slotBackupsSelected(bool)));
+}
+
+void KPsionRestoreDialog::
+slotBackupsSelected(bool any) {
+ enableButtonOK(any);
+}
+
+QStringList KPsionRestoreDialog::
+getSelectedTars() {
+ return backupView->getSelectedTars();
+}
+
+bool KPsionRestoreDialog::
+autoSelect(QString drive) {
+ return backupView->autoSelect(drive);
+}
+
+PlpDir &KPsionRestoreDialog::
+getRestoreList(QString tarname) {
+ return backupView->getRestoreList(tarname);
+}
+
+bool KPsionMainWindow::
+askOverwrite(PlpDirent e) {
+ if (overWriteAll)
+ return true;
+ const char *fn = e.getName();
+ if (overWriteList.contains(QString(fn)))
+ return true;
+ PlpDirent old;
+ Enum<rfsv::errs> res = plpRfsv->fgeteattr(fn, old);
+ if (res != rfsv::E_PSI_GEN_NONE) {
+ KMessageBox::error(this, i18n(
+ "<QT>Could not get attributes of<BR/>"
+ "<B>%1</B><BR/>Reason: %2</QT>").arg(fn).arg(KGlobal::locale()->translate(res)));
+ return false;
+ }
+
+ // Don't ask if size and attribs are same
+ if ((old.getSize() == e.getSize()) &&
+ ((old.getAttr() & ~rfsv::PSI_A_ARCHIVE) ==
+ (e.getAttr() & ~rfsv::PSI_A_ARCHIVE)))
+ return true;
+
+ QDateTime odate;
+ QDateTime ndate;
+
+ odate.setTime_t(old.getPsiTime().getTime());
+ ndate.setTime_t(e.getPsiTime().getTime());
+
+ // Dates
+ QString od = KGlobal::locale()->formatDateTime(odate, false);
+ QString nd = KGlobal::locale()->formatDateTime(ndate, false);
+
+ // Sizes
+ QString os = QString("%1 (%2)").arg(KIO::convertSize(old.getSize())).arg(KGlobal::locale()->formatNumber(old.getSize(), 0));
+ QString ns = QString("%1 (%2)").arg(KIO::convertSize(e.getSize())).arg(KGlobal::locale()->formatNumber(e.getSize(), 0));
+
+ // Attributes
+ QString oa(plpRfsv->attr2String(old.getAttr()).c_str());
+ QString na(plpRfsv->attr2String(e.getAttr()).c_str());
+
+ KDialogBase dialog(i18n("Overwrite"), KDialogBase::Yes | KDialogBase::No |
+ KDialogBase::Cancel, KDialogBase::No,
+ KDialogBase::Cancel, this, "overwriteDialog", true, true,
+ QString::null, QString::null, i18n("Overwrite &All"));
+
+ QWidget *contents = new QWidget(&dialog);
+ QHBoxLayout * lay = new QHBoxLayout(contents);
+ lay->setSpacing(KDialog::spacingHint()*2);
+ lay->setMargin(KDialog::marginHint()*2);
+
+ lay->addStretch(1);
+ QLabel *label1 = new QLabel(contents);
+ label1->setPixmap(QMessageBox::standardIcon(QMessageBox::Warning,
+ kapp->style().guiStyle()));
+ lay->add(label1);
+ lay->add(new QLabel(i18n(
+ "<QT>The file <B>%1</B> exists already on the Psion with "
+ "different size and/or attributes."
+ "<P><B>On the Psion:</B><BR/>"
+ " Size: %2<BR/>"
+ " Date: %3<BR/>"
+ " Attributes: %4</P>"
+ "<P><B>In backup:</B><BR/>"
+ " Size: %5<BR/>"
+ " Date: %6<BR/>"
+ " Attributes: %7</P>"
+ "Do you want to overwrite it?</QT>").arg(fn).arg(os).arg(od).arg(oa).arg(ns).arg(nd).arg(na), contents));
+ lay->addStretch(1);
+
+ dialog.setMainWidget(contents);
+ dialog.enableButtonSeparator(false);
+
+ int result = dialog.exec();
+ switch (result) {
+ case KDialogBase::Yes:
+ return true;
+ case KDialogBase::No:
+ return false;
+ case KDialogBase::Cancel:
+ overWriteAll = true;
+ return true;
+ default: // Huh?
+ break;
+ }
+
+ return false; // Default
+}
+
void KPsionMainWindow::
slotStartRestore() {
restoreRunning = true;
switchActions();
- KDialog *d = new KDialog(this, "restoreDialog", true);
- d->setCaption(i18n("Restore"));
- QGridLayout *gl = new QGridLayout(d);
- //progressLabel = new KSqueezedTextLabel(d);
- KPsionBackupListView *v = new KPsionBackupListView(d, "restoreSelector");
- gl->addWidget(v, 1, 1);
- //progress = new KProgress(0, 100, 0, KProgress::Horizontal, d, "restoreProgress");
-
- //gl->addWidget(progress, 2, 1);
- gl->addRowSpacing(0, KDialog::marginHint());
- gl->addRowSpacing(3, KDialog::marginHint());
- gl->addColSpacing(0, KDialog::marginHint());
- gl->addColSpacing(2, KDialog::marginHint());
- gl->setColStretch(1, 1);
- gl->setRowStretch(1, 1);
- d->setMinimumSize(250, 80);
- v->readBackups(getMachineUID());
- d->exec();
-
- d->hide();
- delete d;
+ kapp->setOverrideCursor(Qt::waitCursor);
+ statusBar()->changeItem(i18n("Reading backups ..."), STID_CONNECTION);
+ update();
+ kapp->processEvents();
+ KPsionRestoreDialog restoreDialog(this, getMachineUID());
+ kapp->restoreOverrideCursor();
+ statusBar()->changeItem(i18n("Selecting backups ..."), STID_CONNECTION);
+
+ for (QIconViewItem *i = view->firstItem(); i; i = i->nextItem()) {
+ if (i->isSelected() && (i->key() != "Z"))
+ restoreDialog.autoSelect(i->key());
+ }
+
+ overWriteList.clear();
+ overWriteAll = false;
+
+ if (restoreDialog.exec() == KDialogBase::Accepted) {
+ QStringList tars = restoreDialog.getSelectedTars();
+ QStringList::Iterator t;
+
+ backupSize = 0;
+ backupCount = 0;
+ for (t = tars.begin(); t != tars.end(); t++) {
+ PlpDir toRestore = restoreDialog.getRestoreList(*t);
+ for (int r = 0; r < toRestore.size(); r++) {
+ PlpDirent e = toRestore[r];
+ backupSize += e.getSize();
+ backupCount++;
+ }
+ }
+ if (backupCount == 0) {
+ restoreRunning = false;
+ switchActions();
+ statusBar()->changeItem(i18n("Connected to %1").arg(machineName),
+ STID_CONNECTION);
+ return;
+ }
+
+ progressTotalText = i18n("Restore %1% done");
+ progressTotal = backupSize;
+ progressCount = 0;
+ progressPercent = -1;
+ emit setProgressText("");
+ emit enableProgressText(true);
+ emit setProgress(0);
+
+ // Kill all running applications on the Psion
+ // and save their state.
+ killSave();
+
+ for (t = tars.begin(); t != tars.end(); t++) {
+ PlpDir toRestore = restoreDialog.getRestoreList(*t);
+ if (toRestore.size() > 0) {
+ KTarGz tgz(*t);
+ const KTarEntry *te;
+ QString pDir("");
+
+ tgz.open(IO_ReadOnly);
+ for (int r = 0; r < toRestore.size(); r++) {
+ PlpDirent e = toRestore[r];
+ PlpDirent olde;
+
+ const char *fn = e.getName();
+ QString unixname = psion2unix(fn);
+ Enum<rfsv::errs> res;
+
+ progressLocal = e.getSize();
+ progressLocalCount = 0;
+ progressLocalPercent = -1;
+ emit setProgressText(QString("%1").arg(fn));
+ emit setProgress(0);
+
+ te = findTarEntry(tgz.directory(), unixname);
+ if (te != 0L) {
+ u_int32_t handle;
+ QString cpDir(fn);
+ QByteArray ba = ((KTarFile *)te)->data();
+ int bslash = cpDir.findRev('\\');
+ if (bslash > 0)
+ cpDir = cpDir.left(bslash);
+ if (pDir != cpDir) {
+ pDir = cpDir;
+ res = plpRfsv->mkdir(pDir);
+ if ((res != rfsv::E_PSI_GEN_NONE) &&
+ (res != rfsv::E_PSI_FILE_EXIST)) {
+ KMessageBox::error(this, i18n(
+ "<QT>Could not create directory<BR/>"
+ "<B>%1</B><BR/>Reason: %2</QT>").arg(pDir).arg(KGlobal::locale()->translate(res)));
+ continue;
+ }
+ }
+ res = plpRfsv->fcreatefile(
+ plpRfsv->opMode(rfsv::PSI_O_RDWR), fn, handle);
+ if (res == rfsv::E_PSI_FILE_EXIST) {
+ if (!askOverwrite(e))
+ continue;
+ res = plpRfsv->freplacefile(
+ plpRfsv->opMode(rfsv::PSI_O_RDWR), fn, handle);
+ }
+ if (res != rfsv::E_PSI_GEN_NONE) {
+ KMessageBox::error(this, i18n(
+ "<QT>Could not create<BR/>"
+ "<B>%1</B><BR/>Reason: %2</QT>").arg(fn).arg(KGlobal::locale()->translate(res)));
+ continue;
+ }
+ const unsigned char *data =
+ (const unsigned char *)(ba.data());
+ long len = ba.size();
+
+ do {
+ u_int32_t written;
+ u_int32_t count =
+ (len > RFSV_SENDLEN) ? RFSV_SENDLEN : len;
+ res = plpRfsv->fwrite(handle, data, count, written);
+ if (res != rfsv::E_PSI_GEN_NONE)
+ break;
+ len -= written;
+ data += written;
+ updateProgress(written);
+ } while (len > 0);
+ plpRfsv->fclose(handle);
+ if (res != rfsv::E_PSI_GEN_NONE) {
+ KMessageBox::error(this, i18n(
+ "<QT>Could not write to<BR/>"
+ "<B>%1</B><BR/>Reason: %2</QT>").arg(fn).arg(KGlobal::locale()->translate(res)));
+ continue;
+ }
+ u_int32_t oldattr;
+ res = plpRfsv->fgetattr(fn, oldattr);
+ if (res != rfsv::E_PSI_GEN_NONE) {
+ KMessageBox::error(this, i18n(
+ "<QT>Could not get attributes of<BR/>"
+ "<B>%1</B><BR/>Reason: %2</QT>").arg(fn).arg(KGlobal::locale()->translate(res)));
+ continue;
+ }
+ u_int32_t mask = e.getAttr() ^ oldattr;
+ u_int32_t sattr = e.getAttr() & mask;
+ u_int32_t dattr = ~sattr & mask;
+ res = plpRfsv->fsetattr(fn, sattr, dattr);
+ if (res != rfsv::E_PSI_GEN_NONE) {
+ KMessageBox::error(this, i18n(
+ "<QT>Could not set attributes of<BR/>"
+ "<B>%1</B><BR/>Reason: %2</QT>").arg(fn).arg(KGlobal::locale()->translate(res)));
+ continue;
+ }
+ res = plpRfsv->fsetmtime(fn, e.getPsiTime());
+ if (res != rfsv::E_PSI_GEN_NONE) {
+ KMessageBox::error(this, i18n(
+ "<QT>Could not set modification time of<BR/>"
+ "<B>%1</B><BR/>Reason: %2</QT>").arg(fn).arg(KGlobal::locale()->translate(res)));
+ continue;
+ }
+ overWriteList += QString(fn);
+ }
+ }
+ tgz.close();
+ }
+ }
+ // Restart previously running applications on the Psion
+ // from saved state info.
+ runRestore();
+ } else {
+ restoreRunning = false;
+ switchActions();
+ statusBar()->changeItem(i18n("Connected to %1").arg(machineName),
+ STID_CONNECTION);
+ return;
+ }
+
restoreRunning = false;
switchActions();
+ emit setProgress(0);
+ emit enableProgressText(false);
+ statusBar()->changeItem(i18n("Connected to %1").arg(machineName),
+ STID_CONNECTION);
statusBar()->message(i18n("Restore done"), 2000);
}
@@ -885,7 +1466,7 @@ updateProgress(unsigned long amount) {
else
progressLocalPercent = 100;
if (progressLocalPercent != lastPercent)
- progress->setValue(progressLocalPercent);
+ emit setProgress(progressLocalPercent);
if (progressTotal > 0) {
progressCount += amount;
lastPercent = progressPercent;
@@ -894,8 +1475,10 @@ updateProgress(unsigned long amount) {
else
progressPercent = 100;
if (progressPercent != lastPercent)
- statusBar()->message(i18n("Backup %1% complete").arg(progressPercent));
+ statusBar()->changeItem(progressTotalText.arg(progressPercent),
+ STID_CONNECTION);
}
+ kapp->processEvents();
}
void KPsionMainWindow::
@@ -920,7 +1503,6 @@ collectFiles(QString dir) {
if (attr & rfsv::PSI_A_DIR) {
collectFiles(tmp);
} else {
- kapp->processEvents();
updateProgress(e.getSize());
if ((attr & rfsv::PSI_A_ARCHIVE) || fullBackup) {
backupCount++;
@@ -959,7 +1541,7 @@ killSave() {
cmdline += bs.getString(0);
savedCommands += cmdline;
}
- progressLabel->setText(i18n("Stopping %1").arg(cmdargs.getString(0)));
+ emit setProgressText(i18n("Stopping %1").arg(cmdargs.getString(0)));
kapp->processEvents();
plpRpcs->stopProgram(pbuf);
}
@@ -981,7 +1563,7 @@ runRestore() {
// These do not storethe full program path.
// In that case we try running the arg1 which
// results in starting the program via recog. facility.
- progressLabel->setText(i18n("Starting %1").arg(cmd));
+ emit setProgressText(i18n("Starting %1").arg(cmd));
kapp->processEvents();
if ((arg.length() > 2) && (arg[1] == ':') && (arg[0] >= 'A') &&
(arg[0] <= 'Z'))
@@ -1016,7 +1598,8 @@ runRestore() {
void KPsionMainWindow::
createIndex() {
- ostrstream os;
+ QByteArray ba;
+ QTextOStream os(ba);
os << "#plpbackup index " <<
(fullBackup ? "F" : "I") << endl;
for (int i = 0; i < toBackup.size(); i++) {
@@ -1036,7 +1619,10 @@ createIndex() {
<< setw(0) << e.getName() << endl;
kapp->processEvents();
}
- backupTgz->writeFile("Index", "root", "root", os.pcount(), os.str());
+ QString idxName =
+ QString::fromLatin1("KPsion%1Index").arg(fullBackup ?
+ "Full" : "Incremental");
+ backupTgz->writeFile(idxName, "root", "root", ba.size(), ba.data());
}
/*
diff --git a/kde2/kpsion/kpsion.h b/kde2/kpsion/kpsion.h
index 86aeff4..2543fa6 100644
--- a/kde2/kpsion/kpsion.h
+++ b/kde2/kpsion/kpsion.h
@@ -1,15 +1,39 @@
+/*-*-c++-*-
+ * $Id$
+ *
+ * This file is part of plptools.
+ *
+ * Copyright (C) 1999-2001 Fritz Elfert <felfert@to.com>
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
#ifndef _KPSION_H_
#define _KPSION_H_
#include "setupdialog.h"
+#include "statusbarprogress.h"
#include <kmainwindow.h>
+#include <kcmdlineargs.h>
#include <kiconview.h>
-#include <kprogress.h>
-#include <ksqueezedtextlabel.h>
#include <klistview.h>
+#include <kdialogbase.h>
#include <ktar.h>
+#include <qtextstream.h>
#include <rfsv.h>
#include <rpcs.h>
#include <ppsocket.h>
@@ -17,8 +41,10 @@
typedef QMap<char,QString> driveMap;
typedef QMap<QString,QString> psionMap;
-class KPsionCheckListItem : public QCheckListItem {
- public:
+class KPsionCheckListItem : public QObject, public QCheckListItem {
+ Q_OBJECT
+
+public:
KPsionCheckListItem(KPsionCheckListItem *parent, const QString &text,
Type tt)
: QCheckListItem(parent, text, tt) { init(true); }
@@ -34,25 +60,43 @@ class KPsionCheckListItem : public QCheckListItem {
KPsionCheckListItem(QListView *parent, const QString &text,
const QPixmap &p)
: QCheckListItem(parent, text, p) { init(false); }
- void setMetaData(int, time_t);
- protected:
+ KPsionCheckListItem *firstChild() const;
+ KPsionCheckListItem *nextSibling() const;
+
+ ~KPsionCheckListItem();
+
+ virtual QString key(int column, bool ascending) const;
+ void setMetaData(int bType, time_t bTime, QString tarName, int size,
+ u_int32_t tHi, u_int32_t tLo, u_int32_t attr);
+
+ QString unixname();
+ QString psionname();
+ QString tarname();
+ PlpDirent plpdirent();
+ int backupType();
+ int size();
+ time_t when();
+ bool isPathChecked(QString path);
+
+signals:
+ void rootToggled(void);
+
+protected:
virtual void stateChange(bool);
void propagateUp(bool);
void propagateDown(bool);
- private:
+private:
void init(bool);
-
- bool parentIsKPsionCheckListItem;
- bool dontPropagate;
- int backupType;
- time_t when;
+ class KPsionCheckListItemMetaData;
+ KPsionCheckListItemMetaData *meta;
};
class KPsionBackupListView : public KListView {
Q_OBJECT
- public:
+
+public:
enum backupTypes {
UNKNOWN = 0,
FULL = 1,
@@ -60,21 +104,50 @@ class KPsionBackupListView : public KListView {
};
KPsionBackupListView(QWidget *parent = 0, const char *name = 0);
+ KPsionCheckListItem *firstChild() const;
+
void readBackups(QString uid);
- PlpDir &getRestoreList();
+ PlpDir &getRestoreList(QString tarname);
+ QStringList getSelectedTars();
+ bool autoSelect(QString drive);
+
+signals:
+ void itemsEnabled(bool);
- private:
- void listTree(KPsionCheckListItem *cli, const KTarEntry *te, int level);
+private slots:
+ void slotRootToggled(void);
+
+private:
+ void collectEntries(KPsionCheckListItem *i);
+ void listTree(KPsionCheckListItem *cli, const KTarEntry *te,
+ QTextIStream &idx, int level);
QString uid;
QString backupDir;
PlpDir toRestore;
};
+class KPsionRestoreDialog : public KDialogBase {
+ Q_OBJECT
+
+public:
+ KPsionRestoreDialog(QWidget *parent, QString uid);
+
+ PlpDir &getRestoreList(QString tarname);
+ QStringList getSelectedTars();
+ bool autoSelect(QString drive);
+
+private slots:
+ void slotBackupsSelected(bool);
+
+private:
+ KPsionBackupListView *backupView;
+};
+
class KPsionMainWindow : public KMainWindow {
Q_OBJECT
-
- public:
+
+public:
KPsionMainWindow();
~KPsionMainWindow();
void setMachineName(QString &_name) { machineName = _name; }
@@ -83,8 +156,20 @@ class KPsionMainWindow : public KMainWindow {
psionMap &getMachines() { return machines; }
QString &getMachineName() { return machineName; }
QString &getBackupDir() { return backupDir; }
+ bool isConnected() { return connected; }
+ const KTarEntry *findTarEntry(const KTarEntry *te, QString path,
+ QString rpath = "");
- public slots:
+ static QString unix2psion(const char * const);
+ static QString psion2unix(const char * const);
+
+signals:
+ void setProgress(int);
+ void setProgress(int, int);
+ void setProgressText(const QString &);
+ void enableProgressText(bool);
+
+public slots:
void slotStartRestore();
void slotStartFullBackup();
void slotStartIncBackup();
@@ -93,20 +178,21 @@ class KPsionMainWindow : public KMainWindow {
void slotToggleStatusbar();
void slotSaveOptions();
void slotPreferences();
-
- protected:
+ void slotProgressBarPressed();
+
+protected:
virtual bool queryClose();
void setupActions();
void switchActions();
void queryPsion();
void insertDrive(char letter, const char * const name);
- private slots:
+private slots:
void iconClicked(QIconViewItem *i);
void iconOver(QIconViewItem *i);
void slotUpdateTimer();
- private:
+private:
void doBackup();
void tryConnect();
void updateProgress(unsigned long);
@@ -114,6 +200,7 @@ class KPsionMainWindow : public KMainWindow {
void killSave();
void runRestore();
void createIndex();
+ bool askOverwrite(PlpDirent e);
rfsv *plpRfsv;
rpcs *plpRpcs;
@@ -121,18 +208,20 @@ class KPsionMainWindow : public KMainWindow {
ppsocket *rpcsSocket;
SetupDialog *setupDialog;
KIconView *view;
- KProgress *progress;
- KSqueezedTextLabel *progressLabel;
+ KPsionStatusBarProgress *progress;
KTarGz *backupTgz;
+ KCmdLineArgs *args;
driveMap drives;
psionMap machines;
+ QStringList overWriteList;
QStringList backupDrives;
QStringList savedCommands;
QString backupDir;
QString machineName;
QString statusMsg;
QString ncpdDevice;
+ QString progressTotalText;
bool S5mx;
bool backupRunning;
bool restoreRunning;
@@ -142,6 +231,7 @@ class KPsionMainWindow : public KMainWindow {
bool firstTry;
bool shuttingDown;
bool fullBackup;
+ bool overWriteAll;
int reconnectTime;
int nextTry;
int ncpdSpeed;
diff --git a/kde2/kpsion/main.cpp b/kde2/kpsion/main.cpp
index df909ef..c9c0a0f 100644
--- a/kde2/kpsion/main.cpp
+++ b/kde2/kpsion/main.cpp
@@ -1,3 +1,25 @@
+/*-*-c++-*-
+ * $Id$
+ *
+ * This file is part of plptools.
+ *
+ * Copyright (C) 1999-2001 Fritz Elfert <felfert@to.com>
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -10,46 +32,71 @@
#include <kcmdlineargs.h>
#include <kaboutdata.h>
+namespace LIBPLP {
+extern "C" {
+#include <intl.h>
+ void init_libplp_i18n() {
+ bind_textdomain_codeset(PACKAGE, "latin1");
+ textdomain(PACKAGE);
+ }
+};
+};
+
+
static KCmdLineOptions options[] = {
- {"b", 0, 0},
- {"backup", I18N_NOOP("perform backup"), 0},
- {"r", 0, 0},
- {"restore", I18N_NOOP("perform restore"), 0},
- {"f", 0, 0},
- {"format", I18N_NOOP("format drive"), 0},
- {"+[DriveLetter]", I18N_NOOP("The drive letter to backup/restore or format."), 0},
- { 0, 0, 0},
+ {"a", 0, 0},
+ {"autobackup", I18N_NOOP("perform scheduled backup"), 0},
+ {"b <drive>", 0, 0},
+ {"backup <drive>", I18N_NOOP("perform backup"), 0},
+ {"r <drive>", 0, 0},
+ {"restore <drive>", I18N_NOOP("perform restore"), 0},
+ {"f <drive>", 0, 0},
+ {"format <drive>", I18N_NOOP("format drive"), 0},
+ {"+drive", I18N_NOOP("The drive letter to backup/restore or format."), 0},
+ { 0, 0, 0},
};
int main(int argc, char **argv) {
- KAboutData *about = new KAboutData("kpsion", I18N_NOOP("KPsion"),
- VERSION, I18N_NOOP("Psion connectivity utility"),
- KAboutData::License_GPL,
- "(C) 2001, Fritz Elfert", 0L,
- "http://plptools.sourceforge.net",
- "plptools-developers@sourceforge.net");
- about->addAuthor("Fritz Elfert", I18N_NOOP("Original Developer/Maintainer"),
- "felfert@users.sourceforge.net",
- "http://plptools.sourceforge.net");
- KCmdLineArgs::init(argc, argv, about);
- KCmdLineArgs::addCmdLineOptions(options);
-
- KApplication a;
-
- KConfig *config = kapp->config();
- config->setGroup("Settings");
- QString backupDir = config->readEntry("BackupDir");
-
- if (backupDir.isEmpty()) {
- FirstTimeWizard *wiz = new FirstTimeWizard(0L, "firsttimewizard");
- wiz->exec();
- }
+ KAboutData *about = new KAboutData("kpsion", I18N_NOOP("KPsion"),
+ VERSION, I18N_NOOP("Psion connectivity utility"),
+ KAboutData::License_GPL,
+ "(C) 2001, Fritz Elfert", 0L,
+ "http://plptools.sourceforge.net",
+ "plptools-developers@sourceforge.net");
+ about->addAuthor("Fritz Elfert", I18N_NOOP("Original Developer/Maintainer"),
+ "felfert@users.sourceforge.net",
+ "http://plptools.sourceforge.net");
+ KCmdLineArgs::init(argc, argv, about);
+ KCmdLineArgs::addCmdLineOptions(options);
- KPsionMainWindow *w = new KPsionMainWindow();
- w->resize(300, 150);
- a.setMainWidget(w);
- w->show();
- return a.exec();
+ KApplication a;
+
+ // Install additional translations
+ LIBPLP::init_libplp_i18n();
+ KGlobal::locale()->insertCatalogue(QString::fromLatin1("plptools"));
+
+ KConfig *config = kapp->config();
+ config->setGroup("Settings");
+ QString backupDir = config->readEntry("BackupDir");
+
+ if (backupDir.isEmpty()) {
+ FirstTimeWizard *wiz = new FirstTimeWizard(0L, "firsttimewizard");
+ wiz->exec();
+ }
+
+ KPsionMainWindow *w = new KPsionMainWindow();
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ if (args->isSet("autobackup") && (!w->isConnected()))
+ return 0;
+ w->resize(300, 170);
+ a.setMainWidget(w);
+ w->show();
+ return a.exec();
}
-
-
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/kde2/kpsion/statusbarprogress.cpp b/kde2/kpsion/statusbarprogress.cpp
new file mode 100644
index 0000000..8449faa
--- /dev/null
+++ b/kde2/kpsion/statusbarprogress.cpp
@@ -0,0 +1,438 @@
+/*-*-c++-*-
+ * $Id$
+ *
+ * Shamlessly stolen from:
+ * khexedit - Versatile hex editor
+ * Copyright (C) 1999 Espen Sand, espensa@online.no
+ * This file is based on the work by Martynas Kunigelis (KProgress)
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "statusbarprogress.h"
+
+#include <qpainter.h>
+#include <qstring.h>
+#include <qpixmap.h>
+#include <qtooltip.h>
+
+#include <kapp.h>
+#include <kglobal.h>
+#include <kglobalsettings.h>
+#include <klocale.h>
+
+KPsionStatusBarProgress::
+KPsionStatusBarProgress(QWidget *parent,
+ const char *name)
+ : QFrame(parent, name), QRangeControl(0, 100, 1, 10, 0),
+mOrientation(Horizontal) {
+ initialize();
+}
+
+KPsionStatusBarProgress::
+KPsionStatusBarProgress(Orientation orientation,
+ QWidget *parent,
+ const char *name)
+ : QFrame(parent, name), QRangeControl(0, 100, 1, 10, 0),
+mOrientation(orientation) {
+ initialize();
+}
+
+KPsionStatusBarProgress::
+KPsionStatusBarProgress(int minValue, int maxValue,
+ int value,
+ Orientation orientation,
+ QWidget *parent,
+ const char *name)
+ : QFrame(parent, name), QRangeControl(minValue, maxValue, 1, 10, value),
+mOrientation(orientation) {
+ initialize();
+}
+
+KPsionStatusBarProgress::
+~KPsionStatusBarProgress() {
+ delete mBarPixmap;
+}
+
+void KPsionStatusBarProgress::
+advance(int offset) {
+ setValue(value() + offset);
+}
+
+void KPsionStatusBarProgress::
+initialize(void) {
+ mBarPixmap = 0;
+ mBarStyle = Solid;
+
+ mBarColor = palette().normal().highlight();
+ mBarTextColor = palette().normal().highlightedText();
+ mTextColor = palette().normal().text();
+ setBackgroundColor(palette().normal().background());
+
+ QFont font(KGlobalSettings::generalFont());
+ // font.setBold(true);
+ setFont(font);
+
+ mTextEnabled = false;
+ adjustStyle();
+}
+
+
+void KPsionStatusBarProgress::
+setBarPixmap(const QPixmap &pixmap) {
+ if (pixmap.isNull() == true)
+ return;
+ if (mBarPixmap != 0) {
+ delete mBarPixmap;
+ mBarPixmap = 0;
+ }
+ mBarPixmap = new QPixmap(pixmap);
+}
+
+void KPsionStatusBarProgress::
+setBarColor(const QColor &color) {
+ mBarColor = color;
+ if (mBarPixmap != 0) {
+ delete mBarPixmap;
+ mBarPixmap = 0;
+ }
+}
+
+void KPsionStatusBarProgress::
+setBarStyle(BarStyle style) {
+ if (mBarStyle != style) {
+ mBarStyle = style;
+ update();
+ }
+}
+
+void KPsionStatusBarProgress::
+setOrientation(Orientation orientation) {
+ if (mOrientation != orientation) {
+ mOrientation = orientation;
+ update();
+ }
+}
+
+void KPsionStatusBarProgress::
+setValue(int value) {
+ mCurItem = mMaxItem = -1;
+ QRangeControl::setValue(value);
+}
+
+void KPsionStatusBarProgress::
+setValue(int curItem, int maxItem) {
+ if (curItem <= 0 || maxItem <= 0 || curItem > maxItem) {
+ mCurItem = mMaxItem = -1;
+ QRangeControl::setValue(0);
+ } else {
+ mCurItem = curItem;
+ mMaxItem = maxItem;
+ float fraction = (float)curItem/(float)maxItem;
+ QRangeControl::setValue((int)(fraction * 100.0));
+ }
+}
+
+
+void KPsionStatusBarProgress::
+setTextEnabled(bool state) {
+ if (mTextEnabled != state) {
+ mTextEnabled = state;
+ update();
+ }
+}
+
+void KPsionStatusBarProgress::
+setText(const QString &msg) {
+ labelMsg = msg;
+ if (mTextEnabled == true)
+ update();
+}
+
+
+
+
+const QColor & KPsionStatusBarProgress::
+barColor(void) const {
+ return(mBarColor);
+}
+
+const QPixmap * KPsionStatusBarProgress::
+barPixmap(void) const {
+ return(mBarPixmap);
+}
+
+bool KPsionStatusBarProgress::
+textEnabled(void) const {
+ return(mTextEnabled);
+}
+
+QSize KPsionStatusBarProgress::
+sizeHint(void) const {
+ QSize s(size());
+
+ if (orientation() == KPsionStatusBarProgress::Vertical)
+ s.setWidth(fontMetrics().lineSpacing());
+ else
+ s.setHeight(fontMetrics().lineSpacing());
+ return(s);
+}
+
+
+KPsionStatusBarProgress::Orientation KPsionStatusBarProgress::
+orientation(void) const {
+ return(mOrientation);
+}
+
+KPsionStatusBarProgress::BarStyle KPsionStatusBarProgress::
+barStyle() const {
+ return(mBarStyle);
+}
+
+int KPsionStatusBarProgress::
+recalcValue(int range) {
+ int abs_value = value() - minValue();
+ int abs_range = maxValue() - minValue();
+ if (abs_range == 0)
+ return range;
+ return range * abs_value / abs_range;
+}
+
+void KPsionStatusBarProgress::
+valueChange() {
+ repaint(contentsRect(), FALSE);
+ emit percentageChanged(recalcValue(100));
+}
+
+void KPsionStatusBarProgress::
+rangeChange() {
+ repaint(contentsRect(), FALSE);
+ emit percentageChanged(recalcValue(100));
+}
+
+void KPsionStatusBarProgress::
+styleChange(GUIStyle) {
+ adjustStyle();
+}
+
+void KPsionStatusBarProgress::
+adjustStyle(void) {
+ switch(style().guiStyle()) {
+ case WindowsStyle:
+ setFrameStyle(QFrame::NoFrame);
+ break;
+
+ case MotifStyle:
+ default:
+ setFrameStyle(QFrame::Panel|QFrame::Sunken);
+ setLineWidth(1);
+ break;
+ }
+ update();
+}
+
+void KPsionStatusBarProgress::
+paletteChange(const QPalette &) {
+ mBarColor = palette().normal().highlight();
+ mBarTextColor = palette().normal().highlightedText();
+ mTextColor = palette().normal().text();
+ setBackgroundColor(palette().normal().background());
+}
+
+void KPsionStatusBarProgress::
+drawText(QPainter *p) {
+ QRect r(contentsRect());
+
+ squeezeTextToLabel();
+ p->setPen(mTextColor);
+ p->drawText(r, AlignCenter, labelText);
+ p->setClipRegion(fr);
+ p->setPen(mBarTextColor);
+ p->drawText(r, AlignCenter, labelText);
+}
+
+void KPsionStatusBarProgress::
+drawContents(QPainter *p) {
+ QRect cr = contentsRect(), er = cr;
+ fr = cr;
+ QBrush fb(mBarColor), eb(backgroundColor());
+
+ if (mBarPixmap != 0)
+ fb.setPixmap(*mBarPixmap);
+
+ if (backgroundPixmap())
+ eb.setPixmap(*backgroundPixmap());
+
+ switch(mBarStyle) {
+ case Solid:
+ if (mOrientation == Horizontal) {
+ fr.setWidth(recalcValue(cr.width()));
+ er.setLeft(fr.right() + 1);
+ } else {
+ fr.setTop(cr.bottom() - recalcValue(cr.height()));
+ er.setBottom(fr.top() - 1);
+ }
+
+ p->setBrushOrigin(cr.topLeft());
+ p->fillRect(fr, fb);
+ p->fillRect(er, eb);
+
+ if (mTextEnabled == true)
+ drawText(p);
+ break;
+
+ case Blocked:
+ const int margin = 2;
+ int max, num, dx, dy;
+ if (mOrientation == Horizontal) {
+ fr.setHeight(cr.height() - 2 * margin);
+ fr.setWidth((int)(0.67 * fr.height()));
+ fr.moveTopLeft(QPoint(cr.left() + margin, cr.top() + margin));
+ dx = fr.width() + margin;
+ dy = 0;
+ max = (cr.width() - margin) / (fr.width() + margin) + 1;
+ num = recalcValue(max);
+ } else {
+ fr.setWidth(cr.width() - 2 * margin);
+ fr.setHeight((int)(0.67 * fr.width()));
+ fr.moveBottomLeft(QPoint(cr.left() + margin, cr.bottom() - margin));
+ dx = 0;
+ dy = - (fr.height() + margin);
+ max = (cr.height() - margin) / (fr.height() + margin) + 1;
+ num = recalcValue(max);
+ }
+ p->setClipRect(cr.x() + margin, cr.y() + margin,
+ cr.width() - margin, cr.height() - margin);
+ for (int i = 0; i < num; i++) {
+ p->setBrushOrigin(fr.topLeft());
+ p->fillRect(fr, fb);
+ fr.moveBy(dx, dy);
+ }
+
+ if (num != max) {
+ if (mOrientation == Horizontal)
+ er.setLeft(fr.right() + 1);
+ else
+ er.setBottom(fr.bottom() + 1);
+ if (!er.isNull()) {
+ p->setBrushOrigin(cr.topLeft());
+ p->fillRect(er, eb);
+ }
+ }
+ break;
+ }
+
+}
+
+void KPsionStatusBarProgress::
+mousePressEvent(QMouseEvent */*e*/) {
+ emit pressed();
+}
+
+void KPsionStatusBarProgress::
+squeezeTextToLabel() {
+ QFontMetrics fm(fontMetrics());
+ int labelWidth = size().width();
+ int percent;
+ QString fullText;
+
+ if (labelMsg.isEmpty() == true) {
+ labelText = QString("%1%").arg(recalcValue(100));
+ return;
+ } else {
+ if (mCurItem > 0)
+ fullText = i18n("%1 %2 of %3").arg(labelMsg).arg(mCurItem).arg(mMaxItem);
+ else {
+ percent = recalcValue(100);
+ fullText = QString("%1 %2%").arg(labelMsg).arg(percent);
+ }
+ }
+ int textWidth = fm.width(fullText);
+ if (textWidth > labelWidth) {
+ // start with the dots only
+ QString squeezedMsg = "...";
+ QString squeezedText;
+
+ if (mCurItem > 0)
+ squeezedText = i18n("%1 %2 of %3").arg(squeezedMsg).arg(mCurItem).arg(mMaxItem);
+ else
+ squeezedText = QString("%1 %2%").arg(squeezedMsg).arg(percent);
+ int squeezedWidth = fm.width(squeezedText);
+
+ // estimate how many letters we can add to the dots on both sides
+ int letters = fullText.length() * (labelWidth - squeezedWidth) / textWidth / 2;
+ squeezedMsg = labelMsg.left(letters) + "..." + labelMsg.right(letters);
+ if (mCurItem > 0)
+ squeezedText = i18n("%1 %2 of %3").arg(squeezedMsg).arg(mCurItem).arg(mMaxItem);
+ else
+ squeezedText = QString("%1 %2%").arg(squeezedMsg).arg(percent);
+ squeezedWidth = fm.width(squeezedText);
+
+ if (squeezedWidth < labelWidth) {
+ // we estimated too short
+ // add letters while text < label
+ do {
+ letters++;
+ squeezedMsg = labelMsg.left(letters) + "..." +
+ labelMsg.right(letters);
+ if (mCurItem > 0)
+ squeezedText = i18n("%1 %2 of %3").arg(squeezedMsg).arg(mCurItem).arg(mMaxItem);
+ else
+ squeezedText = QString("%1 %2%").arg(squeezedMsg).arg(percent);
+ squeezedWidth = fm.width(squeezedText);
+ } while (squeezedWidth < labelWidth);
+ letters--;
+ squeezedMsg = labelMsg.left(letters) + "..." +
+ labelMsg.right(letters);
+ if (mCurItem > 0)
+ squeezedText = i18n("%1 %2 of %3").arg(squeezedMsg).arg(mCurItem).arg(mMaxItem);
+ else
+ squeezedText = QString("%1 %2%").arg(squeezedMsg).arg(percent);
+ } else if (squeezedWidth > labelWidth) {
+ // we estimated too long
+ // remove letters while text > label
+ do {
+ letters--;
+ squeezedMsg = labelMsg.left(letters) + "..." +
+ labelMsg.right(letters);
+ if (mCurItem > 0)
+ squeezedText = i18n("%1 %2 of %3").arg(squeezedMsg).arg(mCurItem).arg(mMaxItem);
+ else
+ squeezedText = QString("%1 %2%").arg(squeezedMsg).arg(percent);
+ squeezedWidth = fm.width(squeezedText);
+ } while (squeezedWidth > labelWidth);
+ }
+
+ if (letters < 5) {
+ // too few letters added -> we give up squeezing
+ labelText = fullText;
+ } else
+ labelText = squeezedText;
+
+ QToolTip::remove(this);
+ QToolTip::add(this, fullText);
+ } else {
+ labelText = fullText;
+ QToolTip::remove( this );
+ QToolTip::hide();
+ };
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/kde2/kpsion/statusbarprogress.h b/kde2/kpsion/statusbarprogress.h
new file mode 100644
index 0000000..9b1ae4d
--- /dev/null
+++ b/kde2/kpsion/statusbarprogress.h
@@ -0,0 +1,169 @@
+/*-*-c++-*-
+ * $Id$
+ *
+ * Shamelessly stolen from:
+ * khexedit - Versatile hex editor
+ * Copyright (C) 1999 Espen Sand, espensa@online.no
+ * This file is based on the work by Martynas Kunigelis (KProgress)
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifndef _STATUSBAR_PROGRESS_H_
+#define _STATUSBAR_PROGRESS_H_
+
+#include <qframe.h>
+#include <qrangecontrol.h>
+
+class KPsionStatusBarProgress : public QFrame, public QRangeControl {
+ Q_OBJECT
+
+public:
+ /**
+ * Possible values for orientation
+ */
+ enum Orientation { Horizontal, Vertical };
+
+ /**
+ * Possible values for bar style.
+ *
+ * Solid means one continuous progress bar, Blocked means a
+ * progress bar made up of several blocks.
+ */
+ enum BarStyle { Solid, Blocked };
+
+ /**
+ * Construct a default progress bar. Orientation is horizontal.
+ */
+ KPsionStatusBarProgress(QWidget *parent=0, const char *name=0);
+
+ /**
+ * Construct a KProgress bar with an orientation.
+ */
+ KPsionStatusBarProgress(Orientation, QWidget *parent=0, const char *name=0);
+
+ /**
+ * Construct a KProgress bar with minimum, maximum and initial value.
+ */
+ KPsionStatusBarProgress(int minValue, int maxValue, int value, Orientation,
+ QWidget *parent=0, const char *name=0);
+
+ /**
+ * Destructor
+ */
+ ~KPsionStatusBarProgress( void );
+
+ /**
+ * Set the progress bar style. Allowed values are Solid and Blocked.
+ */
+ void setBarStyle(BarStyle style);
+
+ /**
+ * Set the color of the progress bar.
+ */
+ void setBarColor(const QColor &);
+
+ /**
+ * Set a pixmap to be shown in the progress bar.
+ */
+ void setBarPixmap(const QPixmap &);
+
+ /**
+ * Set the orientation of the progress bar.
+ * Allowed values are Horizonzal and Vertical.
+ */
+ void setOrientation(Orientation);
+
+ /**
+ * Retrieve the bar style.
+ */
+ BarStyle barStyle() const;
+
+ /**
+ * Retrieve the bar color.
+ */
+ const QColor &barColor() const;
+
+ /**
+ * Retrieve the bar pixmap.
+ */
+ const QPixmap *barPixmap() const;
+
+ /**
+ * Retrieve the orientation.
+ */
+ Orientation orientation() const;
+
+ /**
+ * Returns TRUE if progress text will be displayed, FALSE otherwise.
+ */
+ bool textEnabled() const;
+
+ /**
+ * Returns the recommended width for vertical progress bars or
+ * the recommended height for vertical progress bars
+ */
+ virtual QSize sizeHint() const;
+
+
+public slots:
+ void setValue( int );
+ void setValue( int, int);
+ void advance( int );
+ void setTextEnabled( bool state );
+ void setText( const QString &msg );
+
+signals:
+ void percentageChanged(int);
+ void pressed( void );
+
+protected:
+ void valueChange();
+ void rangeChange();
+ void styleChange( GUIStyle );
+ void paletteChange( const QPalette & );
+ void drawContents( QPainter * );
+ void mousePressEvent( QMouseEvent *e );
+
+private:
+ QPixmap *mBarPixmap;
+ QColor mBarColor;
+ QColor mBarTextColor;
+ QColor mTextColor;
+ QRect fr;
+ BarStyle mBarStyle;
+ Orientation mOrientation;
+ bool mTextEnabled;
+ QString labelMsg;
+ QString labelText;
+ int mCurItem;
+ int mMaxItem;
+
+ void initialize(void);
+ int recalcValue(int);
+ void drawText(QPainter *);
+ void adjustStyle(void);
+ void squeezeTextToLabel(void);
+};
+
+
+#endif
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/kde2/po/de/kpsion.po b/kde2/po/de/kpsion.po
index 467456b..7146209 100644
--- a/kde2/po/de/kpsion.po
+++ b/kde2/po/de/kpsion.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: plptools 0.7\n"
-"POT-Creation-Date: 2001-02-15 21:17+0100\n"
-"PO-Revision-Date: 2001-02-15 22:13CET\n"
+"POT-Creation-Date: 2001-03-05 09:37+0100\n"
+"PO-Revision-Date: 2001-03-05 09:39CET\n"
"Last-Translator: Fritz Elfert <felfert@to.com>\n"
"Language-Team: Deutsch <de@li.org>\n"
"MIME-Version: 1.0\n"
@@ -14,15 +14,40 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 0.8\n"
-#: kpsion.cpp:37
+#: kpsion.cpp:241
+msgid "Available backups"
+msgstr "Verfügbare Sicherungen"
+
+#: kpsion.cpp:275
+msgid "Full"
+msgstr "Voll"
+
+#: kpsion.cpp:282
+msgid "Incremental"
+msgstr "Inkremental"
+
+#: kpsion.cpp:289
+msgid "%1 backup, created at %2"
+msgstr "%1-Sicherung vom %2"
+
+#: kpsion.cpp:321
+msgid ""
+"<qt>Here, you can select the available backups. Select the items you want to "
+"restore, the click on <b>Start</b> to start restoring these items.</qt>"
+msgstr ""
+"<qt>Hier sehen Sie die verfügbaren Sicherungen. Wählen Sie die Dateien, "
+"die Siezurücksichern wollen aus. Klicken Sie dann auf die Schaltfläche "
+"<B>Start</B> um dieseDateien zu restaurieren.</qt>"
+
+#: kpsion.cpp:460
msgid "Idle"
msgstr "Bereit"
-#: kpsion.cpp:62 wizards.cpp:210
+#: kpsion.cpp:499 wizards.cpp:232
msgid "off"
msgstr "aus"
-#: kpsion.cpp:66
+#: kpsion.cpp:503
msgid ""
"<qt>Here, you see your Psion's drives.<br/>Every drive is represented by an "
"Icon. If you click on it, it gets selected for the next operation. E.g.: "
@@ -36,64 +61,65 @@ msgstr ""
"abzuwählen.<br/>Wählen Sie beliebig viele Laufwerke und dann eine "
"Operation.</qt>"
-#: kpsion.cpp:101
+#: kpsion.cpp:566
msgid "Start &Format"
msgstr "Starte &Formatierung"
-#: kpsion.cpp:103
+#: kpsion.cpp:568
msgid "Start Full &Backup"
msgstr "Starte &Komplett-Sicherung"
-#: kpsion.cpp:105
+#: kpsion.cpp:571
msgid "Start &Incremental Backup"
msgstr "Starte &inkrementelle Sicherung"
-#: kpsion.cpp:107
+#: kpsion.cpp:573
msgid "Start &Restore"
msgstr "Starte &Rücksicherung"
-#: kpsion.cpp:116
+#: kpsion.cpp:587
msgid "Full backup of selected drive(s)"
msgstr "Komplett-Sicherung der ausgewählten Laufwerke"
-#: kpsion.cpp:117
+#: kpsion.cpp:589
msgid "Incremental backup of selected drive(s)"
msgstr "Inkrementelle Sicherung der ausgewählten Laufwerke"
-#: kpsion.cpp:118
+#: kpsion.cpp:591
msgid "Restore selected drive(s)"
msgstr "Sichere ausgewählte Laufwerke zurück"
-#: kpsion.cpp:119
+#: kpsion.cpp:593
msgid "Format selected drive(s)"
msgstr "Formatiere ausgewählte Laufwerke"
-#: kpsion.cpp:187
+#: kpsion.cpp:664
msgid "Retrieving machine info ..."
msgstr "Ermittle Geräte-Info ..."
-#: kpsion.cpp:190
+#: kpsion.cpp:675
msgid "Could not get Psion machine info"
msgstr "Konnte Psion Geräteinfo nicht ermitteln"
-#: kpsion.cpp:202
+#: kpsion.cpp:688
msgid "an unknown machine"
msgstr "einem unbekannten Gerät"
-#: kpsion.cpp:213
+#: kpsion.cpp:701
msgid "Retrieving drive list ..."
msgstr "Ermittle Laufwerks-Liste ..."
-#: kpsion.cpp:215
+#: kpsion.cpp:704
msgid "Could not get list of drives"
msgstr "Konnte Liste der Laufwerke nicht ermitteln"
-#: kpsion.cpp:233
+#: kpsion.cpp:722 kpsion.cpp:913 kpsion.cpp:935 kpsion.cpp:958 kpsion.cpp:1068
+#: kpsion.cpp:1245 kpsion.cpp:1376 kpsion.cpp:1385
#, c-format
msgid "Connected to %1"
msgstr "Verbunden mit %1"
-#: kpsion.cpp:251
+#: kpsion.cpp:739
msgid ""
"A backup is running.\n"
"Do you really want to quit?"
@@ -101,7 +127,7 @@ msgstr ""
"Eine Sicherung läuft.\n"
"Wollen Sie wirklich das Programm beenden?"
-#: kpsion.cpp:253
+#: kpsion.cpp:741
msgid ""
"A restore is running.\n"
"Do you really want to quit?"
@@ -109,7 +135,7 @@ msgstr ""
"Eine Rücksicherung läuft.\n"
"Wollen Sie wirklich das Programm beenden?"
-#: kpsion.cpp:255
+#: kpsion.cpp:743
msgid ""
"A format is running.\n"
"Do you really want to quit?"
@@ -117,77 +143,161 @@ msgstr ""
"Eine Formatierung läuft.\n"
"Wollen Sie wirklich das Programm beenden?"
-#: kpsion.cpp:280
+#: kpsion.cpp:769
msgid "Connecting ..."
msgstr "Verbindungsaufbau ..."
-#: kpsion.cpp:282
+#: kpsion.cpp:771
msgid "RFSV could not connect to ncpd at %1:%2. "
msgstr "RFSV konnte ncpd auf %1:%2 nicht erreichen. "
-#: kpsion.cpp:285 kpsion.cpp:301 kpsion.cpp:319 kpsion.cpp:339
+#: kpsion.cpp:774 kpsion.cpp:791 kpsion.cpp:810 kpsion.cpp:831
msgid " (Retry in %1 seconds.)"
msgstr " (Wiederholung in %1 Sekunden.)"
-#: kpsion.cpp:296
+#: kpsion.cpp:786
#, c-format
msgid "RFSV could not establish link: %1."
msgstr "RFSV konnte keine Verbindung aufbauen: %1."
-#: kpsion.cpp:312
+#: kpsion.cpp:803
msgid "RPCS could not connect to ncpd at %1:%2."
msgstr "RPCS konnte ncpd auf %1:%2 nicht erreichen."
-#: kpsion.cpp:330
+#: kpsion.cpp:822
#, c-format
msgid "RPCS could not establish link: %1."
msgstr "RPCS konnte keine Verbindung aufbauen: %1."
-#: kpsion.cpp:380 kpsion.cpp:433
-msgid "Backup"
-msgstr "Sicherung"
-
-#: kpsion.cpp:407
+#: kpsion.cpp:917
#, c-format
msgid "Could not retrieve drive details for drive %1"
msgstr "Konnte Details des Laufwerks %1 nicht ermitteln."
-#: kpsion.cpp:414
+#: kpsion.cpp:922
#, c-format
msgid "Scanning drive %1"
msgstr "Durchsuche Laufwerk %1"
-#: kpsion.cpp:423
+#: kpsion.cpp:931
msgid "%1 files need backup"
msgstr "%1 Dateien müssen gesichert werden"
-#: kpsion.cpp:425
+#: kpsion.cpp:937
msgid "No files need backup"
msgstr "Keine Dateien zu sichern"
-#: kpsion.cpp:446
+#: kpsion.cpp:960
#, c-format
msgid "Could not create backup folder %1"
msgstr "Konnte Sicherungs-Ordner %1 nicht anlegen."
-#: kpsion.cpp:499
-#, c-format
-msgid "Backing up %1"
-msgstr "Sichere %1"
+#: kpsion.cpp:984
+msgid "Backup %1% done"
+msgstr "Sicherung %1% beendet"
-#: kpsion.cpp:511
+#: kpsion.cpp:1004
msgid "<QT>Could not open<BR/><B>%1</B></QT>"
msgstr "<QT>Konnte<BR/><B>%1</B><BR/>nicht öffnen</QT>"
-#: kpsion.cpp:530
+#: kpsion.cpp:1024
msgid "<QT>Could not read<BR/><B>%1</B></QT>"
msgstr "<QT>Konnte<BR/><B>%1</B><BR/>nicht lesen</QT>"
-#: kpsion.cpp:551
+#: kpsion.cpp:1037
+msgid "Resetting archive attributes"
+msgstr "Setze Archiv-Attribute zurück"
+
+#: kpsion.cpp:1050
+msgid "<QT>Could not set attributes of<BR/><B>%1</B></QT>"
+msgstr "<QT>Konnte Attribute der Datei<BR/><B>%1</B><BR/>nicht setzen</QT>"
+
+#: kpsion.cpp:1072
msgid "Backup done"
msgstr "Sicherung beendet"
-#: kpsion.cpp:563
+#: kpsion.cpp:1076
+msgid "Restore"
+msgstr "Rücksicherung"
+
+#: kpsion.cpp:1080
+msgid "Start"
+msgstr "Start"
+
+#: kpsion.cpp:1083
+msgid ""
+"Select items in the list of available backups, then click here to start "
+"restore of these items."
+msgstr ""
+"Wählen Sie in der Liste der verfügbaren Sicherungen Dateien aus und "
+"klicken Sie dann hier um die gewählten Dateien zu restaurieren."
+
+#: kpsion.cpp:1130 kpsion.cpp:1343
+msgid "<QT>Could not get attributes of<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+"<QT>Konnte Attribute der Datei<BR/><B>%1</B> nicht abfragen<BR/>Grund: "
+"%2</QT>"
+
+#: kpsion.cpp:1159
+msgid "Overwrite"
+msgstr "Überschreiben"
+
+#: kpsion.cpp:1162
+msgid "Overwrite &All"
+msgstr "Überschreibe &Alles"
+
+#: kpsion.cpp:1175
+msgid ""
+"<QT>The file <B>%1</B> exists already on the Psion with different size "
+"and/or attributes.<P><B>On the Psion:</B><BR/> Size: %2<BR/> Date: %3<BR/> "
+" Attributes: %4</P><P><B>In backup:</B><BR/> Size: %5<BR/> Date: %6<BR/> "
+"Attributes: %7</P>Do you want to overwrite it?</QT>"
+msgstr ""
+"<QT>Die Datei <B>%1</B> existiert bereits auf dem Psion mit abweichender "
+"Größe und/oder Attributen.<P><B>Auf dem Psion:</B><BR/> Größe: "
+"%2<BR/> Datum: %3<BR/> Attribute: "
+"%4</P><P><B>Sicherungsdatei:</B><BR/> Größe: %5<BR/> Datum: "
+"%6<BR/> Attribute: %7</P>Wollen Sie die Datei überschreiben?</QT>"
+
+#: kpsion.cpp:1213
+msgid "Reading backups ..."
+msgstr "Lese Sicherungsdaten ..."
+
+#: kpsion.cpp:1218
+msgid "Selecting backups ..."
+msgstr "Wähle Sicherungsdaten ..."
+
+#: kpsion.cpp:1250
+msgid "Restore %1% done"
+msgstr "Rücksicherung %1% abgeschlossen"
+
+#: kpsion.cpp:1298
+msgid "<QT>Could not create directory<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr "<QT>Konnte den Ordner<BR/><B>%1</B> nicht anlegen.<BR/>Grund: %2</QT>"
+
+#: kpsion.cpp:1313
+msgid "<QT>Could not create<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr "<QT>Konnte<BR/><B>%1</B> nicht anlegen<BR/>Grund: %2</QT>"
+
+#: kpsion.cpp:1335
+msgid "<QT>Could not write to<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr "<QT>Konnte nicht auf <BR/><B>%1</B> schreiben<BR/>Grund: %2</QT>"
+
+#: kpsion.cpp:1353
+msgid "<QT>Could not set attributes of<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr "<QT>Konnte Attribute der Datei<BR/><B>%1</B>nicht setzen.<BR/>Grund: %2</QT>"
+
+#: kpsion.cpp:1360
+msgid "<QT>Could not set modification time of<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+"<QT>Konnte Änderungsdatum der Datei<BR/><B>%1</B> nicht setzen<BR/>Grund: "
+"%2</QT>"
+
+#: kpsion.cpp:1387
+msgid "Restore done"
+msgstr "Rücksicherung abgeschlossen"
+
+#: kpsion.cpp:1393
msgid ""
"<QT>This erases <B>ALL</B> data on the drive(s).<BR/>Do you really want to "
"proceed?"
@@ -195,49 +305,61 @@ msgstr ""
"<QT>Hierdurch werden <B>ALLE</B> Daten auf dem(den) Laufwerk(en) "
"gelöscht.<BR/>Wollen Sie wirklich fortfahren?</QT>"
-#: kpsion.cpp:611
-msgid "Backup %1% complete"
-msgstr "Sicherung %1% erledigt"
-
-#: kpsion.cpp:676
+#: kpsion.cpp:1510
#, c-format
msgid "Stopping %1"
msgstr "Stoppe %1"
-#: kpsion.cpp:697
+#: kpsion.cpp:1532
#, c-format
msgid "Starting %1"
msgstr "Starte %1"
-#: kpsion.moc.cpp:43 kpsion.moc.cpp:48
+#: kpsion.moc.cpp:42 kpsion.moc.cpp:47
+msgid "KPsionCheckListItem"
+msgstr "KPsionCheckListItem"
+
+#: kpsion.moc.cpp:109 kpsion.moc.cpp:114
+msgid "KPsionBackupListView"
+msgstr "KPsionBackupListView"
+
+#: kpsion.moc.cpp:184 kpsion.moc.cpp:189
+msgid "KPsionRestoreDialog"
+msgstr "KPsionRestoreDialog"
+
+#: kpsion.moc.cpp:246 kpsion.moc.cpp:251
msgid "KPsionMainWindow"
msgstr "KPsionMainWindow"
-#: main.cpp:15
+#: main.cpp:48
+msgid "perform scheduled backup"
+msgstr "Führe geplante Sicherung durch"
+
+#: main.cpp:50
msgid "perform backup"
msgstr "Führe Sicherung durch"
-#: main.cpp:17
+#: main.cpp:52
msgid "perform restore"
msgstr "Führe Rücksicherung durch"
-#: main.cpp:19
+#: main.cpp:54
msgid "format drive"
msgstr "Formatiere Laufwerk"
-#: main.cpp:20
+#: main.cpp:55
msgid "The drive letter to backup/restore or format."
msgstr "Der Buchstabe des zu bearbeitenden Laufwerks."
-#: main.cpp:25
+#: main.cpp:60
msgid "KPsion"
msgstr "KPsion"
-#: main.cpp:26
+#: main.cpp:61
msgid "Psion connectivity utility"
msgstr "Werkzeug für Psion PDA"
-#: main.cpp:31
+#: main.cpp:66
msgid "Original Developer/Maintainer"
msgstr "Original Entwickler/Betreuer"
@@ -249,11 +371,11 @@ msgstr "&Allgemein"
msgid "Backup &directory"
msgstr "&Ordner für Sicherungen"
-#: setupdialog.cpp:30 wizards.cpp:87
+#: setupdialog.cpp:30 wizards.cpp:109
msgid "Browse"
msgstr "Durchsuchen"
-#: setupdialog.cpp:33 wizards.cpp:160
+#: setupdialog.cpp:33 wizards.cpp:182
msgid "Backup &generations"
msgstr "Sicherungs-&Generationen"
@@ -269,20 +391,29 @@ msgstr "&Name des Geräts"
msgid "Machine &UID"
msgstr "&UID des Geräts"
-#: wizards.cpp:26
+#: statusbarprogress.cpp:357 statusbarprogress.cpp:370
+#: statusbarprogress.cpp:379 statusbarprogress.cpp:392
+#: statusbarprogress.cpp:401 statusbarprogress.cpp:412
+msgid "%1 %2 of %3"
+msgstr "%1 %2 von %3"
+
+#: statusbarprogress.moc.cpp:42 statusbarprogress.moc.cpp:47
+msgid "KPsionStatusBarProgress"
+msgstr "KPsionStatusBarProgress"
+
+#: wizards.cpp:48
msgid "KPsion Setup"
msgstr "KPsion Einstellungen"
-#: wizards.cpp:28 wizards.cpp:411
+#: wizards.cpp:50 wizards.cpp:433
msgid "Click this button to continue with the next page."
-msgstr ""
-"Betätigen Sie diese Schaltfläche um mit der nächsten Seite fortzufahren."
+msgstr "Betätigen Sie diese Schaltfläche um mit der nächsten Seite fortzufahren."
-#: wizards.cpp:30 wizards.cpp:413
+#: wizards.cpp:52 wizards.cpp:435
msgid "Click this button, to go to a previous page."
msgstr "Betätigen Sie diese Schaltfläche, um zur vorigen Seite zu kommen."
-#: wizards.cpp:32
+#: wizards.cpp:54
msgid ""
"<QT>If you click this button, the setup of <B>KPSion</B> will be aborted and "
"next time you start <B>KPsion</B>, it will run this setup again.</QT>"
@@ -291,7 +422,7 @@ msgstr ""
"<B>KPsion</B> abgebrochen. Beim nächsten Start von <B>KPsion</B> wird dann "
"die Konfiguration erneut gestartet.</QT>"
-#: wizards.cpp:49
+#: wizards.cpp:71
msgid ""
"<QT><H2>Welcome to KPsion!</H2>It looks like you started <B>KPsion</B> the "
"first time. At least, i could not find any valid configuration.</BR>On the "
@@ -304,11 +435,11 @@ msgstr ""
"sammeln, die für die Arbeit mit <B>KPsion</B> nötig sind.</BR> </BR>Viel "
"Spaß.</QT>"
-#: wizards.cpp:66
+#: wizards.cpp:88
msgid "<QT><BIG><B>Welcome<B></BIG></QT>"
msgstr "<QT><BIG><B>Willkommen<B></BIG></QT>"
-#: wizards.cpp:74
+#: wizards.cpp:96
msgid ""
"<QT>First, we need a folder for storing backups of your Psion. You probably "
"don't want others to have access to it, so it's best to choose a location "
@@ -322,11 +453,11 @@ msgstr ""
"adäquate Stelle oder akzeptieren Sie einfach die unten angezeigte "
"Vorgabe.</QT>"
-#: wizards.cpp:90
+#: wizards.cpp:112
msgid "This is the name of the backup folder."
msgstr "Dies ist der Name des Sicherungs-Ordners."
-#: wizards.cpp:92
+#: wizards.cpp:114
msgid ""
"Click here, for opening a dialog which lets you easily select the backup "
"folder."
@@ -334,11 +465,11 @@ msgstr ""
"Aktivieren Sie diese Schaltfläche, um einen Dialog zu öffnen welcher es "
"Ihnen auf einfache Weise erlaubt, den Sicherungs-Ordner zu wählen."
-#: wizards.cpp:107
+#: wizards.cpp:129
msgid "<QT><BIG><B>Step 1</B></BIG> - Specify backup directory</QT>"
msgstr "<QT><BIG><B>Schritt 1</B></BIG> - Angabe des Sicherungs-Ordners</QT>"
-#: wizards.cpp:114
+#: wizards.cpp:136
msgid ""
"<QT>Next, please specify some information regarding backup "
"policy:<UL><LI>How many generations of backups do you want to "
@@ -350,63 +481,63 @@ msgstr ""
"aufheben?</LI><LI>Soll ich Sie an Sicherungen erinnern?</LI><LI>Wenn ja, in "
"welchen Intervallen?</LI></UL></QT>"
-#: wizards.cpp:124
+#: wizards.cpp:146
msgid "&Incremental backup reminder"
msgstr "Erinnerung an &inkrementelle Sicherung"
-#: wizards.cpp:127 wizards.cpp:145
+#: wizards.cpp:149 wizards.cpp:167
msgid "none"
msgstr "keine"
-#: wizards.cpp:128 wizards.cpp:146
+#: wizards.cpp:150 wizards.cpp:168
msgid "daily"
msgstr "täglich"
-#: wizards.cpp:129 wizards.cpp:147
+#: wizards.cpp:151 wizards.cpp:169
msgid "every 2 days"
msgstr "alle 2 Tage"
-#: wizards.cpp:130 wizards.cpp:148
+#: wizards.cpp:152 wizards.cpp:170
msgid "every 3 days"
msgstr "alle 3 Tage"
-#: wizards.cpp:131 wizards.cpp:149
+#: wizards.cpp:153 wizards.cpp:171
msgid "every 4 days"
msgstr "alle 4 Tage"
-#: wizards.cpp:132 wizards.cpp:150
+#: wizards.cpp:154 wizards.cpp:172
msgid "every 5 days"
msgstr "alle 5 Tage"
-#: wizards.cpp:133 wizards.cpp:151
+#: wizards.cpp:155 wizards.cpp:173
msgid "every 6 days"
msgstr "alle 6 Tage"
-#: wizards.cpp:134 wizards.cpp:152
+#: wizards.cpp:156 wizards.cpp:174
msgid "weekly"
msgstr "wöchentlich"
-#: wizards.cpp:135 wizards.cpp:153
+#: wizards.cpp:157 wizards.cpp:175
msgid "every 2 weeks"
msgstr "alle 2 Wochen"
-#: wizards.cpp:136 wizards.cpp:154
+#: wizards.cpp:158 wizards.cpp:176
msgid "every 3 weeks"
msgstr "alle 3 Wochen"
-#: wizards.cpp:137 wizards.cpp:155
+#: wizards.cpp:159 wizards.cpp:177
msgid "monthly"
msgstr "monatlich"
-#: wizards.cpp:142
+#: wizards.cpp:164
msgid "&Full backup reminder"
msgstr "Erinnerung an &Komplett-Sicherung"
-#: wizards.cpp:178
+#: wizards.cpp:200
msgid "<QT><BIG><B>Step 2</B></BIG> - Backup policy</QT>"
msgstr "<QT><BIG><B>Schritt 2</B></BIG> - Sicherungs-Strategie</QT>"
-#: wizards.cpp:186
+#: wizards.cpp:208
msgid ""
"<QT>If no connection could be established on startup, <B>KPsion</B> will "
"attempt to connect in regular intervals. Please specify the interval after "
@@ -427,55 +558,55 @@ msgstr ""
"Schnittstellengeschwindigkeit angeben</LI><LI>die Rechte zum Öffnen des "
"angegebenen Ports besitzen</LI></UL></QT>"
-#: wizards.cpp:201
+#: wizards.cpp:223
msgid "&Connection retry interval (sec.)"
msgstr "&Verbindungsaufbau-Intervall (in sek.)"
-#: wizards.cpp:207
+#: wizards.cpp:229
msgid "Serial &device"
msgstr "&Serielle Schnittstelle"
-#: wizards.cpp:211
+#: wizards.cpp:233
msgid "/dev/ttyS0"
msgstr "/dev/ttyS0"
-#: wizards.cpp:212
+#: wizards.cpp:234
msgid "/dev/ttyS1"
msgstr "/dev/ttyS1"
-#: wizards.cpp:213
+#: wizards.cpp:235
msgid "/dev/ttyS2"
msgstr "/dev/ttyS2"
-#: wizards.cpp:214
+#: wizards.cpp:236
msgid "/dev/ttyS3"
msgstr "/dev/ttyS3"
-#: wizards.cpp:215
+#: wizards.cpp:237
msgid "/dev/ircomm0"
msgstr "/dev/ircomm0"
-#: wizards.cpp:216
+#: wizards.cpp:238
msgid "/dev/ircomm1"
msgstr "/dev/ircomm1"
-#: wizards.cpp:217
+#: wizards.cpp:239
msgid "/dev/ircomm2"
msgstr "/dev/ircomm2"
-#: wizards.cpp:218
+#: wizards.cpp:240
msgid "/dev/ircomm3"
msgstr "/dev/ircomm3"
-#: wizards.cpp:223
+#: wizards.cpp:245
msgid "Serial &speed"
msgstr "Schnittstellen-&Geschwindigkeit"
-#: wizards.cpp:247
+#: wizards.cpp:269
msgid "<QT><BIG><B>Step 3</B></BIG> - Connection parameters</QT>"
msgstr "<QT><BIG><B>Schritt 3</B></BIG> - Verbindungs-Parameter</QT>"
-#: wizards.cpp:255
+#: wizards.cpp:277
msgid ""
"<QT>That's it!<BR/>Next, i will start <B>KPsion</B> and if your Psion is "
"already connected and it's communication turned on (use <B>Ctrl-T</B> at "
@@ -491,15 +622,15 @@ msgstr ""
"durchzuführen.<BR/>Bitte betätigen Sie nun die Schaltfläche "
"<B>Abschließen</B>.</QT>"
-#: wizards.cpp:274
+#: wizards.cpp:296
msgid "<QT><BIG><B>Finished</B></BIG></QT>"
msgstr "<QT><BIG><B>Fertig<B></BIG></QT>"
-#: wizards.cpp:282
+#: wizards.cpp:304
msgid "Backup folder"
msgstr "Sicherungs-Ordner"
-#: wizards.cpp:292
+#: wizards.cpp:314
msgid ""
"<QT>You are about to abort the initial setup of <B>KPsion</B>. No "
"configuration will be stored and you will have to repeat this procedure when "
@@ -510,19 +641,17 @@ msgstr ""
"Vorgang wiederholen müssen, wenn Sie <B>KPsion</B> das nächste Mal "
"starten.<BR/>Wollen Sie das Programm wirklich verlassen?</QT>"
-#: wizards.cpp:347
-msgid ""
-"<QT>The folder <B>%1</B> does <B>not</B> exist.<BR/>Shall it be created?</QT>"
+#: wizards.cpp:369
+msgid "<QT>The folder <B>%1</B> does <B>not</B> exist.<BR/>Shall it be created?</QT>"
msgstr ""
"<QT>Der Ordner <B>%1</B> existiert <B>nicht</B>.<BR/>Soll er angelegt "
"werden?</QT>"
-#: wizards.cpp:352
+#: wizards.cpp:374
msgid "<QT>The specified folder<BR/><B>%1</B><BR/>could <B>not</B> be created"
-msgstr ""
-"<QT>Der angegebene Ordner<BR/><B>%1</B><BR/>konnte nicht angelegt werden"
+msgstr "<QT>Der angegebene Ordner<BR/><B>%1</B><BR/>konnte nicht angelegt werden"
-#: wizards.cpp:357
+#: wizards.cpp:379
msgid ""
", because you either don't have sufficient rights to do that, or the "
"filesystem is readonly."
@@ -530,15 +659,15 @@ msgstr ""
", weil Sie entweder nicht die nötigen Rechte besitzen, oder das Dateisystem "
"nur lesbar ist."
-#: wizards.cpp:361
+#: wizards.cpp:383
msgid ", because the filesystem has not enough space."
msgstr ", weil auf dem Dateisystem kein Platz mehr ist."
-#: wizards.cpp:367
+#: wizards.cpp:389
msgid ", because there already exists another object with the same name."
msgstr ", weil schon ein anderes Objekt mit dem selben Namen existiert."
-#: wizards.cpp:377
+#: wizards.cpp:399
msgid ""
", because you specified a path which probably contains a dangling symbolic "
"link."
@@ -546,7 +675,7 @@ msgstr ""
", weil Sie eine Pfad angegeben haben, der eine nicht aufgelöste symbolische "
"Verknüpfung enthält."
-#: wizards.cpp:380
+#: wizards.cpp:402
msgid ""
", because you specified a path which contains an element which is not a "
"folder."
@@ -554,21 +683,21 @@ msgstr ""
", weil Sie eine Pfad angegeben haben, der ein Element enthält, welches kein "
"Ordner ist."
-#: wizards.cpp:384
+#: wizards.cpp:406
msgid ", because you specified a path which contains too many symbolic links."
msgstr ""
", weil Sie eine Pfad angegeben haben, der zu viele symbolische "
"Verknüpfungen enthält."
-#: wizards.cpp:391
+#: wizards.cpp:413
msgid "<BR/>Please select another folder.</QT>"
msgstr "<BR/>Bitte wählen Sie einen anderen Ordner.</QT>"
-#: wizards.cpp:407
+#: wizards.cpp:429
msgid "New Psion detected"
msgstr "Neuer Psion erkannt"
-#: wizards.cpp:415
+#: wizards.cpp:437
msgid ""
"<QT>If you click this button, the setup for the new connected Psion will be "
"aborted and next time you connect this Psion again, <B>KPsion</B> will run "
@@ -578,7 +707,7 @@ msgstr ""
"den neuen Psion nicht gespeichert. Beim nächsten Verbindungsaufbau mit "
"diesem Psion wird <B>KPsion</B> dann erneut diesen Dialog präsentieren.</QT>"
-#: wizards.cpp:424
+#: wizards.cpp:446
msgid ""
"<QT>The Psion with the unique ID <B>%1</B> is connected the first time. "
"Please assign a name to it.</QT>"
@@ -586,19 +715,19 @@ msgstr ""
"<QT>Zum Psion mit der ID <B>%1</B> wurde erstmalig Verbindung aufgenommen. "
"Bitte weisen Sie diesem Gerät einen Namen zu.</QT>"
-#: wizards.cpp:431
+#: wizards.cpp:453
msgid "&Name of new Psion"
msgstr "&Name des neuen Psion"
-#: wizards.cpp:433
+#: wizards.cpp:455
msgid "My new Psion"
msgstr "Mein neuer Psion"
-#: wizards.cpp:450
+#: wizards.cpp:472
msgid "<QT><BIG><B>New Psion detected<B></BIG></QT>"
msgstr "<QT><BIG><B>Neuer Psion erkannt<B></BIG></QT>"
-#: wizards.cpp:458
+#: wizards.cpp:480
msgid ""
"<QT>Please select the Drive(s), you want to be backed up when running in "
"unattended backup mode.</QT>"
@@ -606,19 +735,19 @@ msgstr ""
"<QT>Bitte wählen sie die Laufwerke aus, die bei einer automatischen "
"Sicherung gesichertwerden sollen.</QT>"
-#: wizards.cpp:466
+#: wizards.cpp:488
msgid "Available drives"
msgstr "Verfügbare Laufwerke"
-#: wizards.cpp:490
+#: wizards.cpp:512
msgid "<QT><BIG><B>Specify drives to backup<B></BIG></QT>"
msgstr "<QT><BIG><B>Wahl der zu sichernden Laufwerke<B></BIG></QT>"
-#: wizards.cpp:514
+#: wizards.cpp:536
msgid "The name cannot be empty."
msgstr "Der Name darf nicht leer sein."
-#: wizards.cpp:521
+#: wizards.cpp:543
msgid ""
"<QT>The name <B>%1</B> is already assigned to another machine.<BR/>Please "
"choose a different name.</QT>"
@@ -626,10 +755,11 @@ msgstr ""
"<QT>Der Name <B>%1</B> wurde bereits einem anderen Gerät "
"zugewiesen.<BR/>Bitte wählen Sie einen anderen Namen.</QT>"
-#: wizards.moc.cpp:43 wizards.moc.cpp:48
+#: wizards.moc.cpp:42 wizards.moc.cpp:47
msgid "FirstTimeWizard"
msgstr "FirstTimeWizard"
-#: wizards.moc.cpp:112 wizards.moc.cpp:117
+#: wizards.moc.cpp:111 wizards.moc.cpp:116
msgid "NewPsionWizard"
msgstr "NewPsionWizard"
+
diff --git a/kde2/po/de/libplpprops.po b/kde2/po/de/libplpprops.po
index 8741d94..789b35c 100644
--- a/kde2/po/de/libplpprops.po
+++ b/kde2/po/de/libplpprops.po
@@ -31,8 +31,8 @@ msgid ""
"If this is checked, read permission is granted. On series 5, this cannot "
"swiched off."
msgstr ""
-"Wird dieser Schalter aktiviert, so wird die Berechtigung zum Lesen erteilt. Auf einem Serie 5 "
-"kann dieser Schalter <B>nicht</B> abgeschaltet weden."
+"Wird dieser Schalter aktiviert, so wird die Berechtigung zum Lesen erteilt. "
+"Auf einem Serie 5 kann dieser Schalter <B>nicht</B> abgeschaltet weden."
#: plpprops.cc:212
msgid "Writeable"
@@ -40,7 +40,9 @@ msgstr "Schreiben"
#: plpprops.cc:213
msgid "If this is checked, write permission is granted."
-msgstr "Ist dieser Schalter aktiviert, so wird die Berechtigung zum Schreiben erteilt."
+msgstr ""
+"Ist dieser Schalter aktiviert, so wird die Berechtigung zum Schreiben "
+"erteilt."
#: plpprops.cc:218
msgid "Hidden"
@@ -51,8 +53,8 @@ msgid ""
"If this is checked, the file is not shown when displaying the directory on "
"the Psion."
msgstr ""
-"Ist dieser Schalter aktiviert, so wird die Datei bei der Anzeige des Ordners auf dem Psion nicht "
-"angezeigt."
+"Ist dieser Schalter aktiviert, so wird die Datei bei der Anzeige des Ordners "
+"auf dem Psion nicht angezeigt."
#: plpprops.cc:224
msgid "System"
@@ -63,8 +65,11 @@ msgid "Archive"
msgstr "Archiv"
#: plpprops.cc:231
-msgid "If this is checked, the file will be included in the next incremental backup."
-msgstr "Ist dieser Schalter aktiviert, so wird die Datei in die nächste inkrementelle Sicherung einbezogen."
+msgid ""
+"If this is checked, the file will be included in the next incremental backup."
+msgstr ""
+"Ist dieser Schalter aktiviert, so wird die Datei in die nächste "
+"inkrementelle Sicherung einbezogen."
#: plpprops.cc:239
msgid "Executable"
@@ -75,8 +80,8 @@ msgid ""
"If this is checked, the file can be executed on the Psion. This Attribute "
"does not apply to directories."
msgstr ""
-"Ist dieser Schalter aktiviert, so kann die Datei auf dem Psion ausgeführt werden. Dieses "
-"Attribut ist nicht auf Ordner anwendbar."
+"Ist dieser Schalter aktiviert, so kann die Datei auf dem Psion ausgeführt "
+"werden. Dieses Attribut ist nicht auf Ordner anwendbar."
#: plpprops.cc:245
msgid "Stream"
@@ -87,8 +92,8 @@ msgid ""
"If this is checked, the file is a stream. This Attribute does not apply to "
"directories."
msgstr ""
-"Ist dieser Schalter aktiviert, so ist die Datei ein Stream. Dieses "
-"Attribut ist nicht auf Ordner anwendbar."
+"Ist dieser Schalter aktiviert, so ist die Datei ein Stream. Dieses Attribut "
+"ist nicht auf Ordner anwendbar."
#: plpprops.cc:251
msgid "Text"
@@ -99,8 +104,8 @@ msgid ""
"If this is checked, the file is opened in text mode. This Attribute does not "
"apply to directories."
msgstr ""
-"Ist dieser Schalter aktiviert, so wird die Datei im Text-Modus geöffnet. Dieses "
-"Attribut ist nicht auf Ordner anwendbar."
+"Ist dieser Schalter aktiviert, so wird die Datei im Text-Modus geöffnet. "
+"Dieses Attribut ist nicht auf Ordner anwendbar."
#: plpprops.cc:260
msgid "Normal"
@@ -111,8 +116,8 @@ msgid ""
"If this is checked, the file is considered regular. This Attribute does not "
"apply to directories."
msgstr ""
-"Ist dieser Schalter aktiviert, so wird die Datei als normal angesehen. Dieses Attribut is nicht "
-"auf Ordner anwendbar."
+"Ist dieser Schalter aktiviert, so wird die Datei als normal angesehen. "
+"Dieses Attribut is nicht auf Ordner anwendbar."
#: plpprops.cc:266
msgid "Temporary"
@@ -123,8 +128,8 @@ msgid ""
"If this is checked, the file considered temporary. This Attribute does not "
"apply to directories."
msgstr ""
-"Ist dieser Schalter aktiviert, so wird die Datei als temporär angesehen. Dieses Attribut is nicht "
-"auf Ordner anwendbar."
+"Ist dieser Schalter aktiviert, so wird die Datei als temporär angesehen. "
+"Dieses Attribut is nicht auf Ordner anwendbar."
#: plpprops.cc:272
msgid "Compressed"
@@ -135,8 +140,8 @@ msgid ""
"If this is checked, the file is stored in compressed mode. This Attribute "
"does not apply to directories."
msgstr ""
-"Ist dieser Schalter aktiviert, so wird die Datei komprimiert gespeichert. Dieses Attribut is nicht "
-"auf Ordner anwendbar."
+"Ist dieser Schalter aktiviert, so wird die Datei komprimiert gespeichert. "
+"Dieses Attribut is nicht auf Ordner anwendbar."
#: plpprops.cc:293
msgid "Psion &Attributes"
@@ -238,7 +243,8 @@ msgid "Format"
msgstr "Formatieren"
#: plpprops.cc:575
-msgid "Click here, to format this drive. This launches KPsion to perform that task."
+msgid ""
+"Click here, to format this drive. This launches KPsion to perform that task."
msgstr ""
"Klicken Sie hier, um dieses Laufwerk zu formatieren. Zu diesem Zweck wird "
"KPsion gestartet."
@@ -295,7 +301,8 @@ msgstr "Anzeigeformat:"
#: plpprops.cc:756
msgid "Here, the display geometry of the connected device is shown."
-msgstr "Hier sehen Sie die Größe der Anzeigeeinheit des angeschlossenen Geräts."
+msgstr ""
+"Hier sehen Sie die Größe der Anzeigeeinheit des angeschlossenen Geräts."
#: plpprops.cc:757
msgid "Registry size:"
@@ -413,7 +420,8 @@ msgstr "Sicherungs-Batterie"
#: plpprops.cc:816
msgid "This shows the accumulated time of running on backup battery power."
-msgstr "Hier wird die aufsummierte Nutzungszeit der Sicherungsbatterie angezeigt."
+msgstr ""
+"Hier wird die aufsummierte Nutzungszeit der Sicherungsbatterie angezeigt."
#: plpprops.cc:819
msgid "This shows current status of the backup battery."
@@ -491,7 +499,8 @@ msgstr "RAMDisk Größe:"
#: plpprops.cc:864
msgid "This shows, how much RAM is currently used for the RAMDisc."
-msgstr "Hier wird angezeigt, wieviel Speicher gerade von der RAMDisk belegt wird."
+msgstr ""
+"Hier wird angezeigt, wieviel Speicher gerade von der RAMDisk belegt wird."
#: plpprops.cc:912 plpprops.cc:925
msgid "yes"
@@ -511,5 +520,5 @@ msgstr "Psion &Eigner"
#: plpprops.cc:977
msgid "This shows the owner's information of the connected device."
-msgstr "Hier wird die Eigentümer-Information des angeschlossenen Geräts angezeigt."
-
+msgstr ""
+"Hier wird die Eigentümer-Information des angeschlossenen Geräts angezeigt."
diff --git a/kde2/po/kpsion.pot b/kde2/po/kpsion.pot
index fcb5025..7c0bd61 100644
--- a/kde2/po/kpsion.pot
+++ b/kde2/po/kpsion.pot
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-02-15 21:17+0100\n"
+"POT-Creation-Date: 2001-03-05 09:37+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -14,15 +14,37 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
-#: kpsion.cpp:37
+#: kpsion.cpp:241
+msgid "Available backups"
+msgstr ""
+
+#: kpsion.cpp:275
+msgid "Full"
+msgstr ""
+
+#: kpsion.cpp:282
+msgid "Incremental"
+msgstr ""
+
+#: kpsion.cpp:289
+msgid "%1 backup, created at %2"
+msgstr ""
+
+#: kpsion.cpp:321
+msgid ""
+"<qt>Here, you can select the available backups. Select the items you want to "
+"restore, the click on <b>Start</b> to start restoring these items.</qt>"
+msgstr ""
+
+#: kpsion.cpp:460
msgid "Idle"
msgstr ""
-#: kpsion.cpp:62 wizards.cpp:210
+#: kpsion.cpp:499 wizards.cpp:232
msgid "off"
msgstr ""
-#: kpsion.cpp:66
+#: kpsion.cpp:503
msgid ""
"<qt>Here, you see your Psion's drives.<br/>Every drive is represented by an "
"Icon. If you click on it, it gets selected for the next operation. E.g.: "
@@ -30,200 +52,287 @@ msgid ""
"again.<br/>Select as many drives a you want, then choose an operation.</qt>"
msgstr ""
-#: kpsion.cpp:101
+#: kpsion.cpp:566
msgid "Start &Format"
msgstr ""
-#: kpsion.cpp:103
+#: kpsion.cpp:568
msgid "Start Full &Backup"
msgstr ""
-#: kpsion.cpp:105
+#: kpsion.cpp:571
msgid "Start &Incremental Backup"
msgstr ""
-#: kpsion.cpp:107
+#: kpsion.cpp:573
msgid "Start &Restore"
msgstr ""
-#: kpsion.cpp:116
+#: kpsion.cpp:587
msgid "Full backup of selected drive(s)"
msgstr ""
-#: kpsion.cpp:117
+#: kpsion.cpp:589
msgid "Incremental backup of selected drive(s)"
msgstr ""
-#: kpsion.cpp:118
+#: kpsion.cpp:591
msgid "Restore selected drive(s)"
msgstr ""
-#: kpsion.cpp:119
+#: kpsion.cpp:593
msgid "Format selected drive(s)"
msgstr ""
-#: kpsion.cpp:187
+#: kpsion.cpp:664
msgid "Retrieving machine info ..."
msgstr ""
-#: kpsion.cpp:190
+#: kpsion.cpp:675
msgid "Could not get Psion machine info"
msgstr ""
-#: kpsion.cpp:202
+#: kpsion.cpp:688
msgid "an unknown machine"
msgstr ""
-#: kpsion.cpp:213
+#: kpsion.cpp:701
msgid "Retrieving drive list ..."
msgstr ""
-#: kpsion.cpp:215
+#: kpsion.cpp:704
msgid "Could not get list of drives"
msgstr ""
-#: kpsion.cpp:233
+#: kpsion.cpp:722 kpsion.cpp:913 kpsion.cpp:935 kpsion.cpp:958 kpsion.cpp:1068
+#: kpsion.cpp:1245 kpsion.cpp:1376 kpsion.cpp:1385
#, c-format
msgid "Connected to %1"
msgstr ""
-#: kpsion.cpp:251
+#: kpsion.cpp:739
msgid ""
"A backup is running.\n"
"Do you really want to quit?"
msgstr ""
-#: kpsion.cpp:253
+#: kpsion.cpp:741
msgid ""
"A restore is running.\n"
"Do you really want to quit?"
msgstr ""
-#: kpsion.cpp:255
+#: kpsion.cpp:743
msgid ""
"A format is running.\n"
"Do you really want to quit?"
msgstr ""
-#: kpsion.cpp:280
+#: kpsion.cpp:769
msgid "Connecting ..."
msgstr ""
-#: kpsion.cpp:282
+#: kpsion.cpp:771
msgid "RFSV could not connect to ncpd at %1:%2. "
msgstr ""
-#: kpsion.cpp:285 kpsion.cpp:301 kpsion.cpp:319 kpsion.cpp:339
+#: kpsion.cpp:774 kpsion.cpp:791 kpsion.cpp:810 kpsion.cpp:831
msgid " (Retry in %1 seconds.)"
msgstr ""
-#: kpsion.cpp:296
+#: kpsion.cpp:786
#, c-format
msgid "RFSV could not establish link: %1."
msgstr ""
-#: kpsion.cpp:312
+#: kpsion.cpp:803
msgid "RPCS could not connect to ncpd at %1:%2."
msgstr ""
-#: kpsion.cpp:330
+#: kpsion.cpp:822
#, c-format
msgid "RPCS could not establish link: %1."
msgstr ""
-#: kpsion.cpp:380 kpsion.cpp:433
-msgid "Backup"
-msgstr ""
-
-#: kpsion.cpp:407
+#: kpsion.cpp:917
#, c-format
msgid "Could not retrieve drive details for drive %1"
msgstr ""
-#: kpsion.cpp:414
+#: kpsion.cpp:922
#, c-format
msgid "Scanning drive %1"
msgstr ""
-#: kpsion.cpp:423
+#: kpsion.cpp:931
msgid "%1 files need backup"
msgstr ""
-#: kpsion.cpp:425
+#: kpsion.cpp:937
msgid "No files need backup"
msgstr ""
-#: kpsion.cpp:446
+#: kpsion.cpp:960
#, c-format
msgid "Could not create backup folder %1"
msgstr ""
-#: kpsion.cpp:499
-#, c-format
-msgid "Backing up %1"
+#: kpsion.cpp:984
+msgid "Backup %1% done"
msgstr ""
-#: kpsion.cpp:511
+#: kpsion.cpp:1004
msgid "<QT>Could not open<BR/><B>%1</B></QT>"
msgstr ""
-#: kpsion.cpp:530
+#: kpsion.cpp:1024
msgid "<QT>Could not read<BR/><B>%1</B></QT>"
msgstr ""
-#: kpsion.cpp:551
+#: kpsion.cpp:1037
+msgid "Resetting archive attributes"
+msgstr ""
+
+#: kpsion.cpp:1050
+msgid "<QT>Could not set attributes of<BR/><B>%1</B></QT>"
+msgstr ""
+
+#: kpsion.cpp:1072
msgid "Backup done"
msgstr ""
-#: kpsion.cpp:563
+#: kpsion.cpp:1076
+msgid "Restore"
+msgstr ""
+
+#: kpsion.cpp:1080
+msgid "Start"
+msgstr ""
+
+#: kpsion.cpp:1083
msgid ""
-"<QT>This erases <B>ALL</B> data on the drive(s).<BR/>Do you really want to "
-"proceed?"
+"Select items in the list of available backups, then click here to start "
+"restore of these items."
+msgstr ""
+
+#: kpsion.cpp:1130 kpsion.cpp:1343
+msgid "<QT>Could not get attributes of<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+
+#: kpsion.cpp:1159
+msgid "Overwrite"
+msgstr ""
+
+#: kpsion.cpp:1162
+msgid "Overwrite &All"
+msgstr ""
+
+#: kpsion.cpp:1175
+msgid ""
+"<QT>The file <B>%1</B> exists already on the Psion with different size "
+"and/or attributes.<P><B>On the Psion:</B><BR/> Size: %2<BR/> Date: %3<BR/> "
+" Attributes: %4</P><P><B>In backup:</B><BR/> Size: %5<BR/> Date: %6<BR/> "
+"Attributes: %7</P>Do you want to overwrite it?</QT>"
+msgstr ""
+
+#: kpsion.cpp:1213
+msgid "Reading backups ..."
msgstr ""
-#: kpsion.cpp:611
-msgid "Backup %1% complete"
+#: kpsion.cpp:1218
+msgid "Selecting backups ..."
msgstr ""
-#: kpsion.cpp:676
+#: kpsion.cpp:1250
+msgid "Restore %1% done"
+msgstr ""
+
+#: kpsion.cpp:1298
+msgid "<QT>Could not create directory<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+
+#: kpsion.cpp:1313
+msgid "<QT>Could not create<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+
+#: kpsion.cpp:1335
+msgid "<QT>Could not write to<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+
+#: kpsion.cpp:1353
+msgid "<QT>Could not set attributes of<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+
+#: kpsion.cpp:1360
+msgid ""
+"<QT>Could not set modification time of<BR/><B>%1</B><BR/>Reason: %2</QT>"
+msgstr ""
+
+#: kpsion.cpp:1387
+msgid "Restore done"
+msgstr ""
+
+#: kpsion.cpp:1393
+msgid ""
+"<QT>This erases <B>ALL</B> data on the drive(s).<BR/>Do you really want to "
+"proceed?"
+msgstr ""
+
+#: kpsion.cpp:1510
#, c-format
msgid "Stopping %1"
msgstr ""
-#: kpsion.cpp:697
+#: kpsion.cpp:1532
#, c-format
msgid "Starting %1"
msgstr ""
-#: kpsion.moc.cpp:43 kpsion.moc.cpp:48
+#: kpsion.moc.cpp:42 kpsion.moc.cpp:47
+msgid "KPsionCheckListItem"
+msgstr ""
+
+#: kpsion.moc.cpp:109 kpsion.moc.cpp:114
+msgid "KPsionBackupListView"
+msgstr ""
+
+#: kpsion.moc.cpp:184 kpsion.moc.cpp:189
+msgid "KPsionRestoreDialog"
+msgstr ""
+
+#: kpsion.moc.cpp:246 kpsion.moc.cpp:251
msgid "KPsionMainWindow"
msgstr ""
-#: main.cpp:15
+#: main.cpp:48
+msgid "perform scheduled backup"
+msgstr ""
+
+#: main.cpp:50
msgid "perform backup"
msgstr ""
-#: main.cpp:17
+#: main.cpp:52
msgid "perform restore"
msgstr ""
-#: main.cpp:19
+#: main.cpp:54
msgid "format drive"
msgstr ""
-#: main.cpp:20
+#: main.cpp:55
msgid "The drive letter to backup/restore or format."
msgstr ""
-#: main.cpp:25
+#: main.cpp:60
msgid "KPsion"
msgstr ""
-#: main.cpp:26
+#: main.cpp:61
msgid "Psion connectivity utility"
msgstr ""
-#: main.cpp:31
+#: main.cpp:66
msgid "Original Developer/Maintainer"
msgstr ""
@@ -235,11 +344,11 @@ msgstr ""
msgid "Backup &directory"
msgstr ""
-#: setupdialog.cpp:30 wizards.cpp:87
+#: setupdialog.cpp:30 wizards.cpp:109
msgid "Browse"
msgstr ""
-#: setupdialog.cpp:33 wizards.cpp:160
+#: setupdialog.cpp:33 wizards.cpp:182
msgid "Backup &generations"
msgstr ""
@@ -255,25 +364,35 @@ msgstr ""
msgid "Machine &UID"
msgstr ""
-#: wizards.cpp:26
+#: statusbarprogress.cpp:357 statusbarprogress.cpp:370
+#: statusbarprogress.cpp:379 statusbarprogress.cpp:392
+#: statusbarprogress.cpp:401 statusbarprogress.cpp:412
+msgid "%1 %2 of %3"
+msgstr ""
+
+#: statusbarprogress.moc.cpp:42 statusbarprogress.moc.cpp:47
+msgid "KPsionStatusBarProgress"
+msgstr ""
+
+#: wizards.cpp:48
msgid "KPsion Setup"
msgstr ""
-#: wizards.cpp:28 wizards.cpp:411
+#: wizards.cpp:50 wizards.cpp:433
msgid "Click this button to continue with the next page."
msgstr ""
-#: wizards.cpp:30 wizards.cpp:413
+#: wizards.cpp:52 wizards.cpp:435
msgid "Click this button, to go to a previous page."
msgstr ""
-#: wizards.cpp:32
+#: wizards.cpp:54
msgid ""
"<QT>If you click this button, the setup of <B>KPSion</B> will be aborted and "
"next time you start <B>KPsion</B>, it will run this setup again.</QT>"
msgstr ""
-#: wizards.cpp:49
+#: wizards.cpp:71
msgid ""
"<QT><H2>Welcome to KPsion!</H2>It looks like you started <B>KPsion</B> the "
"first time. At least, i could not find any valid configuration.</BR>On the "
@@ -281,11 +400,11 @@ msgid ""
"working with <B>KPsion</B>.</BR> </BR>Have fun.</QT>"
msgstr ""
-#: wizards.cpp:66
+#: wizards.cpp:88
msgid "<QT><BIG><B>Welcome<B></BIG></QT>"
msgstr ""
-#: wizards.cpp:74
+#: wizards.cpp:96
msgid ""
"<QT>First, we need a folder for storing backups of your Psion. You probably "
"don't want others to have access to it, so it's best to choose a location "
@@ -293,21 +412,21 @@ msgid ""
"select a suitable location or simply accept the default shown below.</QT>"
msgstr ""
-#: wizards.cpp:90
+#: wizards.cpp:112
msgid "This is the name of the backup folder."
msgstr ""
-#: wizards.cpp:92
+#: wizards.cpp:114
msgid ""
"Click here, for opening a dialog which lets you easily select the backup "
"folder."
msgstr ""
-#: wizards.cpp:107
+#: wizards.cpp:129
msgid "<QT><BIG><B>Step 1</B></BIG> - Specify backup directory</QT>"
msgstr ""
-#: wizards.cpp:114
+#: wizards.cpp:136
msgid ""
"<QT>Next, please specify some information regarding backup "
"policy:<UL><LI>How many generations of backups do you want to "
@@ -315,63 +434,63 @@ msgid ""
"intervals do you want to happen backups?</LI></UL></QT>"
msgstr ""
-#: wizards.cpp:124
+#: wizards.cpp:146
msgid "&Incremental backup reminder"
msgstr ""
-#: wizards.cpp:127 wizards.cpp:145
+#: wizards.cpp:149 wizards.cpp:167
msgid "none"
msgstr ""
-#: wizards.cpp:128 wizards.cpp:146
+#: wizards.cpp:150 wizards.cpp:168
msgid "daily"
msgstr ""
-#: wizards.cpp:129 wizards.cpp:147
+#: wizards.cpp:151 wizards.cpp:169
msgid "every 2 days"
msgstr ""
-#: wizards.cpp:130 wizards.cpp:148
+#: wizards.cpp:152 wizards.cpp:170
msgid "every 3 days"
msgstr ""
-#: wizards.cpp:131 wizards.cpp:149
+#: wizards.cpp:153 wizards.cpp:171
msgid "every 4 days"
msgstr ""
-#: wizards.cpp:132 wizards.cpp:150
+#: wizards.cpp:154 wizards.cpp:172
msgid "every 5 days"
msgstr ""
-#: wizards.cpp:133 wizards.cpp:151
+#: wizards.cpp:155 wizards.cpp:173
msgid "every 6 days"
msgstr ""
-#: wizards.cpp:134 wizards.cpp:152
+#: wizards.cpp:156 wizards.cpp:174
msgid "weekly"
msgstr ""
-#: wizards.cpp:135 wizards.cpp:153
+#: wizards.cpp:157 wizards.cpp:175
msgid "every 2 weeks"
msgstr ""
-#: wizards.cpp:136 wizards.cpp:154
+#: wizards.cpp:158 wizards.cpp:176
msgid "every 3 weeks"
msgstr ""
-#: wizards.cpp:137 wizards.cpp:155
+#: wizards.cpp:159 wizards.cpp:177
msgid "monthly"
msgstr ""
-#: wizards.cpp:142
+#: wizards.cpp:164
msgid "&Full backup reminder"
msgstr ""
-#: wizards.cpp:178
+#: wizards.cpp:200
msgid "<QT><BIG><B>Step 2</B></BIG> - Backup policy</QT>"
msgstr ""
-#: wizards.cpp:186
+#: wizards.cpp:208
msgid ""
"<QT>If no connection could be established on startup, <B>KPsion</B> will "
"attempt to connect in regular intervals. Please specify the interval after "
@@ -382,55 +501,55 @@ msgid ""
"rate</LI><LI>have permission to use the specified port</LI></UL></QT>"
msgstr ""
-#: wizards.cpp:201
+#: wizards.cpp:223
msgid "&Connection retry interval (sec.)"
msgstr ""
-#: wizards.cpp:207
+#: wizards.cpp:229
msgid "Serial &device"
msgstr ""
-#: wizards.cpp:211
+#: wizards.cpp:233
msgid "/dev/ttyS0"
msgstr ""
-#: wizards.cpp:212
+#: wizards.cpp:234
msgid "/dev/ttyS1"
msgstr ""
-#: wizards.cpp:213
+#: wizards.cpp:235
msgid "/dev/ttyS2"
msgstr ""
-#: wizards.cpp:214
+#: wizards.cpp:236
msgid "/dev/ttyS3"
msgstr ""
-#: wizards.cpp:215
+#: wizards.cpp:237
msgid "/dev/ircomm0"
msgstr ""
-#: wizards.cpp:216
+#: wizards.cpp:238
msgid "/dev/ircomm1"
msgstr ""
-#: wizards.cpp:217
+#: wizards.cpp:239
msgid "/dev/ircomm2"
msgstr ""
-#: wizards.cpp:218
+#: wizards.cpp:240
msgid "/dev/ircomm3"
msgstr ""
-#: wizards.cpp:223
+#: wizards.cpp:245
msgid "Serial &speed"
msgstr ""
-#: wizards.cpp:247
+#: wizards.cpp:269
msgid "<QT><BIG><B>Step 3</B></BIG> - Connection parameters</QT>"
msgstr ""
-#: wizards.cpp:255
+#: wizards.cpp:277
msgid ""
"<QT>That's it!<BR/>Next, i will start <B>KPsion</B> and if your Psion is "
"already connected and it's communication turned on (use <B>Ctrl-T</B> at "
@@ -439,121 +558,121 @@ msgid ""
"Backup.<BR/>Please click <B>Finish</B> now.</QT>"
msgstr ""
-#: wizards.cpp:274
+#: wizards.cpp:296
msgid "<QT><BIG><B>Finished</B></BIG></QT>"
msgstr ""
-#: wizards.cpp:282
+#: wizards.cpp:304
msgid "Backup folder"
msgstr ""
-#: wizards.cpp:292
+#: wizards.cpp:314
msgid ""
"<QT>You are about to abort the initial setup of <B>KPsion</B>. No "
"configuration will be stored and you will have to repeat this procedure when "
"you start <B>KPsion</B> next time.<BR/>Do you really want to exit now?</QT>"
msgstr ""
-#: wizards.cpp:347
+#: wizards.cpp:369
msgid ""
"<QT>The folder <B>%1</B> does <B>not</B> exist.<BR/>Shall it be created?</QT>"
msgstr ""
-#: wizards.cpp:352
+#: wizards.cpp:374
msgid "<QT>The specified folder<BR/><B>%1</B><BR/>could <B>not</B> be created"
msgstr ""
-#: wizards.cpp:357
+#: wizards.cpp:379
msgid ""
", because you either don't have sufficient rights to do that, or the "
"filesystem is readonly."
msgstr ""
-#: wizards.cpp:361
+#: wizards.cpp:383
msgid ", because the filesystem has not enough space."
msgstr ""
-#: wizards.cpp:367
+#: wizards.cpp:389
msgid ", because there already exists another object with the same name."
msgstr ""
-#: wizards.cpp:377
+#: wizards.cpp:399
msgid ""
", because you specified a path which probably contains a dangling symbolic "
"link."
msgstr ""
-#: wizards.cpp:380
+#: wizards.cpp:402
msgid ""
", because you specified a path which contains an element which is not a "
"folder."
msgstr ""
-#: wizards.cpp:384
+#: wizards.cpp:406
msgid ", because you specified a path which contains too many symbolic links."
msgstr ""
-#: wizards.cpp:391
+#: wizards.cpp:413
msgid "<BR/>Please select another folder.</QT>"
msgstr ""
-#: wizards.cpp:407
+#: wizards.cpp:429
msgid "New Psion detected"
msgstr ""
-#: wizards.cpp:415
+#: wizards.cpp:437
msgid ""
"<QT>If you click this button, the setup for the new connected Psion will be "
"aborted and next time you connect this Psion again, <B>KPsion</B> will run "
"this setup again.</QT>"
msgstr ""
-#: wizards.cpp:424
+#: wizards.cpp:446
msgid ""
"<QT>The Psion with the unique ID <B>%1</B> is connected the first time. "
"Please assign a name to it.</QT>"
msgstr ""
-#: wizards.cpp:431
+#: wizards.cpp:453
msgid "&Name of new Psion"
msgstr ""
-#: wizards.cpp:433
+#: wizards.cpp:455
msgid "My new Psion"
msgstr ""
-#: wizards.cpp:450
+#: wizards.cpp:472
msgid "<QT><BIG><B>New Psion detected<B></BIG></QT>"
msgstr ""
-#: wizards.cpp:458
+#: wizards.cpp:480
msgid ""
"<QT>Please select the Drive(s), you want to be backed up when running in "
"unattended backup mode.</QT>"
msgstr ""
-#: wizards.cpp:466
+#: wizards.cpp:488
msgid "Available drives"
msgstr ""
-#: wizards.cpp:490
+#: wizards.cpp:512
msgid "<QT><BIG><B>Specify drives to backup<B></BIG></QT>"
msgstr ""
-#: wizards.cpp:514
+#: wizards.cpp:536
msgid "The name cannot be empty."
msgstr ""
-#: wizards.cpp:521
+#: wizards.cpp:543
msgid ""
"<QT>The name <B>%1</B> is already assigned to another machine.<BR/>Please "
"choose a different name.</QT>"
msgstr ""
-#: wizards.moc.cpp:43 wizards.moc.cpp:48
+#: wizards.moc.cpp:42 wizards.moc.cpp:47
msgid "FirstTimeWizard"
msgstr ""
-#: wizards.moc.cpp:112 wizards.moc.cpp:117
+#: wizards.moc.cpp:111 wizards.moc.cpp:116
msgid "NewPsionWizard"
msgstr ""
diff --git a/lib/plpdirent.cc b/lib/plpdirent.cc
index d78260c..fa97232 100644
--- a/lib/plpdirent.cc
+++ b/lib/plpdirent.cc
@@ -3,7 +3,6 @@
*
* This file is part of plptools.
*
- * Copyright (C) 1999 Philip Proudman <philip.proudman@btinternet.com>
* Copyright (C) 1999-2001 Fritz Elfert <felfert@to.com>
*
* This program is free software; you can redistribute it and/or modify
@@ -21,7 +20,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
-#include <plpdirent.h>
+#include "plpdirent.h"
#include <stream.h>
#include <iomanip>
@@ -29,16 +28,20 @@ PlpUID::PlpUID() {
memset(uid, 0, sizeof(uid));
}
-PlpUID::PlpUID(const long u1, const long u2, const long u3) {
+PlpUID::PlpUID(const u_int32_t u1, const u_int32_t u2, const u_int32_t u3) {
uid[0] = u1; uid[1] = u2; uid[2] = u3;
}
-long PlpUID::
+u_int32_t PlpUID::
operator[](int idx) {
assert ((idx > -1) && (idx < 3));
return uid[idx];
}
+PlpDirent::PlpDirent()
+ : size(0), attr(0), name(""), time(0L), attrstr("") {
+}
+
PlpDirent::PlpDirent(const PlpDirent &e) {
size = e.size;
attr = e.attr;
@@ -48,17 +51,28 @@ PlpDirent::PlpDirent(const PlpDirent &e) {
attrstr = e.attrstr;
}
-long PlpDirent::
+PlpDirent::PlpDirent(const u_int32_t _size, const u_int32_t _attr,
+ const u_int32_t tHi, const u_int32_t tLo,
+ const char * const _name) {
+ size = _size;
+ attr = _attr;
+ time = PsiTime(tHi, tLo);
+ UID = PlpUID();
+ name = _name;
+ attrstr = "";
+}
+
+u_int32_t PlpDirent::
getSize() {
return size;
}
-long PlpDirent::
+u_int32_t PlpDirent::
getAttr() {
return attr;
}
-long PlpDirent::
+u_int32_t PlpDirent::
getUID(int uididx) {
if ((uididx >= 0) && (uididx < 4))
return UID[uididx];
diff --git a/lib/plpdirent.h b/lib/plpdirent.h
index 3c9fb40..9224ebe 100644
--- a/lib/plpdirent.h
+++ b/lib/plpdirent.h
@@ -49,7 +49,7 @@ public:
* Constructor.
* Create an instance, presetting all thre uid values.
*/
- PlpUID(const long u1, const long u2, const long u3);
+ PlpUID(const u_int32_t u1, const u_int32_t u2, const u_int32_t u3);
/**
* Retrieve a UID value.
@@ -57,7 +57,7 @@ public:
* @param idx The index of the desired UID. Range must be (0..2),
* otherwise an assertion is triggered.
*/
- long operator[](int idx);
+ u_int32_t operator[](int idx);
private:
long uid[3];
@@ -83,7 +83,7 @@ public:
/**
* Default constructor
*/
- PlpDirent() : size(0), attr(0), name(""), time(0L), attrstr("") { };
+ PlpDirent();
/**
* A copy constructor.
@@ -94,6 +94,12 @@ public:
PlpDirent(const PlpDirent &d);
/**
+ * Initializing Constructor
+ */
+ PlpDirent(const u_int32_t size, const u_int32_t attr, const u_int32_t tHi,
+ const u_int32_t tLo, const char * const name);
+
+ /**
* Default destructor.
*/
~PlpDirent() {};
@@ -103,14 +109,14 @@ public:
*
* @returns The file size in bytes.
*/
- long getSize();
+ u_int32_t getSize();
/**
* Retrieves the file attributes of a directory entry.
*
* @returns The generic attributes ( @ref rfsv:file_attribs ).
*/
- long getAttr();
+ u_int32_t getAttr();
/**
* Retrieves the UIDs of a directory entry.
@@ -120,7 +126,7 @@ public:
*
* @returns The selected UID or 0 if the index is out of range.
*/
- long getUID(int uididx);
+ u_int32_t getUID(int uididx);
/**
* Retrieves the @ref PlpUID object of a directory entry.
@@ -172,8 +178,8 @@ public:
friend ostream &operator<<(ostream &o, const PlpDirent &e);
private:
- long size;
- long attr;
+ u_int32_t size;
+ u_int32_t attr;
PlpUID UID;
PsiTime time;
string attrstr;
diff --git a/lib/psitime.cc b/lib/psitime.cc
index f239fe6..e776ab9 100644
--- a/lib/psitime.cc
+++ b/lib/psitime.cc
@@ -50,7 +50,7 @@ PsiTime::PsiTime(psi_timeval *_ptv, psi_timezone *_ptz) {
psi2unix();
}
-PsiTime::PsiTime(const unsigned long _ptvHi, const unsigned long _ptvLo) {
+PsiTime::PsiTime(const u_int32_t _ptvHi, const u_int32_t _ptvLo) {
ptv.tv_high = _ptvHi;
ptv.tv_low = _ptvLo;
ptzValid = false;
@@ -106,7 +106,7 @@ void PsiTime::setPsiTime(psi_timeval *_ptv) {
psi2unix();
}
-void PsiTime::setPsiTime(const unsigned long _ptvHi, const unsigned long _ptvLo) {
+void PsiTime::setPsiTime(const u_int32_t _ptvHi, const u_int32_t _ptvLo) {
ptv.tv_high = _ptvHi;
ptv.tv_low = _ptvLo;
psi2unix();
@@ -132,11 +132,11 @@ psi_timeval &PsiTime::getPsiTimeval(void) {
return ptv;
}
-const unsigned long PsiTime::getPsiTimeLo(void) {
+const u_int32_t PsiTime::getPsiTimeLo(void) {
return ptv.tv_low;
}
-const unsigned long PsiTime::getPsiTimeHi(void) {
+const u_int32_t PsiTime::getPsiTimeHi(void) {
return ptv.tv_high;
}
@@ -168,7 +168,7 @@ ostream &operator<<(ostream &s, const PsiTime &t) {
static unsigned long long
evalOffset(psi_timezone ptz, time_t time, bool valid) {
- unsigned long long offset = 0;
+ u_int64_t offset = 0;
if (valid) {
offset = ptz.utc_offset;
@@ -204,7 +204,7 @@ evalOffset(psi_timezone ptz, time_t time, bool valid) {
}
void PsiTime::psi2unix(void) {
- unsigned long long micro = ptv.tv_high;
+ u_int64_t micro = ptv.tv_high;
micro = (micro << 32) | ptv.tv_low;
/* Substract Psion's idea of UTC offset */
@@ -216,7 +216,7 @@ void PsiTime::psi2unix(void) {
}
void PsiTime::unix2psi(void) {
- unsigned long long micro = utv.tv_sec * 1000000 + utv.tv_usec;
+ u_int64_t micro = utv.tv_sec * 1000000 + utv.tv_usec;
/* Add Psion's idea of UTC offset */
micro += evalOffset(ptz, utv.tv_sec, ptzValid);
diff --git a/lib/psitime.h b/lib/psitime.h
index a6c4f4f..bf5b3cb 100644
--- a/lib/psitime.h
+++ b/lib/psitime.h
@@ -29,6 +29,7 @@
#include <sys/time.h>
#include <unistd.h>
+#include <sys/types.h>
#include <ostream.h>
#include <intl.h>
@@ -45,7 +46,7 @@ typedef struct psi_timeval_t {
*/
friend ostream &operator<<(ostream &o, const psi_timeval_t &ptv) {
ostream::fmtflags old = o.flags();
- unsigned long long micro = ptv.tv_high;
+ u_int64_t micro = ptv.tv_high;
micro = (micro << 32) | ptv.tv_low;
micro /= 1000000;
int s = micro % 60;
@@ -73,11 +74,11 @@ typedef struct psi_timeval_t {
/**
* The lower 32 bits
*/
- unsigned long tv_low;
+ u_int32_t tv_low;
/**
* The upper 32 bits
*/
- unsigned long tv_high;
+ u_int32_t tv_high;
} psi_timeval;
/**
@@ -151,10 +152,10 @@ public:
/**
* Contructs a new instance.
*
- * @param _ptvHi The high 16 bits of a Psion time value for initialization.
- * @param _ptvLo The low 16 bits of a Psion time value for initialization.
+ * @param _ptvHi The high 32 bits of a Psion time value for initialization.
+ * @param _ptvLo The low 32 bits of a Psion time value for initialization.
*/
- PsiTime(const unsigned long _ptvHi, const unsigned long _ptvLo);
+ PsiTime(const u_int32_t _ptvHi, const u_int32_t _ptvLo);
/**
* Constructs a new instance, initializing to now.
@@ -184,7 +185,7 @@ public:
* @param _ptvHi The high 32 bits of a Psion time.
* @param _ptvLo The low 32 bits of a Psion time.
*/
- void setPsiTime(const unsigned long _ptvHi, const unsigned long _ptvLo);
+ void setPsiTime(const u_int32_t _ptvHi, const u_int32_t _ptvLo);
/**
* Sets the Psion time zone of this instance.
@@ -244,7 +245,7 @@ public:
* @returns The instance's current time as lower 32 bits of
* a Psion struct psi_timeval_t.
*/
- const unsigned long getPsiTimeLo(void);
+ const u_int32_t getPsiTimeLo(void);
/**
* Retrieves the instance's current value
@@ -253,7 +254,7 @@ public:
* @returns The instance's current time as upper 32 bits of
* a Psion struct psi_timeval_t.
*/
- const unsigned long getPsiTimeHi(void);
+ const u_int32_t getPsiTimeHi(void);
/**
* Prints the instance's value in human readable format.