]> git.sur5r.net Git - bacula/bacula/commitdiff
The result of the following merge: This merges the work in the branch into the head.
authorDirk H Bartley <dbartley@schupan.com>
Wed, 25 Jul 2007 02:32:37 +0000 (02:32 +0000)
committerDirk H Bartley <dbartley@schupan.com>
Wed, 25 Jul 2007 02:32:37 +0000 (02:32 +0000)
This does not quite work yet, working with kern on getting changes in the server!
svn merge -r5136:5238 https://bacula.svn.sourceforge.net/svnroot/bacula/branches/working/qt-console .

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5239 91ce42f0-d328-0410-95d8-f526ca767f89

13 files changed:
bacula/src/qt-console/images/folderbothchecked.png [new file with mode: 0644]
bacula/src/qt-console/images/folderbothchecked.svg [new file with mode: 0644]
bacula/src/qt-console/images/folderchecked.png [new file with mode: 0644]
bacula/src/qt-console/images/folderchecked.svg [new file with mode: 0644]
bacula/src/qt-console/images/folderunchecked.png [new file with mode: 0644]
bacula/src/qt-console/images/folderunchecked.svg [new file with mode: 0644]
bacula/src/qt-console/main.qrc
bacula/src/qt-console/mainwin.cpp
bacula/src/qt-console/mainwin.h
bacula/src/qt-console/prefs.ui
bacula/src/qt-console/restore/restoretree.cpp
bacula/src/qt-console/restore/restoretree.h
bacula/src/qt-console/restore/restoretree.ui

diff --git a/bacula/src/qt-console/images/folderbothchecked.png b/bacula/src/qt-console/images/folderbothchecked.png
new file mode 100644 (file)
index 0000000..fdb993b
Binary files /dev/null and b/bacula/src/qt-console/images/folderbothchecked.png differ
diff --git a/bacula/src/qt-console/images/folderbothchecked.svg b/bacula/src/qt-console/images/folderbothchecked.svg
new file mode 100644 (file)
index 0000000..6fe48e6
--- /dev/null
@@ -0,0 +1,438 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48.000000px"
+   height="48.000000px"
+   id="svg97"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="/home/dbartley/src/bacula/src/qt-console/images"
+   sodipodi:docname="folderbothchecked.svg"
+   inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/folderbothchecked.png"
+   inkscape:export-xdpi="30"
+   inkscape:export-ydpi="30">
+  <defs
+     id="defs3">
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient6715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient9806">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop9808" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop9810" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9766">
+      <stop
+         style="stop-color:#6194cb;stop-opacity:1;"
+         offset="0"
+         id="stop9768" />
+      <stop
+         style="stop-color:#729fcf;stop-opacity:1;"
+         offset="1"
+         id="stop9770" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3096">
+      <stop
+         id="stop3098"
+         offset="0"
+         style="stop-color:#424242;stop-opacity:1;" />
+      <stop
+         id="stop3100"
+         offset="1.0000000"
+         style="stop-color:#777777;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient319"
+       inkscape:collect="always">
+      <stop
+         id="stop320"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop321"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1789">
+      <stop
+         style="stop-color:#202020;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop1790" />
+      <stop
+         style="stop-color:#b9b9b9;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop1791" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1789"
+       id="radialGradient238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.055022,-2.734504e-2,0.177703,1.190929,-3.572177,-7.125301)"
+       cx="20.706017"
+       cy="37.517986"
+       fx="20.706017"
+       fy="37.517986"
+       r="30.905205" />
+    <linearGradient
+       id="linearGradient3983">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.87628865;"
+         offset="0.0000000"
+         id="stop3984" />
+      <stop
+         style="stop-color:#fffffe;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop3985" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3983"
+       id="linearGradient491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.516844,0.000000,0.000000,0.708978,-0.879573,-1.318166)"
+       x1="6.2297964"
+       y1="13.773066"
+       x2="9.8980894"
+       y2="66.834053" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="46.689312"
+       x2="12.853771"
+       y1="32.567184"
+       x1="13.035696"
+       gradientTransform="matrix(1.317489,0.000000,0.000000,0.816256,-0.879573,-1.318166)"
+       id="linearGradient322"
+       xlink:href="#linearGradient319"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="6.1802502"
+       x2="15.514889"
+       y1="31.367750"
+       x1="18.112709"
+       id="linearGradient3104"
+       xlink:href="#linearGradient3096"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9766"
+       id="linearGradient9772"
+       x1="22.175976"
+       y1="36.987999"
+       x2="22.065331"
+       y2="32.050499"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9806"
+       id="radialGradient9812"
+       cx="24.35099"
+       cy="41.591846"
+       fx="24.35099"
+       fy="41.591846"
+       r="19.136078"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.242494,1.565588e-16,31.50606)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.10196078"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="9.956928"
+     inkscape:cx="47.094479"
+     inkscape:cy="21.962852"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1026"
+     inkscape:window-height="724"
+     inkscape:window-x="56"
+     inkscape:window-y="0"
+     inkscape:showpageshadow="false"
+     stroke="#3465a4" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>Folder Icon</dc:title>
+        <dc:date />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by/2.0/" />
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>folder</rdf:li>
+            <rdf:li>directory</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Attribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Folder"
+     inkscape:groupmode="layer">
+    <g
+       style="display:inline"
+       transform="matrix(2.262383e-2,0,0,2.086758e-2,43.38343,36.36962)"
+       id="g6707">
+      <rect
+         style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect6709"
+         width="1339.6335"
+         height="478.35718"
+         x="-1559.2523"
+         y="-150.69685" />
+      <path
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         id="path6711"
+         sodipodi:nodetypes="cccc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path6713"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <path
+       d="M 4.5217805,38.687417 C 4.5435766,39.103721 4.9816854,39.520026 5.3979900,39.520026 L 36.725011,39.520026 C 37.141313,39.520026 37.535823,39.103721 37.514027,38.687417 L 36.577584,11.460682 C 36.555788,11.044379 36.117687,10.628066 35.701383,10.628066 L 22.430510,10.628066 C 21.945453,10.628066 21.196037,10.312477 21.028866,9.5214338 L 20.417475,6.6283628 C 20.262006,5.8926895 19.535261,5.5904766 19.118957,5.5904766 L 4.3400975,5.5904766 C 3.9237847,5.5904766 3.5292767,6.0067807 3.5510726,6.4230849 L 4.5217805,38.687417 z "
+       id="path216"
+       style="fill:url(#radialGradient238);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient3104);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       sodipodi:nodetypes="ccccccssssccc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9788"
+       d="M 5.2265927,22.5625 L 35.492173,22.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9784"
+       d="M 5.0421736,18.5625 L 35.489104,18.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 4.9806965,12.5625 L 35.488057,12.5625"
+       id="path9778"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.3861577,32.5625 L 35.494881,32.5625"
+       id="path9798"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9800"
+       d="M 5.5091398,34.5625 L 35.496893,34.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.0421736,16.5625 L 35.489104,16.5625"
+       id="path9782"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9780"
+       d="M 5.0114345,14.5625 L 35.48858,14.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9776"
+       d="M 4.9220969,10.5625 L 20.202912,10.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 4.8737534,8.5624999 L 19.657487,8.5624999"
+       id="path9774"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.3246666,28.5625 L 35.493876,28.5625"
+       id="path9794"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9792"
+       d="M 5.2880638,26.5625 L 35.493184,26.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.2265927,24.5625 L 35.492173,24.5625"
+       id="path9790"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.1958537,20.5625 L 35.491649,20.5625"
+       id="path9786"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9796"
+       d="M 5.3246666,30.5625 L 35.493876,30.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.5091398,36.5625 L 35.496893,36.5625"
+       id="path9802"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;fill:url(#linearGradient491);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.2138050;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible;opacity:0.45142857"
+       d="M 6.0683430,38.864023 C 6.0846856,39.176251 5.8874317,39.384402 5.5697582,39.280326 L 5.5697582,39.280326 C 5.2520766,39.176251 5.0330270,38.968099 5.0166756,38.655870 L 4.0689560,6.5913839 C 4.0526131,6.2791558 4.2341418,6.0906134 4.5463699,6.0906134 L 18.968420,6.0429196 C 19.280648,6.0429196 19.900363,6.3433923 20.101356,7.3651014 L 20.674845,10.180636 C 20.247791,9.7153790 20.255652,9.7010175 20.037287,9.0239299 L 19.631192,7.7647478 C 19.412142,7.0371009 18.932991,6.9328477 18.620763,6.9328477 L 5.7329889,6.9328477 C 5.4207613,6.9328477 5.2235075,7.1409999 5.2398583,7.4532364 L 6.1778636,38.968099 L 6.0683430,38.864023 z "
+       id="path219"
+       sodipodi:nodetypes="cccccccccscccccc" />
+    <g
+       style="stroke-miterlimit:4.0000000;stroke-width:0.99946535;stroke:none;fill-rule:nonzero;fill-opacity:0.75706214;fill:#ffffff"
+       id="g220"
+       transform="matrix(1.040764,0.000000,5.449252e-2,1.040764,-8.670199,2.670594)"
+       inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
+       inkscape:export-xdpi="74.800003"
+       inkscape:export-ydpi="74.800003">
+      <path
+         style="fill-opacity:0.50847459;fill:#ffffff"
+         d="M 42.417183,8.5151772 C 42.422267,8.4180642 42.289022,8.2681890 42.182066,8.2681716 L 29.150665,8.2660527 C 29.150665,8.2660527 30.062379,8.8540072 31.352477,8.8622963 L 42.405974,8.9333167 C 42.417060,8.7215889 42.408695,8.6772845 42.417183,8.5151772 z "
+         id="path221"
+         sodipodi:nodetypes="cscscs" />
+    </g>
+    <path
+       style="color:#000000;fill:url(#linearGradient9772);fill-opacity:1.0;fill-rule:nonzero;stroke:#3465a4;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:block"
+       d="M 39.783532,39.510620 C 40.927426,39.466556 41.746608,38.414321 41.830567,37.189615 C 42.622354,25.640928 43.489927,15.957666 43.489927,15.957666 C 43.562082,15.710182 43.322016,15.462699 43.009787,15.462699 L 8.6386304,15.462699 C 8.6386304,15.462699 6.7883113,37.329591 6.7883113,37.329591 C 6.6737562,38.311657 6.3223038,39.134309 5.2384755,39.513304 L 39.783532,39.510620 z "
+       id="path233"
+       sodipodi:nodetypes="cscccscc"
+       inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
+       inkscape:export-xdpi="74.800003"
+       inkscape:export-ydpi="74.800003" />
+    <path
+       sodipodi:nodetypes="ccsscsc"
+       id="path304"
+       d="M 9.6202444,16.463921 L 42.411343,16.528735 L 40.837297,36.530714 C 40.752975,37.602225 40.386619,37.958929 38.964641,37.958929 C 37.093139,37.958929 10.286673,37.926522 7.569899,37.926522 C 7.8034973,37.605711 7.9036547,36.937899 7.9049953,36.92191 L 9.6202444,16.463921 z "
+       style="opacity:0.46590909;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient322);stroke-width:0.99999970px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       id="path323"
+       d="M 9.6202481,16.223182 L 8.4536014,31.866453 C 8.4536014,31.866453 16.749756,27.718375 27.119949,27.718375 C 37.490142,27.718375 42.675239,16.223182 42.675239,16.223182 L 9.6202481,16.223182 z "
+       style="fill:#ffffff;fill-opacity:0.089285679;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       style="opacity:1;fill:#007e0d;fill-opacity:1;fill-rule:nonzero;stroke:#007e0d;stroke-width:0.07394509px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 42.724009,8.4244438 C 35.717571,8.4002808 30.062055,27.227006 30.062055,27.227006 C 30.062055,27.227006 23.805986,21.190723 21.134257,20.679974 C 20.244406,20.509864 28.823033,35.075652 28.823033,35.075652 C 28.823033,35.075652 31.627916,39.12181 31.248827,38.274857 C 31.136268,38.023385 37.553875,21.82511 42.724009,8.4244438 z "
+       id="path1323"
+       sodipodi:nodetypes="ccscsc"
+       inkscape:export-filename="/home/dbartley/rect3112.png"
+       inkscape:export-xdpi="1.4449884"
+       inkscape:export-ydpi="1.4449884" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#545454;stroke-width:0.20164242;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 25.146639,8.4132505 C 18.232672,8.3889335 12.651799,27.338438 12.651799,27.338438 C 12.651799,27.338438 6.4782954,21.262788 3.8418234,20.748713 C 2.9637174,20.57749 11.429126,35.238273 11.429126,35.238273 C 11.429126,35.238273 14.196992,39.310818 13.822905,38.458346 C 13.711834,38.205233 20.044741,21.901311 25.146639,8.4132505 z "
+       id="path1952"
+       sodipodi:nodetypes="ccscsc"
+       inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/check.png"
+       inkscape:export-xdpi="1.4449884"
+       inkscape:export-ydpi="1.4449884" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="pattern" />
+</svg>
diff --git a/bacula/src/qt-console/images/folderchecked.png b/bacula/src/qt-console/images/folderchecked.png
new file mode 100644 (file)
index 0000000..97cbf19
Binary files /dev/null and b/bacula/src/qt-console/images/folderchecked.png differ
diff --git a/bacula/src/qt-console/images/folderchecked.svg b/bacula/src/qt-console/images/folderchecked.svg
new file mode 100644 (file)
index 0000000..c87014a
--- /dev/null
@@ -0,0 +1,430 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48.000000px"
+   height="48.000000px"
+   id="svg97"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="/home/dbartley/src/bacula/src/qt-console/images"
+   sodipodi:docname="folderchecked.svg"
+   inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/folderchecked.png"
+   inkscape:export-xdpi="30"
+   inkscape:export-ydpi="30">
+  <defs
+     id="defs3">
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient6715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient9806">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop9808" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop9810" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9766">
+      <stop
+         style="stop-color:#6194cb;stop-opacity:1;"
+         offset="0"
+         id="stop9768" />
+      <stop
+         style="stop-color:#729fcf;stop-opacity:1;"
+         offset="1"
+         id="stop9770" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3096">
+      <stop
+         id="stop3098"
+         offset="0"
+         style="stop-color:#424242;stop-opacity:1;" />
+      <stop
+         id="stop3100"
+         offset="1.0000000"
+         style="stop-color:#777777;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient319"
+       inkscape:collect="always">
+      <stop
+         id="stop320"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop321"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1789">
+      <stop
+         style="stop-color:#202020;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop1790" />
+      <stop
+         style="stop-color:#b9b9b9;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop1791" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1789"
+       id="radialGradient238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.055022,-2.734504e-2,0.177703,1.190929,-3.572177,-7.125301)"
+       cx="20.706017"
+       cy="37.517986"
+       fx="20.706017"
+       fy="37.517986"
+       r="30.905205" />
+    <linearGradient
+       id="linearGradient3983">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.87628865;"
+         offset="0.0000000"
+         id="stop3984" />
+      <stop
+         style="stop-color:#fffffe;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop3985" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3983"
+       id="linearGradient491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.516844,0.000000,0.000000,0.708978,-0.879573,-1.318166)"
+       x1="6.2297964"
+       y1="13.773066"
+       x2="9.8980894"
+       y2="66.834053" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="46.689312"
+       x2="12.853771"
+       y1="32.567184"
+       x1="13.035696"
+       gradientTransform="matrix(1.317489,0.000000,0.000000,0.816256,-0.879573,-1.318166)"
+       id="linearGradient322"
+       xlink:href="#linearGradient319"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="6.1802502"
+       x2="15.514889"
+       y1="31.367750"
+       x1="18.112709"
+       id="linearGradient3104"
+       xlink:href="#linearGradient3096"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9766"
+       id="linearGradient9772"
+       x1="22.175976"
+       y1="36.987999"
+       x2="22.065331"
+       y2="32.050499"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9806"
+       id="radialGradient9812"
+       cx="24.35099"
+       cy="41.591846"
+       fx="24.35099"
+       fy="41.591846"
+       r="19.136078"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.242494,1.565588e-16,31.50606)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.10196078"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="9.956928"
+     inkscape:cx="47.094479"
+     inkscape:cy="21.962852"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1026"
+     inkscape:window-height="724"
+     inkscape:window-x="245"
+     inkscape:window-y="100"
+     inkscape:showpageshadow="false"
+     stroke="#3465a4" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>Folder Icon</dc:title>
+        <dc:date />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by/2.0/" />
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>folder</rdf:li>
+            <rdf:li>directory</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Attribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Folder"
+     inkscape:groupmode="layer">
+    <g
+       style="display:inline"
+       transform="matrix(2.262383e-2,0,0,2.086758e-2,43.38343,36.36962)"
+       id="g6707">
+      <rect
+         style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect6709"
+         width="1339.6335"
+         height="478.35718"
+         x="-1559.2523"
+         y="-150.69685" />
+      <path
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         id="path6711"
+         sodipodi:nodetypes="cccc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path6713"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <path
+       d="M 4.5217805,38.687417 C 4.5435766,39.103721 4.9816854,39.520026 5.3979900,39.520026 L 36.725011,39.520026 C 37.141313,39.520026 37.535823,39.103721 37.514027,38.687417 L 36.577584,11.460682 C 36.555788,11.044379 36.117687,10.628066 35.701383,10.628066 L 22.430510,10.628066 C 21.945453,10.628066 21.196037,10.312477 21.028866,9.5214338 L 20.417475,6.6283628 C 20.262006,5.8926895 19.535261,5.5904766 19.118957,5.5904766 L 4.3400975,5.5904766 C 3.9237847,5.5904766 3.5292767,6.0067807 3.5510726,6.4230849 L 4.5217805,38.687417 z "
+       id="path216"
+       style="fill:url(#radialGradient238);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient3104);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       sodipodi:nodetypes="ccccccssssccc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9788"
+       d="M 5.2265927,22.5625 L 35.492173,22.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9784"
+       d="M 5.0421736,18.5625 L 35.489104,18.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 4.9806965,12.5625 L 35.488057,12.5625"
+       id="path9778"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.3861577,32.5625 L 35.494881,32.5625"
+       id="path9798"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9800"
+       d="M 5.5091398,34.5625 L 35.496893,34.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.0421736,16.5625 L 35.489104,16.5625"
+       id="path9782"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9780"
+       d="M 5.0114345,14.5625 L 35.48858,14.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9776"
+       d="M 4.9220969,10.5625 L 20.202912,10.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 4.8737534,8.5624999 L 19.657487,8.5624999"
+       id="path9774"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.3246666,28.5625 L 35.493876,28.5625"
+       id="path9794"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9792"
+       d="M 5.2880638,26.5625 L 35.493184,26.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.2265927,24.5625 L 35.492173,24.5625"
+       id="path9790"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.1958537,20.5625 L 35.491649,20.5625"
+       id="path9786"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9796"
+       d="M 5.3246666,30.5625 L 35.493876,30.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.5091398,36.5625 L 35.496893,36.5625"
+       id="path9802"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;fill:url(#linearGradient491);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.2138050;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible;opacity:0.45142857"
+       d="M 6.0683430,38.864023 C 6.0846856,39.176251 5.8874317,39.384402 5.5697582,39.280326 L 5.5697582,39.280326 C 5.2520766,39.176251 5.0330270,38.968099 5.0166756,38.655870 L 4.0689560,6.5913839 C 4.0526131,6.2791558 4.2341418,6.0906134 4.5463699,6.0906134 L 18.968420,6.0429196 C 19.280648,6.0429196 19.900363,6.3433923 20.101356,7.3651014 L 20.674845,10.180636 C 20.247791,9.7153790 20.255652,9.7010175 20.037287,9.0239299 L 19.631192,7.7647478 C 19.412142,7.0371009 18.932991,6.9328477 18.620763,6.9328477 L 5.7329889,6.9328477 C 5.4207613,6.9328477 5.2235075,7.1409999 5.2398583,7.4532364 L 6.1778636,38.968099 L 6.0683430,38.864023 z "
+       id="path219"
+       sodipodi:nodetypes="cccccccccscccccc" />
+    <g
+       style="stroke-miterlimit:4.0000000;stroke-width:0.99946535;stroke:none;fill-rule:nonzero;fill-opacity:0.75706214;fill:#ffffff"
+       id="g220"
+       transform="matrix(1.040764,0.000000,5.449252e-2,1.040764,-8.670199,2.670594)"
+       inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
+       inkscape:export-xdpi="74.800003"
+       inkscape:export-ydpi="74.800003">
+      <path
+         style="fill-opacity:0.50847459;fill:#ffffff"
+         d="M 42.417183,8.5151772 C 42.422267,8.4180642 42.289022,8.2681890 42.182066,8.2681716 L 29.150665,8.2660527 C 29.150665,8.2660527 30.062379,8.8540072 31.352477,8.8622963 L 42.405974,8.9333167 C 42.417060,8.7215889 42.408695,8.6772845 42.417183,8.5151772 z "
+         id="path221"
+         sodipodi:nodetypes="cscscs" />
+    </g>
+    <path
+       style="color:#000000;fill:url(#linearGradient9772);fill-opacity:1.0;fill-rule:nonzero;stroke:#3465a4;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:block"
+       d="M 39.783532,39.510620 C 40.927426,39.466556 41.746608,38.414321 41.830567,37.189615 C 42.622354,25.640928 43.489927,15.957666 43.489927,15.957666 C 43.562082,15.710182 43.322016,15.462699 43.009787,15.462699 L 8.6386304,15.462699 C 8.6386304,15.462699 6.7883113,37.329591 6.7883113,37.329591 C 6.6737562,38.311657 6.3223038,39.134309 5.2384755,39.513304 L 39.783532,39.510620 z "
+       id="path233"
+       sodipodi:nodetypes="cscccscc"
+       inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
+       inkscape:export-xdpi="74.800003"
+       inkscape:export-ydpi="74.800003" />
+    <path
+       sodipodi:nodetypes="ccsscsc"
+       id="path304"
+       d="M 9.6202444,16.463921 L 42.411343,16.528735 L 40.837297,36.530714 C 40.752975,37.602225 40.386619,37.958929 38.964641,37.958929 C 37.093139,37.958929 10.286673,37.926522 7.569899,37.926522 C 7.8034973,37.605711 7.9036547,36.937899 7.9049953,36.92191 L 9.6202444,16.463921 z "
+       style="opacity:0.46590909;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient322);stroke-width:0.99999970px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       id="path323"
+       d="M 9.6202481,16.223182 L 8.4536014,31.866453 C 8.4536014,31.866453 16.749756,27.718375 27.119949,27.718375 C 37.490142,27.718375 42.675239,16.223182 42.675239,16.223182 L 9.6202481,16.223182 z "
+       style="fill:#ffffff;fill-opacity:0.089285679;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       style="opacity:1;fill:#007e0d;fill-opacity:1;fill-rule:nonzero;stroke:#007e0d;stroke-width:0.08712279px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 41.60397,9.5292022 C 31.877794,9.5050392 24.026935,28.331764 24.026935,28.331764 C 24.026935,28.331764 15.342404,22.295481 11.63357,21.784732 C 10.3983,21.614622 22.306952,36.18041 22.306952,36.18041 C 22.306952,36.18041 26.200628,40.226568 25.674384,39.379615 C 25.518133,39.128143 34.426908,22.929868 41.60397,9.5292022 z "
+       id="path1323"
+       sodipodi:nodetypes="ccscsc"
+       inkscape:export-filename="/home/dbartley/rect3112.png"
+       inkscape:export-xdpi="1.4449884"
+       inkscape:export-ydpi="1.4449884" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="pattern" />
+</svg>
diff --git a/bacula/src/qt-console/images/folderunchecked.png b/bacula/src/qt-console/images/folderunchecked.png
new file mode 100644 (file)
index 0000000..13a8de2
Binary files /dev/null and b/bacula/src/qt-console/images/folderunchecked.png differ
diff --git a/bacula/src/qt-console/images/folderunchecked.svg b/bacula/src/qt-console/images/folderunchecked.svg
new file mode 100644 (file)
index 0000000..cbe7627
--- /dev/null
@@ -0,0 +1,430 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48.000000px"
+   height="48.000000px"
+   id="svg97"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="/home/dbartley/src/bacula/src/qt-console/images"
+   sodipodi:docname="folderunchecked.svg"
+   inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/folderunchecked.png"
+   inkscape:export-xdpi="30"
+   inkscape:export-ydpi="30">
+  <defs
+     id="defs3">
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient6715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient9806">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop9808" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop9810" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9766">
+      <stop
+         style="stop-color:#6194cb;stop-opacity:1;"
+         offset="0"
+         id="stop9768" />
+      <stop
+         style="stop-color:#729fcf;stop-opacity:1;"
+         offset="1"
+         id="stop9770" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3096">
+      <stop
+         id="stop3098"
+         offset="0"
+         style="stop-color:#424242;stop-opacity:1;" />
+      <stop
+         id="stop3100"
+         offset="1.0000000"
+         style="stop-color:#777777;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient319"
+       inkscape:collect="always">
+      <stop
+         id="stop320"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop321"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1789">
+      <stop
+         style="stop-color:#202020;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop1790" />
+      <stop
+         style="stop-color:#b9b9b9;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop1791" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1789"
+       id="radialGradient238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.055022,-2.734504e-2,0.177703,1.190929,-3.572177,-7.125301)"
+       cx="20.706017"
+       cy="37.517986"
+       fx="20.706017"
+       fy="37.517986"
+       r="30.905205" />
+    <linearGradient
+       id="linearGradient3983">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.87628865;"
+         offset="0.0000000"
+         id="stop3984" />
+      <stop
+         style="stop-color:#fffffe;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop3985" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3983"
+       id="linearGradient491"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.516844,0.000000,0.000000,0.708978,-0.879573,-1.318166)"
+       x1="6.2297964"
+       y1="13.773066"
+       x2="9.8980894"
+       y2="66.834053" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="46.689312"
+       x2="12.853771"
+       y1="32.567184"
+       x1="13.035696"
+       gradientTransform="matrix(1.317489,0.000000,0.000000,0.816256,-0.879573,-1.318166)"
+       id="linearGradient322"
+       xlink:href="#linearGradient319"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="6.1802502"
+       x2="15.514889"
+       y1="31.367750"
+       x1="18.112709"
+       id="linearGradient3104"
+       xlink:href="#linearGradient3096"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9766"
+       id="linearGradient9772"
+       x1="22.175976"
+       y1="36.987999"
+       x2="22.065331"
+       y2="32.050499"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9806"
+       id="radialGradient9812"
+       cx="24.35099"
+       cy="41.591846"
+       fx="24.35099"
+       fy="41.591846"
+       r="19.136078"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.242494,1.565588e-16,31.50606)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     fill="#729fcf"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.10196078"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="9.4722858"
+     inkscape:cx="51.078729"
+     inkscape:cy="20.636579"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1053"
+     inkscape:window-height="757"
+     inkscape:window-x="138"
+     inkscape:window-y="0"
+     inkscape:showpageshadow="false"
+     stroke="#3465a4" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>Folder Icon</dc:title>
+        <dc:date />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by/2.0/" />
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>folder</rdf:li>
+            <rdf:li>directory</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Attribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Folder"
+     inkscape:groupmode="layer">
+    <g
+       style="display:inline"
+       transform="matrix(2.262383e-2,0,0,2.086758e-2,43.38343,36.36962)"
+       id="g6707">
+      <rect
+         style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect6709"
+         width="1339.6335"
+         height="478.35718"
+         x="-1559.2523"
+         y="-150.69685" />
+      <path
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         id="path6711"
+         sodipodi:nodetypes="cccc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path6713"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <path
+       d="M 4.5217805,38.687417 C 4.5435766,39.103721 4.9816854,39.520026 5.3979900,39.520026 L 36.725011,39.520026 C 37.141313,39.520026 37.535823,39.103721 37.514027,38.687417 L 36.577584,11.460682 C 36.555788,11.044379 36.117687,10.628066 35.701383,10.628066 L 22.430510,10.628066 C 21.945453,10.628066 21.196037,10.312477 21.028866,9.5214338 L 20.417475,6.6283628 C 20.262006,5.8926895 19.535261,5.5904766 19.118957,5.5904766 L 4.3400975,5.5904766 C 3.9237847,5.5904766 3.5292767,6.0067807 3.5510726,6.4230849 L 4.5217805,38.687417 z "
+       id="path216"
+       style="fill:url(#radialGradient238);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#linearGradient3104);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
+       sodipodi:nodetypes="ccccccssssccc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9788"
+       d="M 5.2265927,22.5625 L 35.492173,22.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9784"
+       d="M 5.0421736,18.5625 L 35.489104,18.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 4.9806965,12.5625 L 35.488057,12.5625"
+       id="path9778"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.3861577,32.5625 L 35.494881,32.5625"
+       id="path9798"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9800"
+       d="M 5.5091398,34.5625 L 35.496893,34.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.0421736,16.5625 L 35.489104,16.5625"
+       id="path9782"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9780"
+       d="M 5.0114345,14.5625 L 35.48858,14.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9776"
+       d="M 4.9220969,10.5625 L 20.202912,10.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 4.8737534,8.5624999 L 19.657487,8.5624999"
+       id="path9774"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.3246666,28.5625 L 35.493876,28.5625"
+       id="path9794"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9792"
+       d="M 5.2880638,26.5625 L 35.493184,26.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.2265927,24.5625 L 35.492173,24.5625"
+       id="path9790"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.1958537,20.5625 L 35.491649,20.5625"
+       id="path9786"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path9796"
+       d="M 5.3246666,30.5625 L 35.493876,30.5625"
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       style="opacity:0.11363633;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.5091398,36.5625 L 35.496893,36.5625"
+       id="path9802"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;fill:url(#linearGradient491);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.2138050;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible;opacity:0.45142857"
+       d="M 6.0683430,38.864023 C 6.0846856,39.176251 5.8874317,39.384402 5.5697582,39.280326 L 5.5697582,39.280326 C 5.2520766,39.176251 5.0330270,38.968099 5.0166756,38.655870 L 4.0689560,6.5913839 C 4.0526131,6.2791558 4.2341418,6.0906134 4.5463699,6.0906134 L 18.968420,6.0429196 C 19.280648,6.0429196 19.900363,6.3433923 20.101356,7.3651014 L 20.674845,10.180636 C 20.247791,9.7153790 20.255652,9.7010175 20.037287,9.0239299 L 19.631192,7.7647478 C 19.412142,7.0371009 18.932991,6.9328477 18.620763,6.9328477 L 5.7329889,6.9328477 C 5.4207613,6.9328477 5.2235075,7.1409999 5.2398583,7.4532364 L 6.1778636,38.968099 L 6.0683430,38.864023 z "
+       id="path219"
+       sodipodi:nodetypes="cccccccccscccccc" />
+    <g
+       style="stroke-miterlimit:4.0000000;stroke-width:0.99946535;stroke:none;fill-rule:nonzero;fill-opacity:0.75706214;fill:#ffffff"
+       id="g220"
+       transform="matrix(1.040764,0.000000,5.449252e-2,1.040764,-8.670199,2.670594)"
+       inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
+       inkscape:export-xdpi="74.800003"
+       inkscape:export-ydpi="74.800003">
+      <path
+         style="fill-opacity:0.50847459;fill:#ffffff"
+         d="M 42.417183,8.5151772 C 42.422267,8.4180642 42.289022,8.2681890 42.182066,8.2681716 L 29.150665,8.2660527 C 29.150665,8.2660527 30.062379,8.8540072 31.352477,8.8622963 L 42.405974,8.9333167 C 42.417060,8.7215889 42.408695,8.6772845 42.417183,8.5151772 z "
+         id="path221"
+         sodipodi:nodetypes="cscscs" />
+    </g>
+    <path
+       style="color:#000000;fill:url(#linearGradient9772);fill-opacity:1.0;fill-rule:nonzero;stroke:#3465a4;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:block"
+       d="M 39.783532,39.510620 C 40.927426,39.466556 41.746608,38.414321 41.830567,37.189615 C 42.622354,25.640928 43.489927,15.957666 43.489927,15.957666 C 43.562082,15.710182 43.322016,15.462699 43.009787,15.462699 L 8.6386304,15.462699 C 8.6386304,15.462699 6.7883113,37.329591 6.7883113,37.329591 C 6.6737562,38.311657 6.3223038,39.134309 5.2384755,39.513304 L 39.783532,39.510620 z "
+       id="path233"
+       sodipodi:nodetypes="cscccscc"
+       inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
+       inkscape:export-xdpi="74.800003"
+       inkscape:export-ydpi="74.800003" />
+    <path
+       sodipodi:nodetypes="ccsscsc"
+       id="path304"
+       d="M 9.6202444,16.463921 L 42.411343,16.528735 L 40.837297,36.530714 C 40.752975,37.602225 40.386619,37.958929 38.964641,37.958929 C 37.093139,37.958929 10.286673,37.926522 7.569899,37.926522 C 7.8034973,37.605711 7.9036547,36.937899 7.9049953,36.92191 L 9.6202444,16.463921 z "
+       style="opacity:0.46590909;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient322);stroke-width:0.99999970px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       id="path323"
+       d="M 9.6202481,16.223182 L 8.4536014,31.866453 C 8.4536014,31.866453 16.749756,27.718375 27.119949,27.718375 C 37.490142,27.718375 42.675239,16.223182 42.675239,16.223182 L 9.6202481,16.223182 z "
+       style="fill:#ffffff;fill-opacity:0.089285679;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#545454;stroke-width:0.24726677;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 41.549373,10.026887 C 31.152686,10.00257 22.760603,28.952074 22.760603,28.952074 C 22.760603,28.952074 13.477367,22.876424 9.5128466,22.362349 C 8.1924183,22.191126 20.922041,36.851909 20.922041,36.851909 C 20.922041,36.851909 25.084143,40.924454 24.52162,40.071982 C 24.354601,39.818869 33.877534,23.514947 41.549373,10.026887 z "
+       id="path1323"
+       sodipodi:nodetypes="ccscsc"
+       inkscape:export-filename="/home/dbartley/src/bacula/src/qt-console/images/check.png"
+       inkscape:export-xdpi="1.4449884"
+       inkscape:export-ydpi="1.4449884" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="pattern" />
+</svg>
index 500943e3f85052dbe4652d4e1a1ffed4c6fef723..2681725652a2a5dbf8ba3c8dbe94c43ce21f9bf3 100644 (file)
@@ -18,6 +18,9 @@
         <file>images/estimate-job.svg</file>
         <file>images/folder.png</file>
         <file>images/folder.svg</file>
+        <file>images/folderchecked.png</file>
+        <file>images/folderunchecked.png</file>
+        <file>images/folderbothchecked.png</file>
         <file>images/graph1.png</file>
         <file>images/help-browser.svg</file>
         <file>images/home.png</file>
index 64f38b5317508af3f078a9658669392dd6d9af16..566c702653c198767e5d24f442632ae8daf20ae6 100644 (file)
@@ -615,7 +615,18 @@ void MainWin::setPreferences()
    prefs.checkMessages->setCheckState(m_checkMessages ? Qt::Checked : Qt::Unchecked);
    prefs.checkMessagesSpin->setValue(m_checkMessagesInterval);
    prefs.executeLongCheckBox->setCheckState(m_longList ? Qt::Checked : Qt::Unchecked);
-
+   prefs.rtPopDirCheckBox->setCheckState(m_rtPopDirDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtDirCurICCheckBox->setCheckState(m_rtDirCurICDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtDirICCheckBox->setCheckState(m_rtDirICDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtFileTabICCheckBox->setCheckState(m_rtFileTabICDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtVerTabICCheckBox->setCheckState(m_rtVerTabICDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtUpdateFTCheckBox->setCheckState(m_rtUpdateFTDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtUpdateVTCheckBox->setCheckState(m_rtUpdateVTDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtChecksCheckBox->setCheckState(m_rtChecksDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtIconStateCheckBox->setCheckState(m_rtIconStateDebug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtRestore1CheckBox->setCheckState(m_rtRestore1Debug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtRestore2CheckBox->setCheckState(m_rtRestore2Debug ? Qt::Checked : Qt::Unchecked);
+   prefs.rtRestore3CheckBox->setCheckState(m_rtRestore3Debug ? Qt::Checked : Qt::Unchecked);
    prefs.exec();
 }
 
@@ -640,6 +651,20 @@ void prefsDialog::accept()
    mainWin->m_checkMessages = this->checkMessages->checkState() == Qt::Checked;
    mainWin->m_checkMessagesInterval = this->checkMessagesSpin->value();
    mainWin->m_longList = this->executeLongCheckBox->checkState() == Qt::Checked;
+
+   mainWin->m_rtPopDirDebug = this->rtPopDirCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtDirCurICDebug = this->rtDirCurICCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtDirICDebug = this->rtDirICCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtFileTabICDebug = this->rtFileTabICCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtVerTabICDebug = this->rtVerTabICCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtUpdateFTDebug = this->rtUpdateFTCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtUpdateVTDebug = this->rtUpdateVTCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtChecksDebug = this->rtChecksCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtIconStateDebug = this->rtIconStateCheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtRestore1Debug = this->rtRestore1CheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtRestore2Debug = this->rtRestore2CheckBox->checkState() == Qt::Checked;
+   mainWin->m_rtRestore3Debug = this->rtRestore3CheckBox->checkState() == Qt::Checked;
+
    QSettings settings("www.bacula.org", "bat");
    settings.beginGroup("Debug");
    settings.setValue("commDebug", mainWin->m_commDebug);
@@ -661,6 +686,20 @@ void prefsDialog::accept()
    settings.beginGroup("Misc");
    settings.setValue("longList", mainWin->m_longList);
    settings.endGroup();
+   settings.beginGroup("RestoreTree");
+   settings.setValue("rtPopDirDebug", mainWin->m_rtPopDirDebug);
+   settings.setValue("rtDirCurICDebug", mainWin->m_rtDirCurICDebug);
+   settings.setValue("rtDirCurICRetDebug", mainWin->m_rtDirICDebug);
+   settings.setValue("rtFileTabICDebug", mainWin->m_rtFileTabICDebug);
+   settings.setValue("rtVerTabICDebug", mainWin->m_rtVerTabICDebug);
+   settings.setValue("rtUpdateFTDebug", mainWin->m_rtUpdateFTDebug);
+   settings.setValue("rtUpdateVTDebug", mainWin->m_rtUpdateVTDebug);
+   settings.setValue("rtChecksDebug", mainWin->m_rtChecksDebug);
+   settings.setValue("rtIconStateDebug", mainWin->m_rtIconStateDebug);
+   settings.setValue("rtRestore1Debug", mainWin->m_rtRestore1Debug);
+   settings.setValue("rtRestore2Debug", mainWin->m_rtRestore2Debug);
+   settings.setValue("rtRestore3Debug", mainWin->m_rtRestore3Debug);
+   settings.endGroup();
    foreach(Console *console, mainWin->m_consoleHash) {
       console->startTimer();
    }
@@ -696,4 +735,18 @@ void MainWin::readPreferences()
    settings.beginGroup("Misc");
    m_longList = settings.value("longList", false).toBool();
    settings.endGroup();
+   settings.beginGroup("RestoreTree");
+   m_rtPopDirDebug = settings.value("rtPopDirDebug", false).toBool();
+   m_rtDirCurICDebug = settings.value("rtDirCurICDebug", false).toBool();
+   m_rtDirICDebug = settings.value("rtDirCurICRetDebug", false).toBool();
+   m_rtFileTabICDebug = settings.value("rtFileTabICDebug", false).toBool();
+   m_rtVerTabICDebug = settings.value("rtVerTabICDebug", false).toBool();
+   m_rtUpdateFTDebug = settings.value("rtUpdateFTDebug", false).toBool();
+   m_rtUpdateVTDebug = settings.value("rtUpdateVTDebug", false).toBool();
+   m_rtChecksDebug = settings.value("rtChecksDebug", false).toBool();
+   m_rtIconStateDebug = settings.value("rtIconStateDebug", false).toBool();
+   m_rtRestore1Debug = settings.value("rtRestore1Debug", false).toBool();
+   m_rtRestore2Debug = settings.value("rtRestore2Debug", false).toBool();
+   m_rtRestore3Debug = settings.value("rtRestore3Debug", false).toBool();
+   settings.endGroup();
 }
index ddeb55497d21f84d3f13bef4a43fb1f57b2437f0..1db143c3a1c134e9117cb390842c60917d1888d2 100644 (file)
@@ -84,6 +84,18 @@ public:
    bool m_checkMessages;
    int m_checkMessagesInterval;
    bool m_longList;
+   bool m_rtPopDirDebug;
+   bool m_rtDirCurICDebug;
+   bool m_rtDirICDebug;
+   bool m_rtFileTabICDebug;
+   bool m_rtVerTabICDebug;
+   bool m_rtUpdateFTDebug;
+   bool m_rtUpdateVTDebug;
+   bool m_rtChecksDebug;
+   bool m_rtIconStateDebug;
+   bool m_rtRestore1Debug;
+   bool m_rtRestore2Debug;
+   bool m_rtRestore3Debug;
 
 public slots:
    void input_line();
index b14febd5e8decf6b558f8fea2922fc4e25351b65..9454dd7f7c41106f0b674a63f1b248fd4241fe6f 100644 (file)
@@ -5,8 +5,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>415</width>
-    <height>396</height>
+    <width>361</width>
+    <height>452</height>
    </rect>
   </property>
   <property name="sizePolicy" >
       <attribute name="title" >
        <string>Messages</string>
       </attribute>
-      <widget class="QGroupBox" name="groupBox" >
-       <property name="geometry" >
-        <rect>
-         <x>10</x>
-         <y>30</y>
-         <width>291</width>
-         <height>181</height>
-        </rect>
-       </property>
-       <property name="sizePolicy" >
-        <sizepolicy>
-         <hsizetype>5</hsizetype>
-         <vsizetype>0</vsizetype>
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="title" >
-        <string>Messages Options</string>
-       </property>
-       <layout class="QGridLayout" >
-        <property name="margin" >
-         <number>9</number>
-        </property>
-        <property name="spacing" >
-         <number>6</number>
-        </property>
-        <item row="2" column="0" >
-         <widget class="QLabel" name="checkLabel" >
-          <property name="text" >
-           <string>Message check interval in seconds</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="0" >
-         <widget class="QCheckBox" name="checkMessages" >
-          <property name="text" >
-           <string>Check Messages</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0" >
-         <widget class="QSpinBox" name="checkMessagesSpin" >
-          <property name="maximum" >
-           <number>3600</number>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </widget>
-     </widget>
-     <widget class="QWidget" name="tab_2" >
-      <attribute name="title" >
-       <string>Joblist</string>
-      </attribute>
-      <widget class="QGroupBox" name="groupBox_2" >
-       <property name="geometry" >
-        <rect>
-         <x>9</x>
-         <y>62</y>
-         <width>301</width>
-         <height>146</height>
-        </rect>
+      <layout class="QGridLayout" >
+       <property name="margin" >
+        <number>9</number>
        </property>
-       <property name="sizePolicy" >
-        <sizepolicy>
-         <hsizetype>5</hsizetype>
-         <vsizetype>0</vsizetype>
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="title" >
-        <string>Jolist Limit Options</string>
+       <property name="spacing" >
+        <number>6</number>
        </property>
-       <layout class="QGridLayout" >
-        <property name="margin" >
-         <number>9</number>
-        </property>
-        <property name="spacing" >
-         <number>6</number>
-        </property>
-        <item row="0" column="0" >
+       <item row="0" column="0" >
+        <widget class="QGroupBox" name="groupBox" >
+         <property name="sizePolicy" >
+          <sizepolicy>
+           <hsizetype>5</hsizetype>
+           <vsizetype>0</vsizetype>
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="title" >
+          <string>Messages Options</string>
+         </property>
          <layout class="QGridLayout" >
           <property name="margin" >
-           <number>0</number>
+           <number>9</number>
           </property>
           <property name="spacing" >
            <number>6</number>
           </property>
           <item row="2" column="0" >
-           <widget class="QCheckBox" name="daysLimit" >
+           <widget class="QLabel" name="checkLabel" >
             <property name="text" >
-             <string>Days Limit</string>
+             <string>Message check interval in seconds</string>
             </property>
            </widget>
           </item>
-          <item row="3" column="0" >
-           <widget class="QSpinBox" name="daysSpinBox" >
-            <property name="maximum" >
-             <number>10000</number>
-            </property>
-            <property name="minimum" >
-             <number>1</number>
-            </property>
-            <property name="singleStep" >
-             <number>7</number>
+          <item row="0" column="0" >
+           <widget class="QCheckBox" name="checkMessages" >
+            <property name="text" >
+             <string>Check Messages</string>
             </property>
            </widget>
           </item>
           <item row="1" column="0" >
-           <widget class="QSpinBox" name="recordSpinBox" >
+           <widget class="QSpinBox" name="checkMessagesSpin" >
             <property name="maximum" >
-             <number>10000</number>
-            </property>
-            <property name="minimum" >
-             <number>1</number>
-            </property>
-            <property name="singleStep" >
-             <number>25</number>
+             <number>3600</number>
             </property>
            </widget>
           </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_2" >
+      <attribute name="title" >
+       <string>Joblist</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <property name="margin" >
+        <number>9</number>
+       </property>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item row="0" column="0" >
+        <widget class="QGroupBox" name="groupBox_2" >
+         <property name="sizePolicy" >
+          <sizepolicy>
+           <hsizetype>5</hsizetype>
+           <vsizetype>0</vsizetype>
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="title" >
+          <string>Jolist Limit Options</string>
+         </property>
+         <layout class="QGridLayout" >
+          <property name="margin" >
+           <number>9</number>
+          </property>
+          <property name="spacing" >
+           <number>6</number>
+          </property>
           <item row="0" column="0" >
-           <widget class="QCheckBox" name="recordLimit" >
-            <property name="text" >
-             <string>Record Limit</string>
+           <layout class="QGridLayout" >
+            <property name="margin" >
+             <number>0</number>
             </property>
-           </widget>
+            <property name="spacing" >
+             <number>6</number>
+            </property>
+            <item row="2" column="0" >
+             <widget class="QCheckBox" name="daysLimit" >
+              <property name="text" >
+               <string>Days Limit</string>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0" >
+             <widget class="QSpinBox" name="daysSpinBox" >
+              <property name="maximum" >
+               <number>10000</number>
+              </property>
+              <property name="minimum" >
+               <number>1</number>
+              </property>
+              <property name="singleStep" >
+               <number>7</number>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0" >
+             <widget class="QSpinBox" name="recordSpinBox" >
+              <property name="maximum" >
+               <number>10000</number>
+              </property>
+              <property name="minimum" >
+               <number>1</number>
+              </property>
+              <property name="singleStep" >
+               <number>25</number>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="0" >
+             <widget class="QCheckBox" name="recordLimit" >
+              <property name="text" >
+               <string>Record Limit</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
           </item>
          </layout>
-        </item>
-       </layout>
-      </widget>
+        </widget>
+       </item>
+      </layout>
      </widget>
      <widget class="QWidget" name="tab_4" >
       <attribute name="title" >
       <widget class="QGroupBox" name="groupBox_4" >
        <property name="geometry" >
         <rect>
-         <x>30</x>
-         <y>50</y>
-         <width>201</width>
-         <height>81</height>
+         <x>70</x>
+         <y>120</y>
+         <width>190</width>
+         <height>55</height>
         </rect>
        </property>
        <property name="title" >
         <string>Context Sensitive List Commands</string>
        </property>
-       <widget class="QCheckBox" name="executeLongCheckBox" >
-        <property name="geometry" >
-         <rect>
-          <x>10</x>
-          <y>20</y>
-          <width>161</width>
-          <height>19</height>
-         </rect>
+       <layout class="QGridLayout" >
+        <property name="margin" >
+         <number>9</number>
         </property>
-        <property name="text" >
-         <string>Execute Long List</string>
+        <property name="spacing" >
+         <number>6</number>
         </property>
-       </widget>
+        <item row="0" column="0" >
+         <widget class="QCheckBox" name="executeLongCheckBox" >
+          <property name="text" >
+           <string>Execute Long List</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
       </widget>
      </widget>
      <widget class="QWidget" name="tab_3" >
       <attribute name="title" >
        <string>Debug</string>
       </attribute>
-      <widget class="QGroupBox" name="groupBox_3" >
-       <property name="geometry" >
-        <rect>
-         <x>20</x>
-         <y>40</y>
-         <width>271</width>
-         <height>181</height>
-        </rect>
+      <layout class="QGridLayout" >
+       <property name="margin" >
+        <number>9</number>
        </property>
-       <property name="sizePolicy" >
-        <sizepolicy>
-         <hsizetype>5</hsizetype>
-         <vsizetype>0</vsizetype>
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
+       <property name="spacing" >
+        <number>6</number>
        </property>
-       <property name="title" >
-        <string>Debugging Options</string>
+       <item row="0" column="0" >
+        <widget class="QGroupBox" name="groupBox_3" >
+         <property name="sizePolicy" >
+          <sizepolicy>
+           <hsizetype>5</hsizetype>
+           <vsizetype>0</vsizetype>
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="title" >
+          <string>Debugging Options</string>
+         </property>
+         <layout class="QGridLayout" >
+          <property name="margin" >
+           <number>9</number>
+          </property>
+          <property name="spacing" >
+           <number>6</number>
+          </property>
+          <item row="0" column="0" >
+           <layout class="QGridLayout" >
+            <property name="margin" >
+             <number>0</number>
+            </property>
+            <property name="spacing" >
+             <number>6</number>
+            </property>
+            <item row="0" column="0" >
+             <widget class="QCheckBox" name="commDebug" >
+              <property name="text" >
+               <string>Debug comm</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0" >
+             <widget class="QCheckBox" name="displayAll" >
+              <property name="text" >
+               <string>Display all messages in console</string>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0" >
+             <widget class="QCheckBox" name="commandDebug" >
+              <property name="text" >
+               <string>Debug Commands</string>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="0" >
+             <widget class="QCheckBox" name="sqlDebug" >
+              <property name="text" >
+               <string>Debug Sql queries</string>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="0" >
+             <widget class="QCheckBox" name="miscDebug" >
+              <property name="text" >
+               <string>Debug Miscelaneous Items</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_5" >
+      <attribute name="title" >
+       <string>RestoreTree</string>
+      </attribute>
+      <layout class="QGridLayout" >
+       <property name="margin" >
+        <number>9</number>
        </property>
-       <widget class="QWidget" name="layoutWidget_2" >
-        <property name="geometry" >
-         <rect>
-          <x>10</x>
-          <y>21</y>
-          <width>241</width>
-          <height>131</height>
-         </rect>
-        </property>
-        <layout class="QGridLayout" >
-         <property name="margin" >
-          <number>0</number>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item row="0" column="0" >
+        <widget class="QGroupBox" name="groupBox_5" >
+         <property name="sizePolicy" >
+          <sizepolicy>
+           <hsizetype>5</hsizetype>
+           <vsizetype>0</vsizetype>
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
          </property>
-         <property name="spacing" >
-          <number>6</number>
+         <property name="title" >
+          <string>Debugging Options</string>
          </property>
-         <item row="0" column="0" >
-          <widget class="QCheckBox" name="commDebug" >
-           <property name="text" >
-            <string>Debug comm</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="0" >
-          <widget class="QCheckBox" name="displayAll" >
-           <property name="text" >
-            <string>Display all messages in console</string>
-           </property>
-          </widget>
-         </item>
-         <item row="3" column="0" >
-          <widget class="QCheckBox" name="commandDebug" >
-           <property name="text" >
-            <string>Debug Commands</string>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="0" >
-          <widget class="QCheckBox" name="sqlDebug" >
-           <property name="text" >
-            <string>Debug Sql queries</string>
-           </property>
-          </widget>
-         </item>
-         <item row="4" column="0" >
-          <widget class="QCheckBox" name="miscDebug" >
-           <property name="text" >
-            <string>Debug Miscelaneous Items</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </widget>
+         <layout class="QGridLayout" >
+          <property name="margin" >
+           <number>9</number>
+          </property>
+          <property name="spacing" >
+           <number>6</number>
+          </property>
+          <item row="0" column="0" >
+           <layout class="QGridLayout" >
+            <property name="margin" >
+             <number>0</number>
+            </property>
+            <property name="spacing" >
+             <number>6</number>
+            </property>
+            <item row="10" column="0" >
+             <widget class="QCheckBox" name="rtRestore2CheckBox" >
+              <property name="text" >
+               <string>Restore Debug 2</string>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="0" >
+             <widget class="QCheckBox" name="rtDirICCheckBox" >
+              <property name="text" >
+               <string>Directory Item Changed</string>
+              </property>
+             </widget>
+            </item>
+            <item row="9" column="0" >
+             <widget class="QCheckBox" name="rtRestore1CheckBox" >
+              <property name="text" >
+               <string>Restore Debug 1</string>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0" >
+             <widget class="QCheckBox" name="rtDirCurICCheckBox" >
+              <property name="text" >
+               <string>Directory Current Item Changed Debug</string>
+              </property>
+             </widget>
+            </item>
+            <item row="5" column="0" >
+             <widget class="QCheckBox" name="rtUpdateFTCheckBox" >
+              <property name="text" >
+               <string>Update File Table Debug</string>
+              </property>
+             </widget>
+            </item>
+            <item row="4" column="0" >
+             <widget class="QCheckBox" name="rtVerTabICCheckBox" >
+              <property name="text" >
+               <string>Version Table Item Changed Debug</string>
+              </property>
+             </widget>
+            </item>
+            <item row="3" column="0" >
+             <widget class="QCheckBox" name="rtFileTabICCheckBox" >
+              <property name="text" >
+               <string>File Table Item Changed Debug</string>
+              </property>
+             </widget>
+            </item>
+            <item row="8" column="0" >
+             <widget class="QCheckBox" name="rtIconStateCheckBox" >
+              <property name="text" >
+               <string>Icon State Debug</string>
+              </property>
+             </widget>
+            </item>
+            <item row="7" column="0" >
+             <widget class="QCheckBox" name="rtChecksCheckBox" >
+              <property name="text" >
+               <string>Update Checks Debug</string>
+              </property>
+             </widget>
+            </item>
+            <item row="11" column="0" >
+             <widget class="QCheckBox" name="rtRestore3CheckBox" >
+              <property name="text" >
+               <string>Restore Debug 3</string>
+              </property>
+             </widget>
+            </item>
+            <item row="6" column="0" >
+             <widget class="QCheckBox" name="rtUpdateVTCheckBox" >
+              <property name="text" >
+               <string>Update Version Table Debug</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="0" >
+             <widget class="QCheckBox" name="rtPopDirCheckBox" >
+              <property name="text" >
+               <string>Populate Directory Debug</string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
      </widget>
     </widget>
    </item>
+   <item row="2" column="0" >
+    <widget class="QDialogButtonBox" name="buttonBox" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
    <item row="0" column="0" >
     <layout class="QHBoxLayout" >
      <property name="margin" >
      </item>
     </layout>
    </item>
-   <item row="2" column="0" >
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
   </layout>
  </widget>
  <resources/>
index a987ac792366dfd01c514dbaeb7d2542fb8283c0..f7025649c765a05b8cbf7d6de507883bfe1ca3be 100644 (file)
@@ -45,7 +45,7 @@ restoreTree::restoreTree()
    m_name = "Version Browser";
    pgInitialize();
    QTreeWidgetItem* thisitem = mainWin->getFromHash(this);
-   thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/browse.png")));
+   thisitem->setIcon(0, QIcon(QString::fromUtf8(":images/browse.png")));
 
    m_closeable = true;
    m_populated = false;
@@ -70,21 +70,25 @@ restoreTree::~restoreTree()
 void restoreTree::setupPage()
 {
    connect(refreshButton, SIGNAL(pressed()), this, SLOT(refreshButtonPushed()));
+   connect(testButton, SIGNAL(pressed()), this, SLOT(testButtonPushed()));
    connect(jobCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(jobComboChanged(int)));
    connect(directoryTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
-           this, SLOT(directoryItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
-   connect(fileTable, SIGNAL(currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)),
-           this, SLOT(fileItemChanged(QTableWidgetItem *, QTableWidgetItem *)));
+           this, SLOT(directoryCurrentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
    connect(directoryTree, SIGNAL(itemExpanded(QTreeWidgetItem *)),
            this, SLOT(directoryItemExpanded(QTreeWidgetItem *)));
+   connect(directoryTree, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
+           this, SLOT(directoryItemChanged(QTreeWidgetItem *, int)));
+   connect(fileTable, SIGNAL(currentItemChanged(QTableWidgetItem *, QTableWidgetItem *)),
+           this, SLOT(fileCurrentItemChanged(QTableWidgetItem *, QTableWidgetItem *)));
 
-   QStringList titles;
-   titles << "Directories";
+   QStringList titles = QStringList() << "Directories";
    directoryTree->setHeaderLabels(titles);
    clientCombo->addItems(m_console->client_list);
    fileSetCombo->addItem("Any");
    fileSetCombo->addItems(m_console->fileset_list);
    jobCombo->addItems(m_console->job_list);
+
+   directoryTree->setContextMenuPolicy(Qt::ActionsContextMenu);
 }
 
 /*
@@ -102,31 +106,60 @@ void restoreTree::populateDirectoryTree()
    versionTable->clear();
    versionTable->setRowCount(0);
    versionTable->setColumnCount(0);
-   jobTable->clear();
-   jobTable->setRowCount(0);
-   jobTable->setColumnCount(0);
+   m_fileExceptionHash.clear();
+   m_fileExceptionMulti.clear();
+   m_versionExceptionHash.clear();
+   m_directoryIconStateHash.clear();
 
-   m_condition = " Job.name = '" + jobCombo->itemText(jobCombo->currentIndex()) + "'";
+   
    int clientIndex = clientCombo->currentIndex();
-   if ((clientIndex >= 0) && (clientCombo->itemText(clientIndex) != "Any")) {
-      m_condition.append(" AND Client.Name='" + clientCombo->itemText(clientIndex) + "'");
-   }
    int fileSetIndex = fileSetCombo->currentIndex();
-   if ((fileSetIndex >= 0) && (fileSetCombo->itemText(fileSetIndex) != "Any")) {
-      m_condition.append(" AND FileSet.FileSet='" + fileSetCombo->itemText(fileSetIndex) + "'");
-   }
-   m_jobQueryPart =
-      " LEFT OUTER JOIN Client ON (Job.ClientId=Client.ClientId)"
-      " LEFT OUTER JOIN FileSet ON (Job.FileSetId=FileSet.FileSetId)"
-      " WHERE" + m_condition +
-      " AND Job.purgedfiles=0";
-   m_jobQuery =
-      "SELECT Job.Jobid"
-      " From Job" + m_jobQueryPart;
-   if (mainWin->m_sqlDebug) {
-      Pmsg1(000, "Query cmd : %s\n",m_jobQuery.toUtf8().data());
+   QString jobComboText = jobCombo->itemText(jobCombo->currentIndex());
+   QString clientComboText = clientCombo->itemText(clientIndex);
+   QString fileSetComboText = fileSetCombo->itemText(fileSetIndex);
+   if ((m_prevJobCombo != jobComboText) || (m_prevClientCombo != clientComboText) || (m_prevFileSetCombo != fileSetComboText)) {
+      m_prevJobCombo =  jobComboText;
+      m_prevClientCombo = clientComboText;
+      m_prevFileSetCombo = fileSetComboText;
+      if (mainWin->m_rtPopDirDebug) Pmsg0(000, "Repopulating the Job Table\n");
+
+      m_condition = " Job.name = '" + jobCombo->itemText(jobCombo->currentIndex()) + "'";
+      if ((clientIndex >= 0) && (clientCombo->itemText(clientIndex) != "Any")) {
+         m_condition.append(" AND Client.Name='" + clientCombo->itemText(clientIndex) + "'");
+      }
+      if ((fileSetIndex >= 0) && (fileSetCombo->itemText(fileSetIndex) != "Any")) {
+         m_condition.append(" AND FileSet.FileSet='" + fileSetCombo->itemText(fileSetIndex) + "'");
+      }
+      m_jobQueryPart =
+         " LEFT OUTER JOIN Client ON (Job.ClientId=Client.ClientId)"
+         " LEFT OUTER JOIN FileSet ON (Job.FileSetId=FileSet.FileSetId)"
+         " WHERE" + m_condition +
+         " AND Job.purgedfiles=0";
+      m_jobQuery =
+         "SELECT Job.Jobid"
+         " From Job" + m_jobQueryPart;
+      if (mainWin->m_sqlDebug) {
+         Pmsg1(000, "Query cmd : %s\n", m_jobQuery.toUtf8().data());
+      }
+      populateJobTable();
+   } else {
+      m_JobsCheckedList = "";
+      bool first = true;
+      /* Update the items in the version table */
+      int cnt = jobTable->rowCount();
+      for (int row=0; row<cnt; row++) {
+         QTableWidgetItem* jobItem = jobTable->item(row, 0);
+         if (jobItem->checkState() == Qt::Checked) {
+            if (!first)
+               m_JobsCheckedList += ",";
+            m_JobsCheckedList += jobItem->text();
+            first = false;
+            jobItem->setBackground(Qt::green);
+         } else
+            jobItem->setBackground(Qt::gray);
+      }
+      m_jobQuery = m_JobsCheckedList;
    }
-   populateJobTable();
 
    QString cmd =
       "SELECT DISTINCT Path.Path"
@@ -135,7 +168,7 @@ void restoreTree::populateDirectoryTree()
       " LEFT OUTER JOIN Job ON (File.JobId=Job.JobId)"
       " WHERE Job.Jobid IN (" + m_jobQuery + ")";
    if (mainWin->m_sqlDebug) {
-      Pmsg1(000, "Query cmd : %s\n",cmd.toUtf8().data());
+      Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data());
    }
    QStringList directories;
    if (m_console->sql_cmd(cmd, directories)) {
@@ -155,6 +188,8 @@ void restoreTree::populateDirectoryTree()
  */
 void restoreTree::parseDirectory(QString &dir_in)
 {
+   /* m_debugTrap is to only print debugs for a few occurances of calling parseDirectory
+    * instead of printing out what could potentially a whole bunch */
    if (m_debugCnt > 2)
       m_debugTrap = false;
    /* Clean up the directory string remove some funny char after last '/' */
@@ -174,14 +209,11 @@ void restoreTree::parseDirectory(QString &dir_in)
     * / and etc/ .  That should succeed, then add the ones that failed in reverse */
    while (((index = m_slashregex.lastIndexIn(dir_in, -2)) != -1) && (!done)) {
       direct = path = dir_in;
-      path.replace(index+1,dir_in.length()-index-1,"");
-      direct.replace(0,index+1,"");
+      path.replace(index+1, dir_in.length()-index-1,"");
+      direct.replace(0, index+1, "");
       if ((mainWin->m_miscDebug) && (m_debugTrap)) {
          QString msg = QString("length = \"%1\" index = \"%2\" Adding \"%3\" \"%4\"\n")
-                    .arg(dir_in.length())
-                    .arg(index)
-                    .arg(path)
-                    .arg(direct);
+                    .arg(dir_in.length()).arg(index).arg(path).arg(direct);
          Pmsg0(000, msg.toUtf8().data());
       }
       if (addDirectory(path, direct)) done = true;
@@ -193,6 +225,7 @@ void restoreTree::parseDirectory(QString &dir_in)
       }
       dir_in = path;
    }
+
    for (int k=0; k<pathAfter.count(); k++) {
       if (addDirectory(pathAfter[k], dirAfter[k]))
          if ((mainWin->m_miscDebug) && (m_debugTrap))
@@ -210,7 +243,7 @@ void restoreTree::parseDirectory(QString &dir_in)
 bool restoreTree::addDirectory(QString &m_cwd, QString &newdirr)
 {
    QString newdir = newdirr;
-   QString fullpath = m_cwd + newdirr;
+   QString fullPath = m_cwd + newdirr;
    bool ok = true, added = false;
 
    if ((mainWin->m_miscDebug) && (m_debugTrap)) {
@@ -222,15 +255,16 @@ bool restoreTree::addDirectory(QString &m_cwd, QString &newdirr)
 
    if (!m_slashTrap) {
       /* add unix '/' directory first */
-      if (m_dirPaths.empty() && (m_winRegExpPath.indexIn(fullpath,0) == -1)) {
+      if (m_dirPaths.empty() && (m_winRegExpPath.indexIn(fullPath, 0) == -1)) {
          m_slashTrap = true;
          QTreeWidgetItem *item = new QTreeWidgetItem(directoryTree);
-         item->setIcon(0, QIcon(QString::fromUtf8(":images/folder.png")));
          QString text("/");
          item->setText(0, text.toUtf8().data());
          item->setData(0, Qt::UserRole, QVariant(text));
+         item->setData(1, Qt::UserRole, QVariant(Qt::Unchecked));
+         item->setIcon(0, QIcon(QString::fromUtf8(":images/folder.png")));
          if ((mainWin->m_miscDebug) && (m_debugTrap)) {
-            Pmsg1(000, "Pre Inserting %s\n",text.toUtf8().data());
+            Pmsg1(000, "Pre Inserting %s\n", text.toUtf8().data());
          }
          m_dirPaths.insert(text, item);
       }
@@ -238,9 +272,10 @@ bool restoreTree::addDirectory(QString &m_cwd, QString &newdirr)
       if (m_winRegExpDrive.indexIn(m_cwd, 0) == 0) {
          /* this is a windows drive add the base widget */
          QTreeWidgetItem *item = new QTreeWidgetItem(directoryTree);
-         item->setIcon(0, QIcon(QString::fromUtf8(":images/folder.png")));
          item->setText(0, m_cwd);
-         item->setData(0, Qt::UserRole, QVariant(fullpath));
+         item->setData(0, Qt::UserRole, QVariant(fullPath));
+         item->setData(1, Qt::UserRole, QVariant(Qt::Unchecked));
+         item->setIcon(0, QIcon(QString::fromUtf8(":images/folder.png")));
          if ((mainWin->m_miscDebug) && (m_debugTrap)) {
             Pmsg0(000, "Added Base \"letter\":/\n");
          }
@@ -249,14 +284,18 @@ bool restoreTree::addDirectory(QString &m_cwd, QString &newdirr)
    }
  
    /* is it already existent ?? */
-   if (!m_dirPaths.contains(fullpath)) {
+   if (!m_dirPaths.contains(fullPath)) {
       QTreeWidgetItem *item = NULL;
       QTreeWidgetItem *parent = m_dirPaths.value(m_cwd);
       if (parent) {
          /* new directories to add */
          item = new QTreeWidgetItem(parent);
          item->setText(0, newdir.toUtf8().data());
-         item->setData(0, Qt::UserRole, QVariant(fullpath));
+         item->setData(0, Qt::UserRole, QVariant(fullPath));
+         item->setCheckState(0, Qt::Unchecked);
+         /* Store the current state of the check status in column 1, which at
+          * this point has no text*/
+         item->setData(1, Qt::UserRole, QVariant(Qt::Unchecked));
       } else {
          ok = false;
          if ((mainWin->m_miscDebug) && (m_debugTrap)) {
@@ -269,9 +308,9 @@ bool restoreTree::addDirectory(QString &m_cwd, QString &newdirr)
       /* insert into hash */
       if (ok) {
          if ((mainWin->m_miscDebug) && (m_debugTrap)) {
-            Pmsg1(000, "Inserting %s\n",fullpath.toUtf8().data());
+            Pmsg1(000, "Inserting %s\n", fullPath.toUtf8().data());
          }
-         m_dirPaths.insert(fullpath, item);
+         m_dirPaths.insert(fullPath, item);
          added = true;
       }
    }
@@ -317,12 +356,16 @@ void restoreTree::jobComboChanged(int)
 /*
  * Function to populate the file list table
  */
-void restoreTree::directoryItemChanged(QTreeWidgetItem *item, QTreeWidgetItem *)
+void restoreTree::directoryCurrentItemChanged(QTreeWidgetItem *item, QTreeWidgetItem *)
 {
    if (item == NULL)
       return;
+
+   m_fileCheckStateList.clear();
+   disconnect(fileTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(fileTableItemChanged(QTableWidgetItem *)));
    QBrush blackBrush(Qt::black);
-   QString directory = item->data(0,Qt::UserRole).toString();
+   QString directory = item->data(0, Qt::UserRole).toString();
    directoryLabel->setText("Present Working Directory : " + directory);
    QString cmd =
       "SELECT DISTINCT Filename.Name"
@@ -333,18 +376,18 @@ void restoreTree::directoryItemChanged(QTreeWidgetItem *item, QTreeWidgetItem *)
       " WHERE Path.Path='" + directory + "' AND Filename.Name!=''"
       " AND Job.Jobid IN (" + m_jobQuery + ")";
  
-
    QStringList headerlist = (QStringList() << "File Name");
    fileTable->clear();
    /* Also clear the version table here */
    versionTable->clear();
+   versionFileLabel->setText("");
    versionTable->setRowCount(0);
    versionTable->setColumnCount(0);
    fileTable->setColumnCount(headerlist.size());
    fileTable->setHorizontalHeaderLabels(headerlist);
 
    if (mainWin->m_sqlDebug) {
-      Pmsg1(000, "Query cmd : %s\n",cmd.toUtf8().data());
+      Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data());
    }
    QStringList results;
    if (m_console->sql_cmd(cmd, results)) {
@@ -362,11 +405,20 @@ void restoreTree::directoryItemChanged(QTreeWidgetItem *item, QTreeWidgetItem *)
          fieldlist = resultline.split("\t");
          foreach (field, fieldlist) {
             field = field.trimmed();  /* strip leading & trailing spaces */
-            tableItem = new QTableWidgetItem(field,1);
-            tableItem->setFlags(0);
+            tableItem = new QTableWidgetItem(field, 1);
+            /* Possible flags are Qt::ItemFlags flag = Qt::ItemIsSelectable | Qt::ItemIsEditablex
+             *  | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsUserCheckable 
+             *  | Qt::ItemIsEnabled | Qt::ItemIsTristate; */
             tableItem->setForeground(blackBrush);
-            tableItem->setData(Qt::UserRole,QVariant(directory));
-            fileTable->setItem(row, column, tableItem);
+            /* Just in case a column ever gets added */
+            if (column == 0) {
+               Qt::ItemFlags flag = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsTristate;
+               tableItem->setFlags(flag);
+               tableItem->setData(Qt::UserRole, QVariant(directory));
+               fileTable->setItem(row, column, tableItem);
+               m_fileCheckStateList.append(Qt::Unchecked);
+               tableItem->setCheckState(Qt::Unchecked);
+            }
             column++;
          }
          row++;
@@ -376,35 +428,46 @@ void restoreTree::directoryItemChanged(QTreeWidgetItem *item, QTreeWidgetItem *)
    fileTable->resizeColumnsToContents();
    fileTable->resizeRowsToContents();
    fileTable->verticalHeader()->hide();
+   connect(fileTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(fileTableItemChanged(QTableWidgetItem *)));
+   if (mainWin->m_rtDirCurICDebug) Pmsg0(000, "will update file table checks\n");
+   updateFileTableChecks();
 }
 
 /*
  * Function to populate the version table
  */
-void restoreTree::fileItemChanged(QTableWidgetItem *fileTableItem, QTableWidgetItem *)
+void restoreTree::fileCurrentItemChanged(QTableWidgetItem *fileTableItem, QTableWidgetItem *)
 {
    if (fileTableItem == NULL)
       return;
+
+   m_versionCheckStateList.clear();
+   disconnect(versionTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(versionTableItemChanged(QTableWidgetItem *)));
+
    QString file = fileTableItem->text();
+   versionFileLabel->setText(file);
    QString directory = fileTableItem->data(Qt::UserRole).toString();
 
    QBrush blackBrush(Qt::black);
    QString cmd = 
-      "SELECT File.FileId, Job.JobId, Job.EndTime, File.Md5 "
+      "SELECT Job.JobId AS JobId, Job.Level AS Type, Job.EndTime AS EndTime, File.Md5 AS MD5"
       " FROM File"
       " LEFT OUTER JOIN Filename on (Filename.FilenameId=File.FilenameId)"
       " LEFT OUTER JOIN Path ON (Path.PathId=File.PathId)"
       " LEFT OUTER JOIN Job ON (File.JobId=Job.JobId)"
       " WHERE Filename.Name='" + file + "' AND Path.Path='" + directory + "'"
-      " AND Job.Jobid IN (" + m_jobQuery + ")";
+      " AND Job.Jobid IN (" + m_jobQuery + ")"
+      " ORDER BY Job.EndTime DESC";
 
-   QStringList headerlist = (QStringList() << "File Id" << "Job Id" << "End Time" << "Md5");
+   QStringList headerlist = (QStringList() << "Job Id" << "Type" << "End Time" << "Md5");
    versionTable->clear();
    versionTable->setColumnCount(headerlist.size());
    versionTable->setHorizontalHeaderLabels(headerlist);
 
    if (mainWin->m_sqlDebug) {
-      Pmsg1(000, "Query cmd : %s\n",cmd.toUtf8().data());
+      Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data());
    }
    QStringList results;
    if (m_console->sql_cmd(cmd, results)) {
@@ -424,11 +487,18 @@ void restoreTree::fileItemChanged(QTableWidgetItem *fileTableItem, QTableWidgetI
             /* Iterate through fields in the record */
             foreach (field, fieldlist) {
                field = field.trimmed();  /* strip leading & trailing spaces */
-               tableItem = new QTableWidgetItem(field,1);
+               tableItem = new QTableWidgetItem(field, 1);
                tableItem->setFlags(0);
                tableItem->setForeground(blackBrush);
-               tableItem->setData(Qt::UserRole,QVariant(directory));
+               tableItem->setData(Qt::UserRole, QVariant(directory));
                versionTable->setItem(row, column, tableItem);
+
+               if (column == 0) {
+                  Qt::ItemFlags flag = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsTristate;
+                  tableItem->setFlags(flag);
+                  m_versionCheckStateList.append(Qt::Unchecked);
+                  tableItem->setCheckState(Qt::Unchecked);
+               }
                column++;
             }
             row++;
@@ -438,6 +508,9 @@ void restoreTree::fileItemChanged(QTableWidgetItem *fileTableItem, QTableWidgetI
    versionTable->resizeColumnsToContents();
    versionTable->resizeRowsToContents();
    versionTable->verticalHeader()->hide();
+   connect(versionTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(versionTableItemChanged(QTableWidgetItem *)));
+   updateVersionTableChecks();
 }
 
 /*
@@ -464,17 +537,23 @@ void restoreTree::readSettings()
 
 /*
  * This is a funcion to accomplish the one thing I struggled to figure out what
- * was taking so long.  It add the icons, but after the tree is made.
+ * was taking so long.  It add the icons, but after the tree is made.  Seemed to
+ * work fast after changing from svg to png file for graphic.
  */
 void restoreTree::directoryItemExpanded(QTreeWidgetItem *item)
 {
    int childCount = item->childCount();
    for (int i=0; i<childCount; i++) {
       QTreeWidgetItem *child = item->child(i);
-      child->setIcon(0,QIcon(QString::fromUtf8(":images/folder.png")));
+      if (child->icon(0).isNull())
+         child->setIcon(0, QIcon(QString::fromUtf8(":images/folder.png")));
    }
 }
 
+/*
+ * I wanted a table to show what jobs meet the criterion and are being used to
+ * populate the directory tree and file and version tables.
+ */
 void restoreTree::populateJobTable()
 {
    QBrush blackBrush(Qt::black);
@@ -483,11 +562,11 @@ void restoreTree::populateJobTable()
    jobTable->setColumnCount(headerlist.size());
    jobTable->setHorizontalHeaderLabels(headerlist);
    QString jobQuery =
-      "SELECT Job.Jobid AS Id, Job.Endtime AS EndTime, Job.Level AS Level"
+      "SELECT Job.Jobid AS Id, Job.EndTime AS EndTime, Job.Level AS Level"
       " FROM Job" + m_jobQueryPart +
-      " ORDER BY Job.Endtime DESC";
+      " ORDER BY Job.EndTime DESC";
    if (mainWin->m_sqlDebug) {
-      Pmsg1(000, "Query cmd : %s\n",jobQuery.toUtf8().data());
+      Pmsg1(000, "Query cmd : %s\n", jobQuery.toUtf8().data());
    }
 
    QStringList results;
@@ -508,10 +587,16 @@ void restoreTree::populateJobTable()
             /* Iterate through fields in the record */
             foreach (field, fieldlist) {
                field = field.trimmed();  /* strip leading & trailing spaces */
-               tableItem = new QTableWidgetItem(field,1);
+               tableItem = new QTableWidgetItem(field, 1);
                tableItem->setFlags(0);
                tableItem->setForeground(blackBrush);
                jobTable->setItem(row, column, tableItem);
+               if (column == 0) {
+                  Qt::ItemFlags flag = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsTristate;
+                  tableItem->setFlags(flag);
+                  tableItem->setCheckState(Qt::Checked);
+                  tableItem->setBackground(Qt::green);
+               }
                column++;
             }
             row++;
@@ -522,3 +607,817 @@ void restoreTree::populateJobTable()
    jobTable->resizeRowsToContents();
    jobTable->verticalHeader()->hide();
 }
+
+/*
+ * When a directory item is "changed" check the state of the checkable item
+ * to see if it is different than what it was which is stored in Qt::UserRole
+ * of the 2nd column, column 1, of the tree widget.
+ */
+void restoreTree::directoryItemChanged(QTreeWidgetItem *item, int /*column*/)
+{
+   Qt::CheckState prevState = (Qt::CheckState)item->data(1, Qt::UserRole).toInt();
+   Qt::CheckState curState = item->checkState(0);
+   QTreeWidgetItem* parent = item->parent();
+   Qt::CheckState parState;
+   if (parent) parState = parent->checkState(0);
+   else parState = (Qt::CheckState)3;
+   if (mainWin->m_rtDirICDebug) {
+      QString msg = QString("directory item OBJECT has changed prev=%1 cur=%2 par=%3 dir=%4\n")
+         .arg(prevState).arg(curState).arg(parState).arg(item->text(0));
+      Pmsg1(000, "%s", msg.toUtf8().data()); }
+   /* I only care when the check state changes */
+   if (prevState == curState) {
+      if (mainWin->m_rtDirICDebug) Pmsg0(000, "Returning Early\n");
+      return;
+   }
+
+   if ((prevState == Qt::Unchecked) && (curState == Qt::Checked) && (parState != Qt::Unchecked)) {
+      if (mainWin->m_rtDirICDebug) Pmsg0(000, "Disconnected Setting to Qt::PartiallyChecked\n");
+      directoryTreeDisconnectedSet(item, Qt::PartiallyChecked);
+      curState = Qt::PartiallyChecked;
+   }
+   if ((prevState == Qt::PartiallyChecked) && (curState == Qt::Checked)) {
+      if (mainWin->m_rtDirICDebug) Pmsg0(000, "Disconnected Setting to Qt::Unchecked\n");
+      directoryTreeDisconnectedSet(item, Qt::Unchecked);
+      curState = Qt::Unchecked;
+   }
+   if (mainWin->m_rtDirICDebug) {
+      QString msg = QString("directory item CHECKSTATE has changed prev=%1 cur=%2 par=%3 dir=%4\n")
+         .arg(prevState).arg(curState).arg(parState).arg(item->text(0));
+      Pmsg1(000, "%s", msg.toUtf8().data()); }
+
+   item->setData(1, Qt::UserRole, QVariant(curState));
+   Qt::CheckState childState = curState;
+   if (childState == Qt::Checked)
+      childState = Qt::PartiallyChecked;
+   setCheckofChildren(item, childState);
+
+   /* Remove items from the exception lists.  The multi exception list is my index
+    * of what exceptions can be removed when the directory is known*/
+   QString directory = item->data(0, Qt::UserRole).toString();
+   QStringList fullPathList = m_fileExceptionMulti.values(directory);
+   int fullPathListCount = fullPathList.count();
+   if ((mainWin->m_rtDirICDebug) && fullPathListCount) Pmsg2(000, "Will attempt to remove file exceptions for %s count %i\n", directory.toUtf8().data(), fullPathListCount);
+   foreach (QString fullPath, fullPathList) {
+      /* If there is no value in the hash for the key fullPath a value of 3 will be returned
+       * which will match no Qt::xxx values */
+      Qt::CheckState hashState = m_fileExceptionHash.value(fullPath, (Qt::CheckState)3);
+      if (mainWin->m_rtDirICDebug) Pmsg2(000, "hashState=%i childState=%i\n", hashState, childState);
+      if (hashState == Qt::Unchecked) {
+         fileExceptionRemove(fullPath, directory);
+         m_versionExceptionHash.remove(fullPath);
+         if (mainWin->m_rtDirICDebug) Pmsg0(000, "Attempted Removal A\n");
+      }
+      if (hashState == Qt::Checked) {
+         fileExceptionRemove(fullPath, directory);
+         m_versionExceptionHash.remove(fullPath);
+         if (mainWin->m_rtDirICDebug) Pmsg0(000, "Attempted Removal B\n");
+      }
+   }
+
+   if (item == directoryTree->currentItem()) {
+      if (mainWin->m_rtDirICDebug) Pmsg0(000, "Will attempt to update File Table Checks\n");
+      updateFileTableChecks();
+      versionTable->clear();
+      versionTable->setRowCount(0);
+      versionTable->setColumnCount(0);
+   }
+   if (mainWin->m_rtDirICDebug) Pmsg0(000, "Returning At End\n");
+}
+
+/*
+ * When a directory item check state is changed, this function iterates through
+ * all subdirectories and sets all to the passed state, which is either partially
+ * checked or unchecked.
+ */
+void restoreTree::setCheckofChildren(QTreeWidgetItem *item, Qt::CheckState state)
+{
+   int childCount;
+   childCount = item->childCount();
+   for (int i=0; i<childCount; i++) {
+      QTreeWidgetItem *child = item->child(i);
+      child->setData(1, Qt::UserRole, QVariant(state));
+      child->setCheckState(0, state);
+      setCheckofChildren(child, state);
+   }
+}
+
+/*
+ * When a File Table Item is "changed" check to see if the state of the checkable
+ * item has changed which is stored in m_fileCheckStateList
+ * If changed store in a hash m_fileExceptionHash that whether this file should be
+ * restored or not.
+ * Called as a slot, connected after populated (after directory current changed called)
+ */
+void restoreTree::fileTableItemChanged(QTableWidgetItem *item)
+{
+   /* get the previous and current check states */
+   int row = fileTable->row(item);
+   Qt::CheckState prevState;
+   /* prevent a segfault */
+   prevState = m_fileCheckStateList[row];
+   Qt::CheckState curState = item->checkState();
+
+   /* deterimine the default state from the state of the directory */
+   QTreeWidgetItem *dirTreeItem = directoryTree->currentItem();
+   Qt::CheckState dirState = (Qt::CheckState)dirTreeItem->data(1, Qt::UserRole).toInt();
+   Qt::CheckState defState = Qt::PartiallyChecked;
+   if (dirState == Qt::Unchecked) defState = Qt::Unchecked;
+
+   /* determine if it is already in the m_fileExceptionHash */
+   QString directory = directoryTree->currentItem()->data(0, Qt::UserRole).toString();
+   QString file = item->text();
+   QString fullPath = directory + file;
+   Qt::CheckState hashState = m_fileExceptionHash.value(fullPath, (Qt::CheckState)3);
+   int verJobNum = m_versionExceptionHash.value(fullPath, 0);
+
+   if (mainWin->m_rtFileTabICDebug) {
+      QString msg = QString("filerow=%1 prev=%2 cur=%3 def=%4 hash=%5 dir=%6 verJobNum=%7\n")
+         .arg(row).arg(prevState).arg(curState).arg(defState).arg(hashState).arg(dirState).arg(verJobNum);
+      Pmsg1(000, "%s", msg.toUtf8().data()); }
+
+   /* Remove the hash if currently checked previously unchecked and directory is checked or partial */
+   if ((prevState == Qt::Checked) && (curState == Qt::Unchecked) && (dirState == Qt::Unchecked)) {
+      /* it can behave as defaulted so current of unchecked is fine */
+      if (mainWin->m_rtFileTabICDebug) Pmsg0(000, "Will fileExceptionRemove and m_versionExceptionHash.remove here\n");
+      fileExceptionRemove(fullPath, directory);
+      m_versionExceptionHash.remove(fullPath);
+   } else if ((prevState == Qt::PartiallyChecked) && (curState == Qt::Checked) && (dirState != Qt::Unchecked) && (verJobNum == 0)) {
+      if (mainWin->m_rtFileTabICDebug) Pmsg0(000, "Will fileExceptionInsert here\n");
+      fileExceptionInsert(fullPath, directory, Qt::Unchecked);
+   } else if ((prevState == Qt::Unchecked) && (curState == Qt::Checked) && (dirState != Qt::Unchecked) && (verJobNum == 0) && (defState == Qt::PartiallyChecked)) {
+      /* filerow=2 prev=0 cur=2 def=1 hash=0 dir=2 verJobNum=0 */
+      if (mainWin->m_rtFileTabICDebug) Pmsg0(000, "Will fileExceptionRemove here\n");
+      fileExceptionRemove(fullPath, directory);
+   } else if ((prevState == Qt::Checked) && (curState == Qt::Unchecked) && (defState == Qt::PartiallyChecked) && (verJobNum != 0) && (hashState == Qt::Checked)) {
+      /* Check dir, check version, attempt uncheck in file
+       * filerow=4 prev=2 cur=0 def=1 hash=2 dir=2 verJobNum=53 */
+      if (mainWin->m_rtFileTabICDebug) Pmsg0(000, "Will fileExceptionRemove and m_versionExceptionHash.remove here\n");
+      fileExceptionRemove(fullPath, directory);
+      m_versionExceptionHash.remove(fullPath);
+   } else if ((prevState == Qt::Unchecked) && (curState == Qt::Checked) && (dirState != Qt::Unchecked) && (verJobNum == 0)) {
+      /* filerow=0 prev=0 cur=2 def=1 hash=0 dirState=2 verJobNum */
+      if (mainWin->m_rtFileTabICDebug) Pmsg0(000, "Will Not remove here\n");
+   } else if (prevState != curState) {
+      if (mainWin->m_rtFileTabICDebug) Pmsg2(000, "  THE STATE OF THE Check has changed, Setting StateList[%i] to %i\n", row, curState);
+      /* A user did not set the check state to Partially checked, ignore if so */
+      if (curState != Qt::PartiallyChecked) {
+         if ((defState == Qt::Unchecked) && (prevState == Qt::PartiallyChecked) && (curState == Qt::Unchecked)) {
+            if (mainWin->m_rtFileTabICDebug) Pmsg0(000, "  got here\n");
+         } else {
+            if (mainWin->m_rtFileTabICDebug) Pmsg2(000, "  Inserting into m_fileExceptionHash %s, %i\n", fullPath.toUtf8().data(), curState);
+            fileExceptionInsert(fullPath, directory, curState);
+         }
+      } else {
+         if (mainWin->m_rtFileTabICDebug) Pmsg1(000, "Removing version hash for %s\n", fullPath.toUtf8().data());
+         /* programattically been changed back to a default state of Qt::PartiallyChecked remove the version hash here */
+         m_versionExceptionHash.remove(fullPath);
+      }
+   }
+
+   updateFileTableChecks();
+   updateVersionTableChecks();
+}
+
+/*
+ * function to insert keys and values to both m_fileExceptionHash and m_fileExceptionMulti
+ */
+void restoreTree::fileExceptionInsert(QString &fullPath, QString &direcotry, Qt::CheckState state)
+{
+   m_fileExceptionHash.insert(fullPath, state);
+   m_fileExceptionMulti.insert(direcotry, fullPath);
+   directoryIconStateInsert(fullPath, state);
+}
+
+/*
+ * function to remove keys from both m_fileExceptionHash and m_fileExceptionMulti
+ */
+void restoreTree::fileExceptionRemove(QString &fullPath, QString &directory)
+{
+   m_fileExceptionHash.remove(fullPath);
+   /* pull the list of values in the multi */
+   QStringList fullPathList = m_fileExceptionMulti.values(directory);
+   /* get the index of the fullpath to remove */
+   int index = fullPathList.indexOf(fullPath);
+   if (index != -1) {
+      /* remove the desired item in the list */
+      fullPathList.removeAt(index);
+      /* remove the entire list from the multi */
+      m_fileExceptionMulti.remove(directory);
+      /* readd the remaining */
+      foreach (QString fp, fullPathList) {
+         m_fileExceptionMulti.insert(directory, fp);
+      }
+   }
+   directoryIconStateRemove();
+}
+
+/*
+ * Overloaded function to be called from the slot and from other places to set the state
+ * of the check marks in the version table
+ */
+void restoreTree::versionTableItemChanged(QTableWidgetItem *item)
+{
+   /* get the previous and current check states */
+   int row = versionTable->row(item);
+   QTableWidgetItem *colZeroItem = versionTable->item(row, 0);
+   Qt::CheckState prevState = m_versionCheckStateList[row];
+   Qt::CheckState curState = (Qt::CheckState)colZeroItem->checkState();
+   m_versionCheckStateList[row] = curState;
+
+   /* deterimine the default state from the state of the file */
+   QTableWidgetItem *fileTableItem = fileTable->currentItem();
+   Qt::CheckState fileState = (Qt::CheckState)fileTableItem->checkState();
+
+   /* determine the default state */
+   Qt::CheckState defState;
+   if (row == 0) {
+      defState = Qt::PartiallyChecked;
+      if (fileState == Qt::Unchecked)
+         defState = Qt::Unchecked;
+   }
+   else
+      defState = Qt::Unchecked;
+
+   /* determine if it is already in the versionExceptionHash */
+   QString directory = directoryTree->currentItem()->data(0, Qt::UserRole).toString();
+   Qt::CheckState dirState = directoryTree->currentItem()->checkState(0);
+   QString file = fileTableItem->text();
+   QString fullPath = directory + file;
+   int thisJobNum = colZeroItem->text().toInt();
+   int hashJobNum = m_versionExceptionHash.value(fullPath, 0);
+
+   if (mainWin->m_rtVerTabICDebug) {
+      QString msg = QString("versrow=%1 prev=%2 cur=%3 def=%4 dir=%5 hashJobNum=%6 thisJobNum=%7 filestate=%8 fec=%9 vec=%10\n")
+         .arg(row).arg(prevState).arg(curState).arg(defState).arg(dirState).arg(hashJobNum).arg(thisJobNum).arg(fileState)
+         .arg(m_fileExceptionHash.count()).arg(m_versionExceptionHash.count());
+      Pmsg1(000, "%s", msg.toUtf8().data()); }
+   /* if changed from partially checked to checked, make it unchecked */
+   if ((curState == Qt::Checked) && (row == 0) && (fileState == Qt::Unchecked)) {
+      if (mainWin->m_rtVerTabICDebug) Pmsg0(000, "Setting to Qt::Checked\n");
+      fileTableItem->setCheckState(Qt::Checked);
+   } else if ((prevState == Qt::PartiallyChecked) && (curState == Qt::Checked) && (row == 0) && (fileState == Qt::Checked) && (dirState == Qt::Unchecked)) {
+      //versrow=0 prev=1 cur=2 def=1 dir=0 hashJobNum=0 thisJobNum=64 filestate=2 fec=1 vec=0
+      if (mainWin->m_rtVerTabICDebug) Pmsg1(000, "fileExceptionRemove %s, %i\n", fullPath.toUtf8().data());
+      fileExceptionRemove(fullPath, directory);
+   } else if ((curState == Qt::Checked) && (row == 0) && (hashJobNum != 0) && (dirState != Qt::Unchecked)) {
+      //versrow=0 prev=0 cur=2 def=1 dir=2 hashJobNum=53 thisJobNum=64 filestate=2 fec=1 vec=1
+      if (mainWin->m_rtVerTabICDebug) Pmsg1(000, "m_versionExceptionHash.remove %s\n", fullPath.toUtf8().data());
+      m_versionExceptionHash.remove(fullPath);
+      fileExceptionRemove(fullPath, directory);
+   } else if ((curState == Qt::Checked) && (row == 0)) {
+      if (mainWin->m_rtVerTabICDebug) Pmsg1(000, "m_versionExceptionHash.remove %s\n", fullPath.toUtf8().data());
+      m_versionExceptionHash.remove(fullPath);
+   } else if (prevState != curState) {
+      if (mainWin->m_rtVerTabICDebug) Pmsg2(000, "  THE STATE OF THE version Check has changed, Setting StateList[%i] to %i\n", row, curState);
+      if ((curState == Qt::Checked) || (curState == Qt::PartiallyChecked) && (row != 0)) {
+         if (mainWin->m_rtVerTabICDebug) Pmsg2(000, "Inserting into m_versionExceptionHash %s, %i\n", fullPath.toUtf8().data(), thisJobNum);
+         m_versionExceptionHash.insert(fullPath, thisJobNum);
+         if (fileState != Qt::Checked) {
+            if (mainWin->m_rtVerTabICDebug) Pmsg2(000, "Inserting into m_fileExceptionHash %s, %i\n", fullPath.toUtf8().data(), curState);
+            fileExceptionInsert(fullPath, directory, curState);
+         }
+      } else {
+         if (mainWin->m_rtVerTabICDebug) Pmsg0(000, "got here\n");
+      }
+   } else {
+     if (mainWin->m_rtVerTabICDebug) Pmsg0(000, "no conditions met\n");
+   }
+
+   updateFileTableChecks();
+   updateVersionTableChecks();
+}
+
+/*
+ * Simple function to set the check state in the file table by disconnecting the
+ * signal/slot the setting then reconnecting the signal/slot
+ */
+void restoreTree::fileTableDisconnectedSet(QTableWidgetItem *item, Qt::CheckState state, bool color)
+{
+   disconnect(fileTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(fileTableItemChanged(QTableWidgetItem *)));
+   item->setCheckState(state);
+   if (color) item->setBackground(Qt::yellow);
+   else item->setBackground(Qt::white);
+   connect(fileTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(fileTableItemChanged(QTableWidgetItem *)));
+}
+
+/*
+ * Simple function to set the check state in the version table by disconnecting the
+ * signal/slot the setting then reconnecting the signal/slot
+ */
+void restoreTree::versionTableDisconnectedSet(QTableWidgetItem *item, Qt::CheckState state)
+{
+   disconnect(versionTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(versionTableItemChanged(QTableWidgetItem *)));
+   item->setCheckState(state);
+   connect(versionTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+           this, SLOT(versionTableItemChanged(QTableWidgetItem *)));
+}
+
+/*
+ * Simple function to set the check state in the directory tree by disconnecting the
+ * signal/slot the setting then reconnecting the signal/slot
+ */
+void restoreTree::directoryTreeDisconnectedSet(QTreeWidgetItem *item, Qt::CheckState state)
+{
+   disconnect(directoryTree, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
+           this, SLOT(directoryItemChanged(QTreeWidgetItem *, int)));
+   item->setCheckState(0, state);
+   connect(directoryTree, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
+           this, SLOT(directoryItemChanged(QTreeWidgetItem *, int)));
+}
+
+/*
+ * Simplify the updating of the check state in the File table by iterating through
+ * each item in the file table to determine it's appropriate state.
+ * !! Will probably want to concoct a way to do this without iterating for the possibility
+ * of the very large directories.
+ */
+void restoreTree::updateFileTableChecks()
+{
+   /* deterimine the default state from the state of the directory */
+   QTreeWidgetItem *dirTreeItem = directoryTree->currentItem();
+   Qt::CheckState dirState = dirTreeItem->checkState(0);
+
+   QString dirName = dirTreeItem->data(0, Qt::UserRole).toString();
+
+   /* Update the items in the version table */
+   int rcnt = fileTable->rowCount();
+   for (int row=0; row<rcnt; row++) {
+      QTableWidgetItem* item = fileTable->item(row, 0);
+
+      Qt::CheckState curState = item->checkState();
+      Qt::CheckState newState = Qt::PartiallyChecked;
+      if (dirState == Qt::Unchecked) newState = Qt::Unchecked;
+
+      /* determine if it is already in the m_fileExceptionHash */
+      QString file = item->text();
+      QString fullPath = dirName + file;
+      Qt::CheckState hashState = m_fileExceptionHash.value(fullPath, (Qt::CheckState)3);
+      int hashJobNum = m_versionExceptionHash.value(fullPath, 0);
+
+      if (hashState != 3) newState = hashState;
+
+      if (mainWin->m_rtUpdateFTDebug) {
+         QString msg = QString("file row=%1 cur=%2 hash=%3 new=%4 dirState=%5\n")
+            .arg(row).arg(curState).arg(hashState).arg(newState).arg(dirState);
+         Pmsg1(000, "%s", msg.toUtf8().data());
+      }
+
+      bool docolor = false;
+      if (hashJobNum != 0) docolor = true;
+      bool isyellow = item->background().color() == QColor(Qt::yellow);
+      if ((newState != curState) || (hashState == 3) || ((isyellow && !docolor) || (!isyellow && docolor)))
+         fileTableDisconnectedSet(item, newState, docolor);
+      m_fileCheckStateList[row] = newState;
+   }
+}
+
+/*
+ * Simplify the updating of the check state in the Version table by iterating through
+ * each item in the file table to determine it's appropriate state.
+ */
+void restoreTree::updateVersionTableChecks()
+{
+   /* deterimine the default state from the state of the directory */
+   QTreeWidgetItem *dirTreeItem = directoryTree->currentItem();
+   Qt::CheckState dirState = dirTreeItem->checkState(0);
+   QString dirName = dirTreeItem->data(0, Qt::UserRole).toString();
+
+   /* deterimine the default state from the state of the file */
+   QTableWidgetItem *fileTableItem = fileTable->item(fileTable->currentRow(), 0);
+   Qt::CheckState fileState = fileTableItem->checkState();
+   QString file = fileTableItem->text();
+   QString fullPath = dirName + file;
+   int hashJobNum = m_versionExceptionHash.value(fullPath, 0);
+
+   /* Update the items in the version table */
+   int cnt = versionTable->rowCount();
+   for (int row=0; row<cnt; row++) {
+      QTableWidgetItem* item = versionTable->item(row, 0);
+
+      Qt::CheckState curState = item->checkState();
+      Qt::CheckState newState = Qt::Unchecked;
+
+      if ((row == 0) && (fileState != Qt::Unchecked) && (hashJobNum == 0))
+         newState = Qt::PartiallyChecked;
+      /* determine if it is already in the versionExceptionHash */
+      if (hashJobNum) {
+         int thisJobNum = item->text().toInt();
+         if (thisJobNum == hashJobNum)
+            newState = Qt::Checked;
+      }
+      if (mainWin->m_rtChecksDebug) {
+         QString msg = QString("ver row=%1 cur=%2 hashJobNum=%3 new=%4 dirState=%5\n")
+            .arg(row).arg(curState).arg(hashJobNum).arg(newState).arg(dirState);
+         Pmsg1(000, "%s", msg.toUtf8().data());
+      }
+      if (newState != curState)
+         versionTableDisconnectedSet(item, newState);
+      m_versionCheckStateList[row] = newState;
+   }
+}
+
+/*
+ * Quick subroutine to "return via subPaths" a list of subpaths when passed a fullPath
+ */
+void restoreTree::fullPathtoSubPaths(QStringList &subPaths, QString &fullPath_in)
+{
+   int index;
+   bool done = false;
+   QString fullPath = fullPath_in;
+   QString direct, path;
+   while (((index = m_slashregex.lastIndexIn(fullPath, -2)) != -1) && (!done)) {
+      direct = path = fullPath;
+      path.replace(index+1, fullPath.length()-index-1, "");
+      direct.replace(0, index+1, "");
+      if (false) {
+         QString msg = QString("length = \"%1\" index = \"%2\" Considering \"%3\" \"%4\"\n")
+                    .arg(fullPath.length()).arg(index).arg(path).arg(direct);
+         Pmsg0(000, msg.toUtf8().data());
+      }
+      fullPath = path;
+      subPaths.append(fullPath);
+   }
+}
+
+/*
+ * A Function to set the icon state and insert a record into
+ * m_directoryIconStateHash when an exception is added by the user
+ */
+void restoreTree::directoryIconStateInsert(QString &fullPath, Qt::CheckState excpState)
+{
+   QStringList paths;
+   fullPathtoSubPaths(paths, fullPath);
+   /* an exception that causes the item in the file table to be "Checked" has occured */
+   if (excpState == Qt::Checked) {
+      bool foundAsUnChecked = false;
+      QTreeWidgetItem *firstItem = m_dirPaths.value(paths[0]);
+      if (firstItem) {
+         if (firstItem->checkState(0) == Qt::Unchecked)
+            foundAsUnChecked = true;
+      }
+      if (foundAsUnChecked) {
+          /* as long as directory item is Unchecked, set icon state to "green check" */
+         bool done = false;
+         QListIterator<QString> siter(paths);
+         while (siter.hasNext() && !done) {
+            QString path = siter.next();
+            QTreeWidgetItem *item = m_dirPaths.value(path);
+            if (item) {
+               if (item->checkState(0) != Qt::Unchecked)
+                  done = true;
+               else {
+                  directorySetIcon(1, FolderGreenChecked, path, item);
+                  if (mainWin->m_rtIconStateDebug) Pmsg1(000, "In restoreTree::directoryIconStateInsert inserting %s\n", path.toUtf8().data());
+               }
+            }
+         }
+      } else {
+         /* if it is partially checked or fully checked insert green Check until a unchecked is found in the path */
+         if (mainWin->m_rtIconStateDebug) Pmsg1(000, "In restoreTree::directoryIconStateInsert Aqua %s\n", paths[0].toUtf8().data());
+         bool done = false;
+         QListIterator<QString> siter(paths);
+         while (siter.hasNext() && !done) {
+            QString path = siter.next();
+            QTreeWidgetItem *item = m_dirPaths.value(path);
+            if (item) {  /* if the directory item is checked, set icon state to unchecked "green check" */
+               if (item->checkState(0) == Qt::Checked)
+                  done = true;
+               directorySetIcon(1, FolderGreenChecked, path, item);
+               if (mainWin->m_rtIconStateDebug) Pmsg1(000, "In restoreTree::directoryIconStateInsert boogie %s\n", path.toUtf8().data());
+            }
+         }
+      }
+   }
+   /* an exception that causes the item in the file table to be "Unchecked" has occured */
+   if (excpState == Qt::Unchecked) {
+      bool done = false;
+      QListIterator<QString> siter(paths);
+      while (siter.hasNext() && !done) {
+         QString path = siter.next();
+         QTreeWidgetItem *item = m_dirPaths.value(path);
+         if (item) {  /* if the directory item is checked, set icon state to unchecked "white check" */
+            if (item->checkState(0) == Qt::Checked)
+               done = true;
+            directorySetIcon(1, FolderWhiteChecked, path, item);
+            if (mainWin->m_rtIconStateDebug) Pmsg1(000, "In restoreTree::directoryIconStateInsert boogie %s\n", path.toUtf8().data());
+         }
+      }
+   }
+}
+
+/*
+ * A function to set the icon state back to "folder" and to remove a record from
+ * m_directoryIconStateHash when an exception is removed by a user.
+ */
+void restoreTree::directoryIconStateRemove()
+{
+   QHash<QString, int> shouldBeIconStateHash;
+   /* First determine all paths with icons that should be checked with m_fileExceptionHash */
+   /* Use iterator tera to iterate through m_fileExceptionHash */
+   QHashIterator<QString, Qt::CheckState> tera(m_fileExceptionHash);
+   while (tera.hasNext()) {
+      tera.next();
+      if (mainWin->m_rtIconStateDebug) Pmsg2(000, "Alpha Key %s value %i\n", tera.key().toUtf8().data(), tera.value());
+
+      QString keyPath = tera.key();
+      Qt::CheckState state = tera.value();
+
+      QStringList paths;
+      fullPathtoSubPaths(paths, keyPath);
+      /* if the state of the item in m_fileExceptionHash is checked 
+       * each of the subpaths should be "Checked Green" */
+      if (state == Qt::Checked) {
+
+         bool foundAsUnChecked = false;
+         QTreeWidgetItem *firstItem = m_dirPaths.value(paths[0]);
+         if (firstItem) {
+            if (firstItem->checkState(0) == Qt::Unchecked)
+               foundAsUnChecked = true;
+         }
+         if (foundAsUnChecked) {
+            /* The right most directory is Unchecked, iterate leftwards
+             * as long as directory item is Unchecked, set icon state to "green check" */
+            bool done = false;
+            QListIterator<QString> siter(paths);
+            while (siter.hasNext() && !done) {
+               QString path = siter.next();
+               QTreeWidgetItem *item = m_dirPaths.value(path);
+               if (item) {
+                  if (item->checkState(0) != Qt::Unchecked)
+                     done = true;
+                  else {
+                     shouldBeIconStateHash.insert(path, FolderGreenChecked);
+                     if (mainWin->m_rtIconStateDebug) Pmsg1(000, "In restoreTree::directoryIconStateInsert inserting %s\n", path.toUtf8().data());
+                  }
+               }
+            }
+         }
+         else {
+            /* The right most directory is Unchecked, iterate leftwards
+             * until directory item is Checked, set icon state to "green check" */
+            bool done = false;
+            QListIterator<QString> siter(paths);
+            while (siter.hasNext() && !done) {
+               QString path = siter.next();
+               QTreeWidgetItem *item = m_dirPaths.value(path);
+               if (item) {
+                  if (item->checkState(0) == Qt::Checked)
+                     done = true;
+                  shouldBeIconStateHash.insert(path, FolderGreenChecked);
+               }
+            }
+         }
+      }
+      /* if the state of the item in m_fileExceptionHash is UNChecked
+       * each of the subpaths should be "Checked white" until the tree item
+       * which represents that path is Qt::Checked */
+      if (state == Qt::Unchecked) {
+         bool done = false;
+         QListIterator<QString> siter(paths);
+         while (siter.hasNext() && !done) {
+            QString path = siter.next();
+            QTreeWidgetItem *item = m_dirPaths.value(path);
+            if (item) {
+               if (item->checkState(0) == Qt::Checked)
+                  done = true;
+               shouldBeIconStateHash.insert(path, FolderWhiteChecked);
+            }
+         }
+      }
+   }
+   /* now iterate through m_directoryIconStateHash which are the items that are checked
+    * and remove all of those that are not in shouldBeIconStateHash */
+   QHashIterator<QString, int> iter(m_directoryIconStateHash);
+   while (iter.hasNext()) {
+      iter.next();
+      if (mainWin->m_rtIconStateDebug) Pmsg2(000, "Beta Key %s value %i\n", iter.key().toUtf8().data(), iter.value());
+
+      QString keyPath = iter.key();
+      if (shouldBeIconStateHash.value(keyPath)) {
+         if (mainWin->m_rtIconStateDebug) Pmsg1(000, "WAS found in shouldBeStateHash %s\n", keyPath.toUtf8().data());
+         //newval = m_directoryIconStateHash.value(path, FolderUnchecked) & (~change);
+         int newval = shouldBeIconStateHash.value(keyPath);
+         newval = ~newval;
+         newval = newval & FolderBothChecked;
+         QTreeWidgetItem *item = m_dirPaths.value(keyPath);
+         if (item)
+            directorySetIcon(0, newval, keyPath, item);
+      } else {
+         if (mainWin->m_rtIconStateDebug) Pmsg1(000, "NOT found in shouldBeStateHash %s\n", keyPath.toUtf8().data());
+         QTreeWidgetItem *item = m_dirPaths.value(keyPath);
+         if (item)
+            directorySetIcon(0, FolderBothChecked, keyPath, item);
+            //item->setIcon(0,QIcon(QString::fromUtf8(":images/folder.png")));
+            //m_directoryIconStateHash.remove(keyPath);
+      }
+   }
+}
+
+void restoreTree::directorySetIcon(int operation, int change, QString &path, QTreeWidgetItem* item) {
+   int newval;
+   /* we are adding a check type white or green */
+   if (operation > 0) {
+      /* get the old val and "bitwise OR" with the change */
+      newval = m_directoryIconStateHash.value(path, FolderUnchecked) | change;
+      if (mainWin->m_rtIconStateDebug) Pmsg2(000, "Inserting into m_directoryIconStateHash path=%s newval=%i\n", path.toUtf8().data(), newval);
+      m_directoryIconStateHash.insert(path, newval);
+   } else {
+   /* we are removing a check type white or green */
+      newval = m_directoryIconStateHash.value(path, FolderUnchecked) & (~change);
+      if (newval == 0) {
+         if (mainWin->m_rtIconStateDebug) Pmsg2(000, "Removing from m_directoryIconStateHash path=%s newval=%i\n", path.toUtf8().data(), newval);
+         m_directoryIconStateHash.remove(path);
+      }
+      else {
+         if (mainWin->m_rtIconStateDebug) Pmsg2(000, "Inserting into m_directoryIconStateHash path=%s newval=%i\n", path.toUtf8().data(), newval);
+         m_directoryIconStateHash.insert(path, newval);
+      }
+   }
+   if (newval == FolderUnchecked)
+      item->setIcon(0, QIcon(QString::fromUtf8(":images/folder.png")));
+   else if (newval == FolderGreenChecked)
+      item->setIcon(0, QIcon(QString::fromUtf8(":images/folderchecked.png")));
+   else if (newval == FolderWhiteChecked)
+      item->setIcon(0, QIcon(QString::fromUtf8(":images/folderunchecked.png")));
+   else if (newval == FolderBothChecked)
+      item->setIcon(0, QIcon(QString::fromUtf8(":images/folderbothchecked.png")));
+}
+
+/*
+ * Test Button
+ */
+void restoreTree::testButtonPushed()
+{
+   QMultiHash<int, QString> versionFilesMulti;
+   QHash <QString, bool> fullPathDone;
+   if ((mainWin->m_rtRestore1Debug) || (mainWin->m_rtRestore2Debug) || (mainWin->m_rtRestore3Debug))
+      Pmsg0(000, "In restoreTree::testButtonPushed\n");
+   /* Use a tree widget item iterator filtering for Checked Items */
+   QTreeWidgetItemIterator diter(directoryTree, QTreeWidgetItemIterator::Checked);
+   while (*diter) {
+      QString directory = (*diter)->data(0, Qt::UserRole).toString();
+      if (mainWin->m_rtRestore1Debug)
+      Pmsg1(000, "Directory Checked=\"%s\"\n", directory.toUtf8().data());
+      /* With a checked directory, query for the files in the directory */
+      QString cmd =
+         "SELECT DISTINCT Filename.Name, MAX(Job.JobId)"
+         " FROM File "
+         " LEFT OUTER JOIN Filename on (Filename.FilenameId=File.FilenameId)"
+         " LEFT OUTER JOIN Path ON (Path.PathId=File.PathId)"
+         " LEFT OUTER JOIN Job ON (File.JobId=Job.JobId)"
+         " WHERE Path.Path='" + directory + "' AND Filename.Name!=''"
+         " AND Job.Jobid IN (" + m_jobQuery + ")"
+         " GROUP BY Filename.Name";
+      if (mainWin->m_sqlDebug) Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data());
+      QStringList results;
+      if (m_console->sql_cmd(cmd, results)) {
+      
+         QStringList fieldlist;
+   
+         int row = 0;
+         /* Iterate through the record returned from the query */
+         foreach (QString resultline, results) {
+            /* Iterate through fields in the record */
+            int column = 0;
+            QString fullPath = "";
+            Qt::CheckState fileExcpState = (Qt::CheckState)4;
+            fieldlist = resultline.split("\t");
+            int version = 0;
+            foreach (QString field, fieldlist) {
+               if (column == 0) {
+                  fullPath = directory + field;
+               }
+               if (column == 1) {
+                  version = field.toInt();
+               }
+               column++;
+            }
+            fileExcpState = m_fileExceptionHash.value(fullPath, (Qt::CheckState)3);
+            
+            int excpVersion = m_versionExceptionHash.value(fullPath, 0);
+            if (fileExcpState != Qt::Unchecked) {
+               QString debugtext;
+               if (excpVersion != 0) {
+                  debugtext = QString("*E* version=%1").arg(excpVersion);
+                  version = excpVersion;
+               } else
+                  debugtext = QString("___ version=%1").arg(version);
+               if (mainWin->m_rtRestore1Debug)
+                  Pmsg2(000, "Restoring %s File %s\n", debugtext.toUtf8().data(), fullPath.toUtf8().data());
+               fullPathDone.insert(fullPath, 1);
+               versionFilesMulti.insert(version, fullPath);
+            }
+            row++;
+         }
+      }
+      ++diter;
+   } /* while (*diter) */
+
+   /* There may be some exceptions not accounted for yet with fullPathDone */
+   QHashIterator<QString, Qt::CheckState> ftera(m_fileExceptionHash);
+   while (ftera.hasNext()) {
+      ftera.next();
+      QString fullPath = ftera.key();
+      Qt::CheckState state = ftera.value();
+      if (state != 0) {
+         /* now we don't want the ones already done */
+         if (fullPathDone.value(fullPath, 0) == 0) {
+            int version = m_versionExceptionHash.value(fullPath, 0);
+            QString debugtext = "";
+            if (version != 0)
+               debugtext = QString("E1* version=%1").arg(version);
+            else {
+               version = mostRecentVersionfromFullPath(fullPath);
+               if (version)
+                  debugtext = QString("E2* version=%1").arg(version);
+               else
+                  debugtext = QString("Error det vers").arg(version);
+            }
+            if (mainWin->m_rtRestore1Debug)
+               Pmsg2(000, "Restoring %s file %s\n", debugtext.toUtf8().data(), fullPath.toUtf8().data());
+            versionFilesMulti.insert(version, fullPath);
+         } /* if fullPathDone.value(fullPath, 0) == 0 */
+      } /* if state != 0 */
+   } /* while ftera.hasNext */
+
+   /* now for the final spit out of the versions and lists of files for each version */
+   QHash<int, int> doneKeys;
+   QHashIterator<int, QString> miter(versionFilesMulti);
+   while (miter.hasNext()) {
+      miter.next();
+      int fversion = miter.key();
+      /* did not succeed in getting an iterator to work as expected on versionFilesMulti so use doneKeys */
+      if (doneKeys.value(fversion, 0) == 0) {
+         if (mainWin->m_rtRestore2Debug) Pmsg1(000, "Version->%i\n", fversion);
+         QStringList fullPathList = versionFilesMulti.values(fversion);
+         /* create the command to perform the restore */
+         QString cmd = QString("restore");
+         cmd += " client=\"" + m_prevClientCombo + "\""
+                " jobid=\"" + QString("%1").arg(fversion) + "\" yes";
+         foreach(QString ffullPath, fullPathList) {
+            if (mainWin->m_rtRestore2Debug) Pmsg1(000, "  file->%s\n", ffullPath.toUtf8().data());
+            cmd += " file=\"" + ffullPath + "\"";
+         }
+         cmd += " yes";
+         if (mainWin->m_commandDebug)
+            Pmsg1(000, "preRestore command \'%s\'\n", cmd.toUtf8().data());
+         consoleCommand(cmd);
+         mainWin->resetFocus();
+         doneKeys.insert(fversion,1);
+      }
+   }
+}
+
+int restoreTree::mostRecentVersionfromFullPath(QString &fullPath)
+{
+   int qversion = 0;
+   QString directory, fileName;
+   int index = m_slashregex.lastIndexIn(fullPath, -2);
+   if (index != -1) {
+      directory = fileName = fullPath;
+      directory.replace(index+1, fullPath.length()-index-1, "");
+      fileName.replace(0, index+1, "");
+      if (false) {
+         QString msg = QString("length = \"%1\" index = \"%2\" Considering \"%3\" \"%4\"\n")
+                    .arg(fullPath.length()).arg(index).arg(fileName).arg(directory);
+         Pmsg0(000, msg.toUtf8().data());
+      }
+      /* so now we need the latest version from the database */
+      QString cmd =
+         "SELECT MAX(Job.JobId)"
+         " FROM File "
+         " LEFT OUTER JOIN Filename on (Filename.FilenameId=File.FilenameId)"
+         " LEFT OUTER JOIN Path ON (Path.PathId=File.PathId)"
+         " LEFT OUTER JOIN Job ON (File.JobId=Job.JobId)"
+         " WHERE Path.Path='" + directory + "' AND Filename.Name!=''"
+         " AND Job.Jobid IN (" + m_jobQuery + ")"
+         " AND Filename.Name='" + fileName + "'"
+         " GROUP BY Filename.Name";
+      if (mainWin->m_sqlDebug) Pmsg1(000, "Query cmd : %s\n", cmd.toUtf8().data());
+      QStringList results;
+      if (m_console->sql_cmd(cmd, results)) {
+         QStringList fieldlist;
+         int row = 0;
+         /* Iterate through the record returned from the query */
+         foreach (QString resultline, results) {
+            /* Iterate through fields in the record */
+            int column = 0;
+            fieldlist = resultline.split("\t");
+            foreach (QString field, fieldlist) {
+               if (column == 0) {
+                  qversion = field.toInt();
+               }
+               column++;
+            }
+            row++;
+         }
+      }
+   } /* if (index != -1) */
+   return qversion;
+}
index 8666ce69106e6a9802e019ee48c41e3150d62fe5..9d486536f54d7c593c0dc8d1e9ae0f2a0bddc367 100644 (file)
@@ -38,6 +38,7 @@
 #include "pages.h"
 #include "ui_restoretree.h"
 
+
 /*  
  * A restore tree to view files in the catalog
  */
@@ -49,13 +50,25 @@ public:
    restoreTree();
    ~restoreTree();
    virtual void currentStackItem();
+   enum folderCheckState
+   {
+      FolderUnchecked = 0,
+      FolderGreenChecked = 1,
+      FolderWhiteChecked = 2,
+      FolderBothChecked = 3
+   };
 
 private slots:
    void refreshButtonPushed();
+   void testButtonPushed();
    void jobComboChanged(int);
-   void directoryItemChanged(QTreeWidgetItem *, QTreeWidgetItem *);
-   void fileItemChanged(QTableWidgetItem *,QTableWidgetItem *);
+   void directoryCurrentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *);
+   void fileCurrentItemChanged(QTableWidgetItem *,QTableWidgetItem *);
    void directoryItemExpanded(QTreeWidgetItem *);
+   void setCheckofChildren(QTreeWidgetItem *item, Qt::CheckState);
+   void directoryItemChanged(QTreeWidgetItem *, int);
+   void fileTableItemChanged(QTableWidgetItem *);
+   void versionTableItemChanged(QTableWidgetItem *);
 
 private:
    void populateDirectoryTree();
@@ -65,18 +78,40 @@ private:
    void setupPage();
    void writeSettings();
    void readSettings();
+   void fileExceptionInsert(QString &, QString &, Qt::CheckState);
+   void fileExceptionRemove(QString &, QString &);
+   void directoryTreeDisconnectedSet(QTreeWidgetItem *, Qt::CheckState);
+   void fileTableDisconnectedSet(QTableWidgetItem *, Qt::CheckState, bool color);
+   void versionTableDisconnectedSet(QTableWidgetItem *, Qt::CheckState);
+   void updateFileTableChecks();
+   void updateVersionTableChecks();
+   void directoryIconStateInsert(QString &, Qt::CheckState);
+   void directoryIconStateRemove();
+   void directorySetIcon(int operation, int change, QString &, QTreeWidgetItem* item);
+   void fullPathtoSubPaths(QStringList &, QString &);
+   int mostRecentVersionfromFullPath(QString &);
+
    bool m_populated;
    QRegExp m_winRegExpDrive;
    QRegExp m_winRegExpPath;
    QRegExp m_slashregex;
    bool m_slashTrap;
-   //QString m_jobCondition;
    QHash<QString, QTreeWidgetItem *> m_dirPaths;
    QString m_condition;
    QString m_jobQuery;
    QString m_jobQueryPart;
+   QString m_prevJobCombo;
+   QString m_prevClientCombo;
+   QString m_prevFileSetCombo;
+   QString m_JobsCheckedList;
    int m_debugCnt;
    bool m_debugTrap;
+   QList<Qt::CheckState> m_fileCheckStateList;
+   QList<Qt::CheckState> m_versionCheckStateList;
+   QHash<QString, Qt::CheckState> m_fileExceptionHash;
+   QMultiHash<QString, QString> m_fileExceptionMulti;
+   QHash<QString, int> m_versionExceptionHash;
+   QHash<QString, int> m_directoryIconStateHash;
 };
 
 #endif /* _RESTORETREE_H_ */
index e6a08ff115e8e741b022666be2b52bef200e3a6c..70c85eb35f006ab2e6c4cf3579e302a9ad31a48a 100644 (file)
@@ -5,8 +5,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>319</height>
+    <width>449</width>
+    <height>313</height>
    </rect>
   </property>
   <property name="windowTitle" >
    <property name="spacing" >
     <number>6</number>
    </property>
+   <item row="1" column="0" >
+    <layout class="QGridLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item row="0" column="0" >
+      <widget class="QLabel" name="directoryLabel" >
+       <property name="sizePolicy" >
+        <sizepolicy>
+         <hsizetype>5</hsizetype>
+         <vsizetype>0</vsizetype>
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>Directory</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0" >
+      <layout class="QHBoxLayout" >
+       <property name="margin" >
+        <number>0</number>
+       </property>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item>
+        <widget class="QPushButton" name="refreshButton" >
+         <property name="text" >
+          <string>Refresh</string>
+         </property>
+         <property name="icon" >
+          <iconset resource="../main.qrc" >:/images/view-refresh.svg</iconset>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="jobCombo" />
+       </item>
+       <item>
+        <widget class="QComboBox" name="clientCombo" />
+       </item>
+       <item>
+        <widget class="QComboBox" name="fileSetCombo" />
+       </item>
+       <item>
+        <spacer>
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" >
+          <size>
+           <width>21</width>
+           <height>26</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QPushButton" name="testButton" >
+         <property name="text" >
+          <string>Test</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
    <item row="0" column="0" >
     <widget class="QSplitter" name="splitter" >
      <property name="orientation" >
       <enum>Qt::Horizontal</enum>
      </property>
-     <widget class="QWidget" name="layoutWidget_2" >
+     <widget class="QWidget" name="layoutWidget" >
       <layout class="QGridLayout" >
        <property name="margin" >
         <number>0</number>
       </layout>
      </widget>
      <widget class="QTreeWidget" name="directoryTree" />
-     <widget class="QWidget" name="layoutWidget" >
+     <widget class="QWidget" name="layoutWidget_2" >
       <layout class="QGridLayout" >
        <property name="margin" >
         <number>0</number>
         <number>6</number>
        </property>
        <item row="1" column="0" >
-        <widget class="QTableWidget" name="versionTable" />
-       </item>
-       <item row="0" column="0" >
-        <widget class="QLabel" name="versionLabel" >
+        <widget class="QLabel" name="versionFileLabel" >
          <property name="text" >
-          <string>Versions</string>
+          <string>FileName</string>
          </property>
          <property name="alignment" >
           <set>Qt::AlignCenter</set>
          </property>
         </widget>
        </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-   <item row="1" column="0" >
-    <layout class="QGridLayout" >
-     <property name="margin" >
-      <number>0</number>
-     </property>
-     <property name="spacing" >
-      <number>6</number>
-     </property>
-     <item row="0" column="0" >
-      <widget class="QLabel" name="directoryLabel" >
-       <property name="sizePolicy" >
-        <sizepolicy>
-         <hsizetype>5</hsizetype>
-         <vsizetype>0</vsizetype>
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text" >
-        <string>Directory</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0" >
-      <layout class="QHBoxLayout" >
-       <property name="margin" >
-        <number>0</number>
-       </property>
-       <property name="spacing" >
-        <number>6</number>
-       </property>
-       <item>
-        <widget class="QPushButton" name="refreshButton" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="versionLabel" >
          <property name="text" >
-          <string>Refresh</string>
+          <string>Versions of File</string>
          </property>
-         <property name="icon" >
-          <iconset resource="../main.qrc" >:/images/view-refresh.svg</iconset>
+         <property name="alignment" >
+          <set>Qt::AlignCenter</set>
          </property>
         </widget>
        </item>
-       <item>
-        <widget class="QComboBox" name="jobCombo" />
-       </item>
-       <item>
-        <widget class="QComboBox" name="clientCombo" />
-       </item>
-       <item>
-        <widget class="QComboBox" name="fileSetCombo" />
-       </item>
-       <item>
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" >
-          <size>
-           <width>40</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
+       <item row="2" column="0" >
+        <widget class="QTableWidget" name="versionTable" />
        </item>
       </layout>
-     </item>
-    </layout>
+     </widget>
+    </widget>
    </item>
   </layout>
+  <action name="actionSelectDirectory" >
+   <property name="icon" >
+    <iconset/>
+   </property>
+   <property name="text" >
+    <string>Select Directory</string>
+   </property>
+  </action>
+  <action name="actionUnselectDirectory" >
+   <property name="icon" >
+    <iconset/>
+   </property>
+   <property name="text" >
+    <string>UnselectDirectory</string>
+   </property>
+  </action>
  </widget>
  <resources>
   <include location="../main.qrc" />