From 18800f5ea61b6d6dc86ec610b41ad159a6f20918 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Thu, 8 Mar 2007 18:50:23 +0000 Subject: [PATCH] kes Apply fix from for building wx-console on the Mac from bug #798. kes Implement new select mechanism for GUI programs. kes Reorganize initialization of stackedWidgets in bat. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4334 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/CheckList | 23 +- bacula/src/dird/inc_conf.c | 18 +- bacula/src/dird/ua_dotcmds.c | 22 +- bacula/src/dird/ua_restore.c | 30 +- bacula/src/dird/ua_select.c | 29 +- bacula/src/dird/ua_tree.c | 14 +- bacula/src/lib/bsock.h | 42 +- bacula/src/qt-console/console/console.cpp | 49 +- bacula/src/qt-console/console/console.h | 6 +- bacula/src/qt-console/mainwin.cpp | 47 +- bacula/src/qt-console/mainwin.h | 4 +- bacula/src/qt-console/restore/brestore.ui | 537 ++++++++++------------ bacula/technotes-2.1 | 5 + 13 files changed, 415 insertions(+), 411 deletions(-) diff --git a/bacula/CheckList b/bacula/CheckList index ab1d9d3650..46f4816d23 100644 --- a/bacula/CheckList +++ b/bacula/CheckList @@ -4,15 +4,17 @@ Assume release is in bacula/base bacula/gui bacula/docs bacula/rescue - Build it on Win32 -- Build it on Solaris and run regression tests -- Build it on FreeBSD and run regression tests +# No longer done +# - Build it on Solaris and run regression tests +# - Build it on FreeBSD and run regression tests - Update ChangeLog (add release date) - Update ReleaeNotes -- Do a cvs commit -- Run ./makerel base 2.0.x +- Do a svn commit +# ./makerel +- Run ./makerel Branch-2.0 branch-2.0 2.0.x - Run the regression tests on the new bacula directory that is created. Run regression on - Linux, Solaris, and Sun. + Linux. - Run the production version over night in production. - Manually test Win32 version (with Robert's work, it is now possible to run the @@ -20,13 +22,14 @@ Assume release is in bacula/base bacula/gui bacula/docs bacula/rescue - Write final ReleaseNotes - If everything is good - cd bacula +# The below needs to be updated more - Run cd base - cvs update + svn update cd ../gui - cvs update + svn update cd ../docs - cvs update + svn update cd manual make tex latex bacula.tex @@ -34,7 +37,7 @@ Assume release is in bacula/base bacula/gui bacula/docs bacula/rescue what to do, correct the problem). cd .. cd ../rescue - cvs update + svn update cd .. ./makerel base 2.0.x ./makeguirel gui 2.0.x @@ -55,4 +58,4 @@ Assume release is in bacula/base bacula/gui bacula/docs bacula/rescue make - Upload new release doc to web site. Upload bacula.pdf to web site. - +- Update news on web site. diff --git a/bacula/src/dird/inc_conf.c b/bacula/src/dird/inc_conf.c index 3052449d11..0960a59aeb 100644 --- a/bacula/src/dird/inc_conf.c +++ b/bacula/src/dird/inc_conf.c @@ -1,15 +1,7 @@ -/* - * Configuration file parser for new and old Include and - * Exclude records - * - * Kern Sibbald, March MMIII - * - * Version $Id$ - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2006 Free Software Foundation Europe e.V. + Copyright (C) 2000-2007 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -33,6 +25,14 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * Configuration file parser for new and old Include and + * Exclude records + * + * Kern Sibbald, March MMIII + * + * Version $Id$ + */ #include "bacula.h" #include "dird.h" diff --git a/bacula/src/dird/ua_dotcmds.c b/bacula/src/dird/ua_dotcmds.c index a53f609d1b..48be7c785c 100644 --- a/bacula/src/dird/ua_dotcmds.c +++ b/bacula/src/dird/ua_dotcmds.c @@ -176,9 +176,9 @@ static bool diecmd(UAContext *ua, const char *cmd) static bool jobscmd(UAContext *ua, const char *cmd) { - JOB *job = NULL; + JOB *job; LockRes(); - while ( (job = (JOB *)GetNextRes(R_JOB, (RES *)job)) ) { + foreach_res(job, R_JOB) { if (acl_access_ok(ua, Job_ACL, job->name())) { bsendmsg(ua, "%s\n", job->name()); } @@ -189,9 +189,9 @@ static bool jobscmd(UAContext *ua, const char *cmd) static bool filesetscmd(UAContext *ua, const char *cmd) { - FILESET *fs = NULL; + FILESET *fs; LockRes(); - while ( (fs = (FILESET *)GetNextRes(R_FILESET, (RES *)fs)) ) { + foreach_res(fs, R_FILESET) { if (acl_access_ok(ua, FileSet_ACL, fs->name())) { bsendmsg(ua, "%s\n", fs->name()); } @@ -202,9 +202,9 @@ static bool filesetscmd(UAContext *ua, const char *cmd) static bool clientscmd(UAContext *ua, const char *cmd) { - CLIENT *client = NULL; + CLIENT *client; LockRes(); - while ( (client = (CLIENT *)GetNextRes(R_CLIENT, (RES *)client)) ) { + foreach_res(client, R_CLIENT) { if (acl_access_ok(ua, Client_ACL, client->name())) { bsendmsg(ua, "%s\n", client->name()); } @@ -217,7 +217,7 @@ static bool msgscmd(UAContext *ua, const char *cmd) { MSGS *msgs = NULL; LockRes(); - while ( (msgs = (MSGS *)GetNextRes(R_MSGS, (RES *)msgs)) ) { + foreach_res(msgs, R_MSGS) { bsendmsg(ua, "%s\n", msgs->name()); } UnlockRes(); @@ -226,9 +226,9 @@ static bool msgscmd(UAContext *ua, const char *cmd) static bool poolscmd(UAContext *ua, const char *cmd) { - POOL *pool = NULL; + POOL *pool; LockRes(); - while ( (pool = (POOL *)GetNextRes(R_POOL, (RES *)pool)) ) { + foreach_res(pool, R_POOL) { if (acl_access_ok(ua, Pool_ACL, pool->name())) { bsendmsg(ua, "%s\n", pool->name()); } @@ -239,9 +239,9 @@ static bool poolscmd(UAContext *ua, const char *cmd) static bool storagecmd(UAContext *ua, const char *cmd) { - STORE *store = NULL; + STORE *store; LockRes(); - while ( (store = (STORE *)GetNextRes(R_STORAGE, (RES *)store)) ) { + foreach_res(store, R_STORAGE) { if (acl_access_ok(ua, Storage_ACL, store->name())) { bsendmsg(ua, "%s\n", store->name()); } diff --git a/bacula/src/dird/ua_restore.c b/bacula/src/dird/ua_restore.c index cce2821ff0..65df3d535c 100644 --- a/bacula/src/dird/ua_restore.c +++ b/bacula/src/dird/ua_restore.c @@ -1,21 +1,7 @@ -/* - * - * Bacula Director -- User Agent Database restore Command - * Creates a bootstrap file for restoring files and - * starts the restore job. - * - * Tree handling routines split into ua_tree.c July MMIII. - * BSR (bootstrap record) handling routines split into - * bsr.c July MMIII - * - * Kern Sibbald, July MMII - * - * Version $Id$ - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2002-2006 Free Software Foundation Europe e.V. + Copyright (C) 2002-2007 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -39,6 +25,20 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * + * Bacula Director -- User Agent Database restore Command + * Creates a bootstrap file for restoring files and + * starts the restore job. + * + * Tree handling routines split into ua_tree.c July MMIII. + * BSR (bootstrap record) handling routines split into + * bsr.c July MMIII + * + * Kern Sibbald, July MMII + * + * Version $Id$ + */ #include "bacula.h" diff --git a/bacula/src/dird/ua_select.c b/bacula/src/dird/ua_select.c index bf99c057fc..ed89f32b0f 100644 --- a/bacula/src/dird/ua_select.c +++ b/bacula/src/dird/ua_select.c @@ -1,15 +1,7 @@ -/* - * - * Bacula Director -- User Agent Prompt and Selection code - * - * Kern Sibbald, October MMI - * - * Version $Id$ - */ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2006 Free Software Foundation Europe e.V. + Copyright (C) 2001-2007 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -33,6 +25,14 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. */ +/* + * + * Bacula Director -- User Agent Prompt and Selection code + * + * Kern Sibbald, October MMI + * + * Version $Id$ + */ #include "bacula.h" #include "dird.h" @@ -731,10 +731,12 @@ void add_prompt(UAContext *ua, const char *prompt) * is copied to prompt if not NULL * prompt is set to the chosen prompt item string */ -int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) +int do_prompt(UAContext *ua, const char *automsg, const char *msg, + char *prompt, int max_prompt) { int i, item; char pmsg[MAXSTRING]; + BSOCK *user = ua->UA_sock; if (prompt) { *prompt = 0; @@ -753,12 +755,12 @@ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, item = -1; goto done; } -// bnet_sig(ua->UA_sock, BNET_START_SELECT); + if (ua->api) user->signal(BNET_START_SELECT); bsendmsg(ua, ua->prompt[0]); for (i=1; i < ua->num_prompts; i++) { bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); } -// bnet_sig(ua->UA_sock, BNET_END_SELECT); + if (ua->api) user->signal(BNET_END_SELECT); for ( ;; ) { /* First item is the prompt string, not the items */ @@ -769,7 +771,7 @@ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, } if (ua->num_prompts == 2) { item = 1; - bsendmsg(ua, _("Item 1 selected automatically.\n")); + bsendmsg(ua, _("Automatically selected: %s\n"), ua->prompt[1]); if (prompt) { bstrncpy(prompt, ua->prompt[1], max_prompt); } @@ -778,6 +780,7 @@ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, sprintf(pmsg, "%s (1-%d): ", msg, ua->num_prompts-1); } /* Either a . or an @ will get you out of the loop */ + if (ua->api) user->signal(BNET_SELECT_INPUT); if (!get_pint(ua, pmsg)) { item = -1; /* error */ bsendmsg(ua, _("Selection aborted, nothing done.\n")); diff --git a/bacula/src/dird/ua_tree.c b/bacula/src/dird/ua_tree.c index 1ff7d51353..fc49f8e671 100644 --- a/bacula/src/dird/ua_tree.c +++ b/bacula/src/dird/ua_tree.c @@ -702,20 +702,18 @@ static int cdcmd(UAContext *ua, TREE_CTX *tree) } else { tree->node = node; } - tree_getpath(tree->node, cwd, sizeof(cwd)); - if (ua->api) { - bsendmsg(ua, "%s", cwd); - } else { - bsendmsg(ua, _("cwd is: %s\n"), cwd); - } - return 1; + return pwdcmd(ua, tree); } static int pwdcmd(UAContext *ua, TREE_CTX *tree) { char cwd[2000]; tree_getpath(tree->node, cwd, sizeof(cwd)); - bsendmsg(ua, _("cwd is: %s\n"), cwd); + if (ua->api) { + bsendmsg(ua, "%s", cwd); + } else { + bsendmsg(ua, _("cwd is: %s\n"), cwd); + } return 1; } diff --git a/bacula/src/lib/bsock.h b/bacula/src/lib/bsock.h index cb78bc478f..dd7154002d 100644 --- a/bacula/src/lib/bsock.h +++ b/bacula/src/lib/bsock.h @@ -90,26 +90,30 @@ public: }; -/* Signal definitions for use in bnet_sig() */ +/* + * Signal definitions for use in bnet_sig() + * Note! These must be negative + */ enum { - BNET_EOD = -1, /* End of data stream, new data may follow */ - BNET_EOD_POLL = -2, /* End of data and poll all in one */ - BNET_STATUS = -3, /* Send full status */ - BNET_TERMINATE = -4, /* Conversation terminated, doing close() */ - BNET_POLL = -5, /* Poll request, I'm hanging on a read */ - BNET_HEARTBEAT = -6, /* Heartbeat Response requested */ - BNET_HB_RESPONSE = -7, /* Only response permited to HB */ - BNET_PROMPT = -8, /* Prompt for UA */ - BNET_BTIME = -9, /* Send UTC btime */ - BNET_BREAK = -10, /* Stop current command -- ctl-c */ - BNET_START_SELECT = -11, /* Start of a selection list */ - BNET_END_SELECT = -12, /* End of a select list */ - BNET_INVALID_CMD = -13, /* Invalid command sent */ - BNET_CMD_FAILED = -14, /* Command failed */ - BNET_CMD_OK = -15, /* Command succeeded */ - BNET_CMD_BEGIN = -16, /* Start command execution */ - BNET_MESSAGES_PENDING = 17, /* Messages pending */ - BNET_SERVER_READY = 18 /* Server ready and waiting */ + BNET_EOD = -1, /* End of data stream, new data may follow */ + BNET_EOD_POLL = -2, /* End of data and poll all in one */ + BNET_STATUS = -3, /* Send full status */ + BNET_TERMINATE = -4, /* Conversation terminated, doing close() */ + BNET_POLL = -5, /* Poll request, I'm hanging on a read */ + BNET_HEARTBEAT = -6, /* Heartbeat Response requested */ + BNET_HB_RESPONSE = -7, /* Only response permited to HB */ + BNET_PROMPT = -8, /* Prompt for UA */ + BNET_BTIME = -9, /* Send UTC btime */ + BNET_BREAK = -10, /* Stop current command -- ctl-c */ + BNET_START_SELECT = -11, /* Start of a selection list */ + BNET_END_SELECT = -12, /* End of a select list */ + BNET_INVALID_CMD = -13, /* Invalid command sent */ + BNET_CMD_FAILED = -14, /* Command failed */ + BNET_CMD_OK = -15, /* Command succeeded */ + BNET_CMD_BEGIN = -16, /* Start command execution */ + BNET_MESSAGES_PENDING = -17, /* Messages pending */ + BNET_SERVER_READY = -18, /* Server ready and waiting */ + BNET_SELECT_INPUT = -19 /* Return selection input */ }; #define BNET_SETBUF_READ 1 /* Arg for bnet_set_buffer_size */ diff --git a/bacula/src/qt-console/console/console.cpp b/bacula/src/qt-console/console/console.cpp index 38b4a0cf2b..37af5b8e66 100644 --- a/bacula/src/qt-console/console/console.cpp +++ b/bacula/src/qt-console/console/console.cpp @@ -41,43 +41,16 @@ Console::Console(QStackedWidget *parent) { QFont font; - QTreeWidgetItem *item, *topItem; - QTreeWidget *treeWidget = mainWin->treeWidget; + (void)parent; setupUi(this); - parent->addWidget(this); m_sock = NULL; m_at_prompt = false; m_textEdit = textEdit; /* our console screen */ m_cursor = new QTextCursor(m_textEdit->document()); mainWin->actionConnect->setIcon(QIcon(QString::fromUtf8("images/disconnected.png"))); - bRestore *brestore = new bRestore(parent); - brestore->setupUi(brestore); - parent->addWidget(brestore); - /* Just take the first Director */ - LockRes(); - m_dir = (DIRRES *)GetNextRes(R_DIRECTOR, NULL); - UnlockRes(); - - /* ***FIXME*** Dummy setup of treeWidget */ - treeWidget->clear(); - treeWidget->setColumnCount(1); - treeWidget->setHeaderLabel("Selection"); - topItem = new QTreeWidgetItem(treeWidget); - topItem->setText(0, m_dir->name()); - topItem->setIcon(0, QIcon(QString::fromUtf8("images/server.png"))); - item = new QTreeWidgetItem(topItem); - m_consoleItem = item; - item->setText(0, "Console"); - item->setText(1, "0"); - QBrush redBrush(Qt::red); - item->setForeground(0, redBrush); - item = new QTreeWidgetItem(topItem); - item->setText(0, "brestore"); - item->setText(1, "1"); - treeWidget->expandItem(topItem); readSettings(); /* Check for messages every 5 seconds */ @@ -207,7 +180,6 @@ QStringList Console::get_list(char *cmd) bool Console::get_job_defaults(struct job_defaults &job_defs) { QString scmd; - char cmd[1000]; int stat; char *def; @@ -271,6 +243,8 @@ bool Console::get_job_defaults(struct job_defaults &job_defs) continue; } } + +#ifdef xxx bsnprintf(cmd, sizeof(cmd), "job=%s pool=%s client=%s storage=%s where=%s\n" "level=%s type=%s fileset=%s catalog=%s enabled=%d\n", job_defs.job_name.toUtf8().data(), job_defs.pool_name.toUtf8().data(), @@ -280,6 +254,7 @@ bool Console::get_job_defaults(struct job_defaults &job_defs) job_defs.where.toUtf8().data(), job_defs.level.toUtf8().data(), job_defs.type.toUtf8().data(), job_defs.fileset_name.toUtf8().data(), job_defs.catalog_name.toUtf8().data(), job_defs.enabled); +#endif setEnabled(true); return true; @@ -559,3 +534,19 @@ void Console::read_dir(int fd) display_text(msg()); } } + +void Console::setEnabled(bool enable) +{ + m_notifier->setEnabled(enable); +} + +void Console::setTreeItem(QTreeWidgetItem *item) +{ + m_consoleItem = item; +} + +void Console::setDirRes(DIRRES *dir) +{ + m_dir = dir; +} + diff --git a/bacula/src/qt-console/console/console.h b/bacula/src/qt-console/console/console.h index aa18014f47..1907f1c95b 100644 --- a/bacula/src/qt-console/console/console.h +++ b/bacula/src/qt-console/console/console.h @@ -80,13 +80,15 @@ public: void writeSettings(); void readSettings(); char *msg(); - void setEnabled(bool enable) { m_notifier->setEnabled(enable); }; + void setEnabled(bool enable); QStringList get_list(char *cmd); bool get_job_defaults(struct job_defaults &); void terminate(); void beginNewCommand(); void displayToPrompt(); void discardToPrompt(); + void setTreeItem(QTreeWidgetItem *item); + void setDirRes(DIRRES *dir); QStringList job_list; QStringList client_list; @@ -99,7 +101,7 @@ public: public slots: - void connect(void); + void connect(); void read_dir(int fd); int read(void); int write(const char *msg); diff --git a/bacula/src/qt-console/mainwin.cpp b/bacula/src/qt-console/mainwin.cpp index f7627bdade..6bfcb67a19 100644 --- a/bacula/src/qt-console/mainwin.cpp +++ b/bacula/src/qt-console/mainwin.cpp @@ -39,11 +39,11 @@ MainWin::MainWin(QWidget *parent) : QMainWindow(parent) { + mainWin = this; setupUi(this); /* Setup UI defined by main.ui (designer) */ - m_console = new Console(stackedWidget); - stackedWidget->setCurrentIndex(0); + createStackedWidgets(); resetFocus(); @@ -56,11 +56,46 @@ MainWin::MainWin(QWidget *parent) : QMainWindow(parent) m_console->connect(); } -void MainWin::resetFocus() -{ - lineEdit->setFocus(); -} +void MainWin::createStackedWidgets() +{ + QTreeWidgetItem *item, *topItem; + m_console = new Console(stackedWidget); + stackedWidget->addWidget(m_console); + + bRestore *brestore = new bRestore(stackedWidget); + stackedWidget->addWidget(brestore); + + /* Just take the first Director */ + LockRes(); + DIRRES *dir = (DIRRES *)GetNextRes(R_DIRECTOR, NULL); + m_console->setDirRes(dir); + UnlockRes(); + + /* ***FIXME*** Dummy setup of treeWidget */ + treeWidget->clear(); + treeWidget->setColumnCount(1); + treeWidget->setHeaderLabel("Selection"); + topItem = new QTreeWidgetItem(treeWidget); + topItem->setText(0, dir->name()); + topItem->setIcon(0, QIcon(QString::fromUtf8("images/server.png"))); + item = new QTreeWidgetItem(topItem); + m_console->setTreeItem(item); + item->setText(0, "Console"); + item->setText(1, "0"); + QBrush redBrush(Qt::red); + item->setForeground(0, redBrush); + item = new QTreeWidgetItem(topItem); + item->setText(0, "brestore"); + item->setText(1, "1"); + treeWidget->expandItem(topItem); + + stackedWidget->setCurrentIndex(0); +} +/* + * Handle up and down arrow keys for the command line + * history. + */ void MainWin::keyPressEvent(QKeyEvent *event) { if (m_cmd_history.size() == 0) { diff --git a/bacula/src/qt-console/mainwin.h b/bacula/src/qt-console/mainwin.h index 68d37bbb60..8001e9329f 100644 --- a/bacula/src/qt-console/mainwin.h +++ b/bacula/src/qt-console/mainwin.h @@ -56,7 +56,8 @@ public: void set_status(const char *buf); void writeSettings(); void readSettings(); - void resetFocus(); + void resetFocus() { lineEdit->setFocus(); }; + public slots: void input_line(); @@ -73,6 +74,7 @@ protected: private: void createConnections(); + void createStackedWidgets(); private: QString m_UserInput; diff --git a/bacula/src/qt-console/restore/brestore.ui b/bacula/src/qt-console/restore/brestore.ui index 8303e605cc..5c8b55b7f6 100644 --- a/bacula/src/qt-console/restore/brestore.ui +++ b/bacula/src/qt-console/restore/brestore.ui @@ -5,177 +5,202 @@ 0 0 - 1023 - 796 + 958 + 555 - - - 7 - 7 - 0 - 0 - - brestore - + + + + 0 + + + 6 + + + + + + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + Location + + + + + + + + + - 10 - 20 - 951 - 661 + 19 + 58 + 920 + 478 - - - 7 - 7 - 0 - 0 - - - - QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable|QDockWidget::NoDockWidgetFeatures + + Qt::Vertical - - - - - 30 - 50 - 861 - 543 - + + + Qt::Horizontal + + + + + 7 + 7 + 0 + 0 + - - Qt::Vertical + + File list - - - Qt::Horizontal + + + 9 - - - - 7 - 7 - 0 - 0 - - - - File list - - - - 9 - - - 6 - - - - - - 7 - 7 - 5 - 5 - - - - - Type - - - - - File Name - - - - - Size - - - - - Date - - - - - - - - - - 7 - 7 - 0 - 0 - - - - File revisions - - - - 9 + + 6 + + + + + + 7 + 7 + 5 + 5 + - - 6 + + + Type + + + + + File Name + + + + + Size + + + + + Date + + + + + + + + + + 7 + 7 + 0 + 0 + + + + File revisions + + + + 9 + + + 6 + + + + + + 7 + 7 + 0 + 0 + - - - - - 7 - 7 - 0 - 0 - - - - - InChanger - - - - - Volume - - - - - JobId - - - - - Size - - - - - Date - - - - - Chksum - - - - - - - - - + + + InChanger + + + + + Volume + + + + + JobId + + + + + Size + + + + + Date + + + + + Chksum + + + + + + + + + + + 0 + + + 6 + + + 0 @@ -183,153 +208,89 @@ 6 - - - 0 - - - 6 - - - - - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> + + + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Restore items list</span></p></body></html> - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Clear - - - - - - - Estimate - - - - - - - Restore - - - - + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + - - - true + + + Clear + + + + + + + Estimate + + + + + + + Restore - - - Type - - - - - FileName - - - - - JobId - - - - - FileIndex - - - - - Nb Files - - - - - Size - - - - - - - - 40 - 10 - 861 - 33 - - - - - 0 - - - 6 - - - - - - - - false + + + + + true + + + + Type - - - - - - Qt::Horizontal + + + + FileName - - QSizePolicy::Expanding + + + + JobId - - - 40 - 20 - + + + + FileIndex - - - - + + - Location + Nb Files - - - - - - - + + + + Size + + + + + diff --git a/bacula/technotes-2.1 b/bacula/technotes-2.1 index 268b2821ea..59ff9f4c92 100644 --- a/bacula/technotes-2.1 +++ b/bacula/technotes-2.1 @@ -1,6 +1,11 @@ Technical notes on version 2.1 General: +08Mar07 +kes Apply fix from for building wx-console on the Mac from + bug #798. +kes Implement new select mechanism for GUI programs. +kes Reorganize initialization of stackedWidgets in bat. 07Mar07 kes Add updated nagios plugin supplied by Christian Masopust. 05Mar07 -- 2.39.5