瀏覽代碼

Added option to allow/disallow transparency in screenshot

Transparency is not supported by vtkImageDifference and hence when
vtkTesting does image comparison based on screenshots taken using
ctkScreenshotDialog, there can be errors in the regression test.

1. Transparency checkbox removed. Use enableTransparency() to allow/disallow
transparency.
2. Using QSpinBox instead of QLineEdit for output resolution.
3. Using ctkPathLineEdit instead of ctkDirectoryButton
4. Added convenience method for enforceResolution accepting QSize as arguments.
5. Manage divide-by-zero errors
6. Fixed faulty indentation introduced in previous commit.
Sankhesh Jhaveri 12 年之前
父節點
當前提交
566c9165ff

+ 34 - 8
Libs/Widgets/Resources/UI/ctkScreenshotDialog.ui

@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>579</width>
-    <height>309</height>
+    <height>334</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -107,7 +107,7 @@
        </widget>
       </item>
       <item row="0" column="1">
-       <widget class="ctkDirectoryButton" name="DirectoryButton" native="true">
+       <widget class="ctkPathLineEdit" name="DirectoryPathLineEdit" native="true">
         <property name="toolTip">
          <string>Select a directory in which screen captures will be saved.</string>
         </property>
@@ -182,25 +182,48 @@
          </widget>
         </item>
         <item>
-         <widget class="QLineEdit" name="WidthLineEdit"/>
+         <widget class="QSpinBox" name="WidthSpinBox">
+          <property name="toolTip">
+           <string>Width of the screenshot</string>
+          </property>
+          <property name="suffix">
+           <string> px</string>
+          </property>
+          <property name="minimum">
+           <number>1</number>
+          </property>
+         </widget>
         </item>
         <item>
          <widget class="QLabel" name="xLabel">
           <property name="text">
            <string>x</string>
           </property>
+          <property name="alignment">
+           <set>Qt::AlignCenter</set>
+          </property>
          </widget>
         </item>
         <item>
-         <widget class="QLineEdit" name="HeightLineEdit"/>
+         <widget class="QSpinBox" name="HeightSpinBox">
+          <property name="toolTip">
+           <string>Height of the screenshot</string>
+          </property>
+          <property name="suffix">
+           <string> px</string>
+          </property>
+          <property name="minimum">
+           <number>1</number>
+          </property>
+         </widget>
         </item>
         <item>
          <widget class="QToolButton" name="LockAspectToolButton">
           <property name="enabled">
            <bool>false</bool>
           </property>
-          <property name="text">
-           <string>...</string>
+          <property name="toolTip">
+           <string>Lock/unlock aspect ratio</string>
           </property>
           <property name="icon">
            <iconset resource="../ctkWidgets.qrc">
@@ -226,6 +249,9 @@
       </item>
       <item row="5" column="1">
        <widget class="QCheckBox" name="OverwriteCheckBox">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
         <property name="text">
          <string/>
         </property>
@@ -255,9 +281,9 @@
  </widget>
  <customwidgets>
   <customwidget>
-   <class>ctkDirectoryButton</class>
+   <class>ctkPathLineEdit</class>
    <extends>QWidget</extends>
-   <header>ctkDirectoryButton.h</header>
+   <header>ctkPathLineEdit.h</header>
   </customwidget>
  </customwidgets>
  <resources>

+ 256 - 256
Libs/Widgets/Resources/ctkWidgets.qrc

@@ -1,258 +1,258 @@
 <RCC>
-  <qresource prefix="/">
-    <file>Icons/edit.png</file>
-    <file>Icons/lock.png</file>
-    <file>Icons/unlock.png</file>
-    <file>Icons/minus.png</file>
-    <file>Icons/plus.png</file>
-    <file>Icons/expand-down.png</file>
-    <file>Icons/expand-up.png</file>
-    <file>Icons/search.svg</file>
-    <file>Icons/clear.svg</file>
-    <file>Icons/Languages/ad.png</file>
-    <file>Icons/Languages/ae.png</file>
-    <file>Icons/Languages/af.png</file>
-    <file>Icons/Languages/ag.png</file>
-    <file>Icons/Languages/ai.png</file>
-    <file>Icons/Languages/al.png</file>
-    <file>Icons/Languages/am.png</file>
-    <file>Icons/Languages/an.png</file>
-    <file>Icons/Languages/ao.png</file>
-    <file>Icons/Languages/ar.png</file>
-    <file>Icons/Languages/as.png</file>
-    <file>Icons/Languages/at.png</file>
-    <file>Icons/Languages/au.png</file>
-    <file>Icons/Languages/aw.png</file>
-    <file>Icons/Languages/ax.png</file>
-    <file>Icons/Languages/az.png</file>
-    <file>Icons/Languages/ba.png</file>
-    <file>Icons/Languages/bb.png</file>
-    <file>Icons/Languages/bd.png</file>
-    <file>Icons/Languages/be.png</file>
-    <file>Icons/Languages/bf.png</file>
-    <file>Icons/Languages/bg.png</file>
-    <file>Icons/Languages/bh.png</file>
-    <file>Icons/Languages/bi.png</file>
-    <file>Icons/Languages/bj.png</file>
-    <file>Icons/Languages/bm.png</file>
-    <file>Icons/Languages/bn.png</file>
-    <file>Icons/Languages/bo.png</file>
-    <file>Icons/Languages/br.png</file>
-    <file>Icons/Languages/bs.png</file>
-    <file>Icons/Languages/bt.png</file>
-    <file>Icons/Languages/bv.png</file>
-    <file>Icons/Languages/bw.png</file>
-    <file>Icons/Languages/by.png</file>
-    <file>Icons/Languages/bz.png</file>
-    <file>Icons/Languages/ca.png</file>
-    <file>Icons/Languages/cc.png</file>
-    <file>Icons/Languages/cd.png</file>
-    <file>Icons/Languages/cf.png</file>
-    <file>Icons/Languages/cg.png</file>
-    <file>Icons/Languages/ch.png</file>
-    <file>Icons/Languages/ci.png</file>
-    <file>Icons/Languages/ck.png</file>
-    <file>Icons/Languages/cl.png</file>
-    <file>Icons/Languages/cm.png</file>
-    <file>Icons/Languages/cn.png</file>
-    <file>Icons/Languages/co.png</file>
-    <file>Icons/Languages/cr.png</file>
-    <file>Icons/Languages/cs.png</file>
-    <file>Icons/Languages/cu.png</file>
-    <file>Icons/Languages/cv.png</file>
-    <file>Icons/Languages/cx.png</file>
-    <file>Icons/Languages/cy.png</file>
-    <file>Icons/Languages/cz.png</file>
-    <file>Icons/Languages/de.png</file>
-    <file>Icons/Languages/dj.png</file>
-    <file>Icons/Languages/dk.png</file>
-    <file>Icons/Languages/dm.png</file>
-    <file>Icons/Languages/do.png</file>
-    <file>Icons/Languages/dz.png</file>
-    <file>Icons/Languages/ec.png</file>
-    <file>Icons/Languages/ee.png</file>
-    <file>Icons/Languages/eg.png</file>
-    <file>Icons/Languages/eh.png</file>
-    <file>Icons/Languages/england.png</file>
-    <file>Icons/Languages/er.png</file>
-    <file>Icons/Languages/es.png</file>
-    <file>Icons/Languages/et.png</file>
-    <file>Icons/Languages/fam.png</file>
-    <file>Icons/Languages/fi.png</file>
-    <file>Icons/Languages/fj.png</file>
-    <file>Icons/Languages/fk.png</file>
-    <file>Icons/Languages/fm.png</file>
-    <file>Icons/Languages/fo.png</file>
-    <file>Icons/Languages/fr.png</file>
-    <file>Icons/Languages/ga.png</file>
-    <file>Icons/Languages/gb.png</file>
-    <file>Icons/Languages/gd.png</file>
-    <file>Icons/Languages/ge.png</file>
-    <file>Icons/Languages/gf.png</file>
-    <file>Icons/Languages/gh.png</file>
-    <file>Icons/Languages/gi.png</file>
-    <file>Icons/Languages/gl.png</file>
-    <file>Icons/Languages/gm.png</file>
-    <file>Icons/Languages/gn.png</file>
-    <file>Icons/Languages/gp.png</file>
-    <file>Icons/Languages/gq.png</file>
-    <file>Icons/Languages/gr.png</file>
-    <file>Icons/Languages/gs.png</file>
-    <file>Icons/Languages/gt.png</file>
-    <file>Icons/Languages/gu.png</file>
-    <file>Icons/Languages/gw.png</file>
-    <file>Icons/Languages/gy.png</file>
-    <file>Icons/Languages/hk.png</file>
-    <file>Icons/Languages/hm.png</file>
-    <file>Icons/Languages/hn.png</file>
-    <file>Icons/Languages/hr.png</file>
-    <file>Icons/Languages/ht.png</file>
-    <file>Icons/Languages/hu.png</file>
-    <file>Icons/Languages/id.png</file>
-    <file>Icons/Languages/ie.png</file>
-    <file>Icons/Languages/il.png</file>
-    <file>Icons/Languages/in.png</file>
-    <file>Icons/Languages/io.png</file>
-    <file>Icons/Languages/iq.png</file>
-    <file>Icons/Languages/ir.png</file>
-    <file>Icons/Languages/is.png</file>
-    <file>Icons/Languages/it.png</file>
-    <file>Icons/Languages/jm.png</file>
-    <file>Icons/Languages/jo.png</file>
-    <file>Icons/Languages/jp.png</file>
-    <file>Icons/Languages/ke.png</file>
-    <file>Icons/Languages/kg.png</file>
-    <file>Icons/Languages/kh.png</file>
-    <file>Icons/Languages/ki.png</file>
-    <file>Icons/Languages/km.png</file>
-    <file>Icons/Languages/kn.png</file>
-    <file>Icons/Languages/kp.png</file>
-    <file>Icons/Languages/kr.png</file>
-    <file>Icons/Languages/kw.png</file>
-    <file>Icons/Languages/ky.png</file>
-    <file>Icons/Languages/kz.png</file>
-    <file>Icons/Languages/la.png</file>
-    <file>Icons/Languages/lb.png</file>
-    <file>Icons/Languages/lc.png</file>
-    <file>Icons/Languages/li.png</file>
-    <file>Icons/Languages/lk.png</file>
-    <file>Icons/Languages/lr.png</file>
-    <file>Icons/Languages/ls.png</file>
-    <file>Icons/Languages/lt.png</file>
-    <file>Icons/Languages/lu.png</file>
-    <file>Icons/Languages/lv.png</file>
-    <file>Icons/Languages/ly.png</file>
-    <file>Icons/Languages/ma.png</file>
-    <file>Icons/Languages/mc.png</file>
-    <file>Icons/Languages/md.png</file>
-    <file>Icons/Languages/me.png</file>
-    <file>Icons/Languages/mg.png</file>
-    <file>Icons/Languages/mh.png</file>
-    <file>Icons/Languages/mk.png</file>
-    <file>Icons/Languages/ml.png</file>
-    <file>Icons/Languages/mm.png</file>
-    <file>Icons/Languages/mn.png</file>
-    <file>Icons/Languages/mo.png</file>
-    <file>Icons/Languages/mp.png</file>
-    <file>Icons/Languages/mq.png</file>
-    <file>Icons/Languages/mr.png</file>
-    <file>Icons/Languages/ms.png</file>
-    <file>Icons/Languages/mt.png</file>
-    <file>Icons/Languages/mu.png</file>
-    <file>Icons/Languages/mv.png</file>
-    <file>Icons/Languages/mw.png</file>
-    <file>Icons/Languages/mx.png</file>
-    <file>Icons/Languages/my.png</file>
-    <file>Icons/Languages/mz.png</file>
-    <file>Icons/Languages/na.png</file>
-    <file>Icons/Languages/nc.png</file>
-    <file>Icons/Languages/ne.png</file>
-    <file>Icons/Languages/nf.png</file>
-    <file>Icons/Languages/ng.png</file>
-    <file>Icons/Languages/ni.png</file>
-    <file>Icons/Languages/nl.png</file>
-    <file>Icons/Languages/no.png</file>
-    <file>Icons/Languages/np.png</file>
-    <file>Icons/Languages/nr.png</file>
-    <file>Icons/Languages/nu.png</file>
-    <file>Icons/Languages/nz.png</file>
-    <file>Icons/Languages/om.png</file>
-    <file>Icons/Languages/pa.png</file>
-    <file>Icons/Languages/pe.png</file>
-    <file>Icons/Languages/pf.png</file>
-    <file>Icons/Languages/pg.png</file>
-    <file>Icons/Languages/ph.png</file>
-    <file>Icons/Languages/pk.png</file>
-    <file>Icons/Languages/pl.png</file>
-    <file>Icons/Languages/pm.png</file>
-    <file>Icons/Languages/pn.png</file>
-    <file>Icons/Languages/pr.png</file>
-    <file>Icons/Languages/ps.png</file>
-    <file>Icons/Languages/pt.png</file>
-    <file>Icons/Languages/pw.png</file>
-    <file>Icons/Languages/py.png</file>
-    <file>Icons/Languages/qa.png</file>
-    <file>Icons/Languages/re.png</file>
-    <file>Icons/Languages/ro.png</file>
-    <file>Icons/Languages/rs.png</file>
-    <file>Icons/Languages/ru.png</file>
-    <file>Icons/Languages/rw.png</file>
-    <file>Icons/Languages/sa.png</file>
-    <file>Icons/Languages/sb.png</file>
-    <file>Icons/Languages/sc.png</file>
-    <file>Icons/Languages/scotland.png</file>
-    <file>Icons/Languages/sd.png</file>
-    <file>Icons/Languages/se.png</file>
-    <file>Icons/Languages/sg.png</file>
-    <file>Icons/Languages/sh.png</file>
-    <file>Icons/Languages/si.png</file>
-    <file>Icons/Languages/sj.png</file>
-    <file>Icons/Languages/sk.png</file>
-    <file>Icons/Languages/sl.png</file>
-    <file>Icons/Languages/sm.png</file>
-    <file>Icons/Languages/sn.png</file>
-    <file>Icons/Languages/so.png</file>
-    <file>Icons/Languages/sr.png</file>
-    <file>Icons/Languages/st.png</file>
-    <file>Icons/Languages/sv.png</file>
-    <file>Icons/Languages/sy.png</file>
-    <file>Icons/Languages/sz.png</file>
-    <file>Icons/Languages/tc.png</file>
-    <file>Icons/Languages/td.png</file>
-    <file>Icons/Languages/tf.png</file>
-    <file>Icons/Languages/tg.png</file>
-    <file>Icons/Languages/th.png</file>
-    <file>Icons/Languages/tj.png</file>
-    <file>Icons/Languages/tk.png</file>
-    <file>Icons/Languages/tl.png</file>
-    <file>Icons/Languages/tm.png</file>
-    <file>Icons/Languages/tn.png</file>
-    <file>Icons/Languages/to.png</file>
-    <file>Icons/Languages/tr.png</file>
-    <file>Icons/Languages/tt.png</file>
-    <file>Icons/Languages/tv.png</file>
-    <file>Icons/Languages/tw.png</file>
-    <file>Icons/Languages/tz.png</file>
-    <file>Icons/Languages/ua.png</file>
-    <file>Icons/Languages/ug.png</file>
-    <file>Icons/Languages/um.png</file>
-    <file>Icons/Languages/uy.png</file>
-    <file>Icons/Languages/uz.png</file>
-    <file>Icons/Languages/va.png</file>
-    <file>Icons/Languages/vc.png</file>
-    <file>Icons/Languages/ve.png</file>
-    <file>Icons/Languages/vg.png</file>
-    <file>Icons/Languages/vi.png</file>
-    <file>Icons/Languages/vn.png</file>
-    <file>Icons/Languages/vu.png</file>
-    <file>Icons/Languages/wales.png</file>
-    <file>Icons/Languages/wf.png</file>
-    <file>Icons/Languages/ws.png</file>
-    <file>Icons/Languages/ye.png</file>
-    <file>Icons/Languages/yt.png</file>
-    <file>Icons/Languages/za.png</file>
-    <file>Icons/Languages/zm.png</file>
-    <file>Icons/Languages/zw.png</file>
-    <file>Icons/Languages/en.png</file>
-  </qresource>
+    <qresource prefix="/">
+        <file>Icons/edit.png</file>
+        <file>Icons/lock.png</file>
+        <file>Icons/unlock.png</file>
+        <file>Icons/minus.png</file>
+        <file>Icons/plus.png</file>
+        <file>Icons/expand-down.png</file>
+        <file>Icons/expand-up.png</file>
+        <file>Icons/search.svg</file>
+        <file>Icons/clear.svg</file>
+        <file>Icons/Languages/ad.png</file>
+        <file>Icons/Languages/ae.png</file>
+        <file>Icons/Languages/af.png</file>
+        <file>Icons/Languages/ag.png</file>
+        <file>Icons/Languages/ai.png</file>
+        <file>Icons/Languages/al.png</file>
+        <file>Icons/Languages/am.png</file>
+        <file>Icons/Languages/an.png</file>
+        <file>Icons/Languages/ao.png</file>
+        <file>Icons/Languages/ar.png</file>
+        <file>Icons/Languages/as.png</file>
+        <file>Icons/Languages/at.png</file>
+        <file>Icons/Languages/au.png</file>
+        <file>Icons/Languages/aw.png</file>
+        <file>Icons/Languages/ax.png</file>
+        <file>Icons/Languages/az.png</file>
+        <file>Icons/Languages/ba.png</file>
+        <file>Icons/Languages/bb.png</file>
+        <file>Icons/Languages/bd.png</file>
+        <file>Icons/Languages/be.png</file>
+        <file>Icons/Languages/bf.png</file>
+        <file>Icons/Languages/bg.png</file>
+        <file>Icons/Languages/bh.png</file>
+        <file>Icons/Languages/bi.png</file>
+        <file>Icons/Languages/bj.png</file>
+        <file>Icons/Languages/bm.png</file>
+        <file>Icons/Languages/bn.png</file>
+        <file>Icons/Languages/bo.png</file>
+        <file>Icons/Languages/br.png</file>
+        <file>Icons/Languages/bs.png</file>
+        <file>Icons/Languages/bt.png</file>
+        <file>Icons/Languages/bv.png</file>
+        <file>Icons/Languages/bw.png</file>
+        <file>Icons/Languages/by.png</file>
+        <file>Icons/Languages/bz.png</file>
+        <file>Icons/Languages/ca.png</file>
+        <file>Icons/Languages/cc.png</file>
+        <file>Icons/Languages/cd.png</file>
+        <file>Icons/Languages/cf.png</file>
+        <file>Icons/Languages/cg.png</file>
+        <file>Icons/Languages/ch.png</file>
+        <file>Icons/Languages/ci.png</file>
+        <file>Icons/Languages/ck.png</file>
+        <file>Icons/Languages/cl.png</file>
+        <file>Icons/Languages/cm.png</file>
+        <file>Icons/Languages/cn.png</file>
+        <file>Icons/Languages/co.png</file>
+        <file>Icons/Languages/cr.png</file>
+        <file>Icons/Languages/cs.png</file>
+        <file>Icons/Languages/cu.png</file>
+        <file>Icons/Languages/cv.png</file>
+        <file>Icons/Languages/cx.png</file>
+        <file>Icons/Languages/cy.png</file>
+        <file>Icons/Languages/cz.png</file>
+        <file>Icons/Languages/de.png</file>
+        <file>Icons/Languages/dj.png</file>
+        <file>Icons/Languages/dk.png</file>
+        <file>Icons/Languages/dm.png</file>
+        <file>Icons/Languages/do.png</file>
+        <file>Icons/Languages/dz.png</file>
+        <file>Icons/Languages/ec.png</file>
+        <file>Icons/Languages/ee.png</file>
+        <file>Icons/Languages/eg.png</file>
+        <file>Icons/Languages/eh.png</file>
+        <file>Icons/Languages/england.png</file>
+        <file>Icons/Languages/er.png</file>
+        <file>Icons/Languages/es.png</file>
+        <file>Icons/Languages/et.png</file>
+        <file>Icons/Languages/fam.png</file>
+        <file>Icons/Languages/fi.png</file>
+        <file>Icons/Languages/fj.png</file>
+        <file>Icons/Languages/fk.png</file>
+        <file>Icons/Languages/fm.png</file>
+        <file>Icons/Languages/fo.png</file>
+        <file>Icons/Languages/fr.png</file>
+        <file>Icons/Languages/ga.png</file>
+        <file>Icons/Languages/gb.png</file>
+        <file>Icons/Languages/gd.png</file>
+        <file>Icons/Languages/ge.png</file>
+        <file>Icons/Languages/gf.png</file>
+        <file>Icons/Languages/gh.png</file>
+        <file>Icons/Languages/gi.png</file>
+        <file>Icons/Languages/gl.png</file>
+        <file>Icons/Languages/gm.png</file>
+        <file>Icons/Languages/gn.png</file>
+        <file>Icons/Languages/gp.png</file>
+        <file>Icons/Languages/gq.png</file>
+        <file>Icons/Languages/gr.png</file>
+        <file>Icons/Languages/gs.png</file>
+        <file>Icons/Languages/gt.png</file>
+        <file>Icons/Languages/gu.png</file>
+        <file>Icons/Languages/gw.png</file>
+        <file>Icons/Languages/gy.png</file>
+        <file>Icons/Languages/hk.png</file>
+        <file>Icons/Languages/hm.png</file>
+        <file>Icons/Languages/hn.png</file>
+        <file>Icons/Languages/hr.png</file>
+        <file>Icons/Languages/ht.png</file>
+        <file>Icons/Languages/hu.png</file>
+        <file>Icons/Languages/id.png</file>
+        <file>Icons/Languages/ie.png</file>
+        <file>Icons/Languages/il.png</file>
+        <file>Icons/Languages/in.png</file>
+        <file>Icons/Languages/io.png</file>
+        <file>Icons/Languages/iq.png</file>
+        <file>Icons/Languages/ir.png</file>
+        <file>Icons/Languages/is.png</file>
+        <file>Icons/Languages/it.png</file>
+        <file>Icons/Languages/jm.png</file>
+        <file>Icons/Languages/jo.png</file>
+        <file>Icons/Languages/jp.png</file>
+        <file>Icons/Languages/ke.png</file>
+        <file>Icons/Languages/kg.png</file>
+        <file>Icons/Languages/kh.png</file>
+        <file>Icons/Languages/ki.png</file>
+        <file>Icons/Languages/km.png</file>
+        <file>Icons/Languages/kn.png</file>
+        <file>Icons/Languages/kp.png</file>
+        <file>Icons/Languages/kr.png</file>
+        <file>Icons/Languages/kw.png</file>
+        <file>Icons/Languages/ky.png</file>
+        <file>Icons/Languages/kz.png</file>
+        <file>Icons/Languages/la.png</file>
+        <file>Icons/Languages/lb.png</file>
+        <file>Icons/Languages/lc.png</file>
+        <file>Icons/Languages/li.png</file>
+        <file>Icons/Languages/lk.png</file>
+        <file>Icons/Languages/lr.png</file>
+        <file>Icons/Languages/ls.png</file>
+        <file>Icons/Languages/lt.png</file>
+        <file>Icons/Languages/lu.png</file>
+        <file>Icons/Languages/lv.png</file>
+        <file>Icons/Languages/ly.png</file>
+        <file>Icons/Languages/ma.png</file>
+        <file>Icons/Languages/mc.png</file>
+        <file>Icons/Languages/md.png</file>
+        <file>Icons/Languages/me.png</file>
+        <file>Icons/Languages/mg.png</file>
+        <file>Icons/Languages/mh.png</file>
+        <file>Icons/Languages/mk.png</file>
+        <file>Icons/Languages/ml.png</file>
+        <file>Icons/Languages/mm.png</file>
+        <file>Icons/Languages/mn.png</file>
+        <file>Icons/Languages/mo.png</file>
+        <file>Icons/Languages/mp.png</file>
+        <file>Icons/Languages/mq.png</file>
+        <file>Icons/Languages/mr.png</file>
+        <file>Icons/Languages/ms.png</file>
+        <file>Icons/Languages/mt.png</file>
+        <file>Icons/Languages/mu.png</file>
+        <file>Icons/Languages/mv.png</file>
+        <file>Icons/Languages/mw.png</file>
+        <file>Icons/Languages/mx.png</file>
+        <file>Icons/Languages/my.png</file>
+        <file>Icons/Languages/mz.png</file>
+        <file>Icons/Languages/na.png</file>
+        <file>Icons/Languages/nc.png</file>
+        <file>Icons/Languages/ne.png</file>
+        <file>Icons/Languages/nf.png</file>
+        <file>Icons/Languages/ng.png</file>
+        <file>Icons/Languages/ni.png</file>
+        <file>Icons/Languages/nl.png</file>
+        <file>Icons/Languages/no.png</file>
+        <file>Icons/Languages/np.png</file>
+        <file>Icons/Languages/nr.png</file>
+        <file>Icons/Languages/nu.png</file>
+        <file>Icons/Languages/nz.png</file>
+        <file>Icons/Languages/om.png</file>
+        <file>Icons/Languages/pa.png</file>
+        <file>Icons/Languages/pe.png</file>
+        <file>Icons/Languages/pf.png</file>
+        <file>Icons/Languages/pg.png</file>
+        <file>Icons/Languages/ph.png</file>
+        <file>Icons/Languages/pk.png</file>
+        <file>Icons/Languages/pl.png</file>
+        <file>Icons/Languages/pm.png</file>
+        <file>Icons/Languages/pn.png</file>
+        <file>Icons/Languages/pr.png</file>
+        <file>Icons/Languages/ps.png</file>
+        <file>Icons/Languages/pt.png</file>
+        <file>Icons/Languages/pw.png</file>
+        <file>Icons/Languages/py.png</file>
+        <file>Icons/Languages/qa.png</file>
+        <file>Icons/Languages/re.png</file>
+        <file>Icons/Languages/ro.png</file>
+        <file>Icons/Languages/rs.png</file>
+        <file>Icons/Languages/ru.png</file>
+        <file>Icons/Languages/rw.png</file>
+        <file>Icons/Languages/sa.png</file>
+        <file>Icons/Languages/sb.png</file>
+        <file>Icons/Languages/sc.png</file>
+        <file>Icons/Languages/scotland.png</file>
+        <file>Icons/Languages/sd.png</file>
+        <file>Icons/Languages/se.png</file>
+        <file>Icons/Languages/sg.png</file>
+        <file>Icons/Languages/sh.png</file>
+        <file>Icons/Languages/si.png</file>
+        <file>Icons/Languages/sj.png</file>
+        <file>Icons/Languages/sk.png</file>
+        <file>Icons/Languages/sl.png</file>
+        <file>Icons/Languages/sm.png</file>
+        <file>Icons/Languages/sn.png</file>
+        <file>Icons/Languages/so.png</file>
+        <file>Icons/Languages/sr.png</file>
+        <file>Icons/Languages/st.png</file>
+        <file>Icons/Languages/sv.png</file>
+        <file>Icons/Languages/sy.png</file>
+        <file>Icons/Languages/sz.png</file>
+        <file>Icons/Languages/tc.png</file>
+        <file>Icons/Languages/td.png</file>
+        <file>Icons/Languages/tf.png</file>
+        <file>Icons/Languages/tg.png</file>
+        <file>Icons/Languages/th.png</file>
+        <file>Icons/Languages/tj.png</file>
+        <file>Icons/Languages/tk.png</file>
+        <file>Icons/Languages/tl.png</file>
+        <file>Icons/Languages/tm.png</file>
+        <file>Icons/Languages/tn.png</file>
+        <file>Icons/Languages/to.png</file>
+        <file>Icons/Languages/tr.png</file>
+        <file>Icons/Languages/tt.png</file>
+        <file>Icons/Languages/tv.png</file>
+        <file>Icons/Languages/tw.png</file>
+        <file>Icons/Languages/tz.png</file>
+        <file>Icons/Languages/ua.png</file>
+        <file>Icons/Languages/ug.png</file>
+        <file>Icons/Languages/um.png</file>
+        <file>Icons/Languages/uy.png</file>
+        <file>Icons/Languages/uz.png</file>
+        <file>Icons/Languages/va.png</file>
+        <file>Icons/Languages/vc.png</file>
+        <file>Icons/Languages/ve.png</file>
+        <file>Icons/Languages/vg.png</file>
+        <file>Icons/Languages/vi.png</file>
+        <file>Icons/Languages/vn.png</file>
+        <file>Icons/Languages/vu.png</file>
+        <file>Icons/Languages/wales.png</file>
+        <file>Icons/Languages/wf.png</file>
+        <file>Icons/Languages/ws.png</file>
+        <file>Icons/Languages/ye.png</file>
+        <file>Icons/Languages/yt.png</file>
+        <file>Icons/Languages/za.png</file>
+        <file>Icons/Languages/zm.png</file>
+        <file>Icons/Languages/zw.png</file>
+        <file>Icons/Languages/en.png</file>
+    </qresource>
 </RCC>

+ 76 - 18
Libs/Widgets/ctkScreenshotDialog.cpp

@@ -37,6 +37,7 @@ ctkScreenshotDialogPrivate::ctkScreenshotDialogPrivate(ctkScreenshotDialog& obje
   this->CaptureButton = 0;
   this->CountDownValue = 0;
   this->AspectRatio = 1.0;
+  this->AllowTransparency = true;
 }
 
 //-----------------------------------------------------------------------------
@@ -72,13 +73,17 @@ void ctkScreenshotDialogPrivate::setupUi(QDialog * widget)
   connect(this->ScaleFactorRadioButton, SIGNAL(toggled(bool)), SLOT(selectScaleFactor(bool)));
   connect(this->OutputResolutionRadioButton, SIGNAL(toggled(bool)), SLOT(selectOutputResolution(bool)));
   connect(this->LockAspectToolButton, SIGNAL(toggled(bool)), SLOT(lockAspectRatio(bool)));
-  connect(this->WidthLineEdit, SIGNAL(editingFinished()), SLOT(onWidthEdited()));
-  connect(this->HeightLineEdit, SIGNAL(editingFinished()), SLOT(onHeightEdited()));
+  connect(this->WidthSpinBox, SIGNAL(editingFinished()), SLOT(onWidthEdited()));
+  connect(this->HeightSpinBox, SIGNAL(editingFinished()), SLOT(onHeightEdited()));
 
   this->CaptureButton = okButton;
 
   // Called to enable/disable buttons
   q->setWidgetToGrab(0);
+  // Set a sufficient range (1, 2^16) on the spin boxes
+  this->WidthSpinBox->setRange(1, 65536);
+  this->HeightSpinBox->setRange(1, 65536);
+  this->DirectoryPathLineEdit->setFilters(ctkPathLineEdit::Dirs);
 }
 
 //-----------------------------------------------------------------------------
@@ -132,8 +137,8 @@ void ctkScreenshotDialogPrivate::updateCountDown()
 void ctkScreenshotDialogPrivate::useScalarFactor(bool scale)
 {
   this->ScaleFactorSpinBox->setEnabled(scale);
-  this->WidthLineEdit->setEnabled(!scale);
-  this->HeightLineEdit->setEnabled(!scale);
+  this->WidthSpinBox->setEnabled(!scale);
+  this->HeightSpinBox->setEnabled(!scale);
   this->xLabel->setEnabled(!scale);
   this->LockAspectToolButton->setEnabled(!scale);
 }
@@ -153,20 +158,42 @@ void ctkScreenshotDialogPrivate::selectOutputResolution(bool scale)
 //-----------------------------------------------------------------------------
 void ctkScreenshotDialogPrivate::lockAspectRatio(bool lock)
 {
+  Q_Q(ctkScreenshotDialog);
   if(lock)
     {
-    QPixmap viewportPixmap = QPixmap::grabWidget(this->WidgetToGrab.data());
-    QSize curSize = viewportPixmap.size();
-    this->AspectRatio = curSize.width()/static_cast<double>(curSize.height());
+    QSize curSize = q->widgetSize();
+    if(curSize.height() > 0)
+      {
+      this->AspectRatio = curSize.width()/static_cast<double>(curSize.height());
+      }
+    else
+      {
+      QString message = QString("Height of widget: ") + curSize.height() +\
+        QString(" is invalid. Check widget dimensions. Using default aspect\
+          ratio (1.0).");
+      QMessageBox::warning(q, "Invalid widget dimensions", message,
+        QMessageBox::Ok);
+      this->AspectRatio = 1.0;
+      }
     }
 }
 
 //-----------------------------------------------------------------------------
 void ctkScreenshotDialogPrivate::onWidthEdited()
 {
+  Q_Q(ctkScreenshotDialog);
   if(this->LockAspectToolButton->isChecked())
     {
-    this->HeightLineEdit->setText(QString::number(static_cast<int>(this->WidthLineEdit->text().toInt()/this->AspectRatio)));
+    if(this->AspectRatio > 0)
+      {
+      this->HeightSpinBox->setValue(static_cast<int>(this->WidthSpinBox->value()/this->AspectRatio));
+      }
+    else
+      {
+      QString message = QString("Aspect ratio: ") + this->AspectRatio +\
+        QString(" is invalid. Check widget dimensions.");
+      QMessageBox::warning(q, "Invalid aspect ratio", message, QMessageBox::Ok);
+      }
     }
 }
 
@@ -175,7 +202,7 @@ void ctkScreenshotDialogPrivate::onHeightEdited()
 {
   if(this->LockAspectToolButton->isChecked())
     {
-    this->WidthLineEdit->setText(QString::number(static_cast<int>(this->HeightLineEdit->text().toInt()*this->AspectRatio)));
+    this->WidthSpinBox->setValue(static_cast<int>(this->HeightSpinBox->value()*this->AspectRatio));
     }
 }
 
@@ -188,9 +215,31 @@ void ctkScreenshotDialog::enforceResolution(int width, int height)
   d->ScaleFactorRadioButton->setEnabled(false);
   d->OutputResolutionRadioButton->setEnabled(false);
   d->ScaleFactorSpinBox->setEnabled(false);
-  d->WidthLineEdit->setText(QString::number(width));
-  d->HeightLineEdit->setText(QString::number(height));
+  d->WidthSpinBox->setValue(width);
+  d->HeightSpinBox->setValue(height);
+}
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialog::enforceResolution(QSize size)
+{
+  this->enforceResolution(size.width(), size.height());
+}
+
+//-----------------------------------------------------------------------------
+QSize ctkScreenshotDialog::widgetSize()
+{
+  Q_D(ctkScreenshotDialog);
+  QPixmap viewportPixmap = QPixmap::grabWidget(d->WidgetToGrab.data());
+  return viewportPixmap.size();
 }
+
+//-----------------------------------------------------------------------------
+void ctkScreenshotDialog::enableTransparency(bool enable)
+{
+  Q_D(ctkScreenshotDialog);
+  d->AllowTransparency = enable;
+}
+
 //-----------------------------------------------------------------------------
 void ctkScreenshotDialogPrivate::saveScreenshot(int delayInSeconds)
 {
@@ -209,7 +258,7 @@ void ctkScreenshotDialogPrivate::saveScreenshot(int delayInSeconds)
   this->setWaitingForScreenshot(true);
   this->CountDownValue = delayInSeconds;
   this->CountDownTimer.start(1000);
-  // Add 1ms to give time to set the countdown at 0. 
+  // Add 1ms to give time to set the countdown at 0.
   QTimer::singleShot(delayInSeconds * 1000 + 1, q, SLOT(instantScreenshot()));
 }
 
@@ -239,6 +288,9 @@ void ctkScreenshotDialog::setWidgetToGrab(QWidget* newWidgetToGrab)
   d->CaptureButton->setEnabled(newWidgetToGrab != 0);
 
   d->WidgetToGrab = newWidgetToGrab;
+  QSize curSize = this->widgetSize();
+  d->HeightSpinBox->setValue(curSize.height());
+  d->WidthSpinBox->setValue(curSize.width());
 }
 
 //-----------------------------------------------------------------------------
@@ -266,14 +318,14 @@ QString ctkScreenshotDialog::baseFileName() const
 void ctkScreenshotDialog::setDirectory(const QString& newDirectory)
 {
   Q_D(ctkScreenshotDialog);
-  d->DirectoryButton->setDirectory(newDirectory);
+  d->DirectoryPathLineEdit->setCurrentPath(newDirectory);
 }
 
 //-----------------------------------------------------------------------------
 QString ctkScreenshotDialog::directory()const
 {
   Q_D(const ctkScreenshotDialog);
-  return d->DirectoryButton->directory();
+  return d->DirectoryPathLineEdit->currentPath();
 }
 
 //-----------------------------------------------------------------------------
@@ -327,11 +379,11 @@ void ctkScreenshotDialog::instantScreenshot()
   else if(d->OutputResolutionRadioButton->isChecked())
     {
     rescaledViewportPixmap = viewportPixmap.scaled(
-      d->WidthLineEdit->text().toInt(),
-      d->HeightLineEdit->text().toInt());
+      d->WidthSpinBox->value(),
+      d->HeightSpinBox->value());
     }
 
-  QString filename = QString("%1/%2_%3.png").arg(d->DirectoryButton->directory())
+  QString filename = QString("%1/%2_%3.png").arg(d->DirectoryPathLineEdit->currentPath())
                      .arg(d->ImageNameLineEdit->text())
                      .arg(d->ImageVersionNumberSpinBox->value());
 
@@ -357,7 +409,13 @@ void ctkScreenshotDialog::instantScreenshot()
       }
     }
 
-  rescaledViewportPixmap.save(filename);
+  QImage img = rescaledViewportPixmap.toImage();
+  if( !d->AllowTransparency &&
+      img.hasAlphaChannel())
+    {
+    img = img.convertToFormat(QImage::Format_RGB32);
+    }
+  img.save(filename);
 
   d->ImageVersionNumberSpinBox->setValue(d->ImageVersionNumberSpinBox->value() + 1);
 }

+ 9 - 2
Libs/Widgets/ctkScreenshotDialog.h

@@ -80,9 +80,16 @@ public:
   void setDelay(int seconds);
   int delay()const;
 
-  /// Disable scaling or output resolution control and take a fixed 
+  /// Disable scaling or output resolution control and take a fixed
   /// resolution screenshot. Default output resolution is (300,300)
-  void enforceResolution(int width = 300, int height = 300); 
+  void enforceResolution(int width = 300, int height = 300);
+  void enforceResolution(QSize size = QSize(300,300));
+
+  /// Get the original widget size
+  QSize widgetSize();
+
+  /// Allow/Disallow transparency in the output screenshot
+  void enableTransparency(bool enable = true);
 
 public Q_SLOTS:
   /// Instantanely grabs the content of \a widgetToGrag. Generates a

+ 1 - 0
Libs/Widgets/ctkScreenshotDialog_p.h

@@ -77,6 +77,7 @@ public:
   int                   CountDownValue;
   QTimer                CountDownTimer;
   double                AspectRatio;
+  bool                  AllowTransparency;
 };
 
 #endif