Browse Source

Add option to ctkDICOMAppWidget to display search widget as a pop-up widget

nherlambang 14 years ago
parent
commit
8850f66659

+ 331 - 288
Libs/DICOM/Widgets/Resources/UI/ctkDICOMAppWidget.ui

@@ -48,6 +48,19 @@
    </item>
    <item>
     <layout class="QVBoxLayout" name="VerticalLayout">
+     <property name="spacing">
+      <number>12</number>
+     </property>
+     <item>
+      <widget class="QFrame" name="UserFrame">
+       <property name="frameShape">
+        <enum>QFrame::StyledPanel</enum>
+       </property>
+       <property name="frameShadow">
+        <enum>QFrame::Raised</enum>
+       </property>
+      </widget>
+     </item>
      <item>
       <layout class="QHBoxLayout" name="TopLayout">
        <property name="leftMargin">
@@ -92,336 +105,366 @@
          </property>
         </spacer>
        </item>
+       <item>
+        <widget class="QPushButton" name="SearchPopUpButton">
+         <property name="maximumSize">
+          <size>
+           <width>100</width>
+           <height>32</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Search</string>
+         </property>
+        </widget>
+       </item>
       </layout>
      </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="QueryLayout" stretch="1,0">
+     <property name="spacing">
+      <number>0</number>
+     </property>
+     <property name="leftMargin">
+      <number>12</number>
+     </property>
+     <property name="rightMargin">
+      <number>12</number>
+     </property>
      <item>
-      <layout class="QHBoxLayout" name="QueryLayout" stretch="1,0">
-       <property name="leftMargin">
-        <number>12</number>
+      <widget class="QTreeView" name="TreeView">
+       <property name="alternatingRowColors">
+        <bool>true</bool>
        </property>
-       <property name="rightMargin">
-        <number>12</number>
+      </widget>
+     </item>
+     <item>
+      <layout class="QVBoxLayout" name="searchOptionLayout">
+       <property name="spacing">
+        <number>-1</number>
        </property>
        <item>
-        <widget class="QTreeView" name="TreeView">
-         <property name="alternatingRowColors">
-          <bool>true</bool>
+        <widget class="QDockWidget" name="SearchDockWidget">
+         <property name="floating">
+          <bool>false</bool>
+         </property>
+         <property name="features">
+          <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
+         </property>
+         <property name="windowTitle">
+          <string/>
          </property>
+         <widget class="QWidget" name="dockWidgetContents">
+          <layout class="QVBoxLayout" name="verticalLayout_4">
+           <item>
+            <widget class="ctkDICOMQueryWidget" name="SearchOption" native="true">
+             <property name="minimumSize">
+              <size>
+               <width>0</width>
+               <height>0</height>
+              </size>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </widget>
         </widget>
        </item>
        <item>
-        <layout class="QVBoxLayout" name="searchOptionLayout">
-         <item>
-          <widget class="ctkDICOMQueryWidget" name="SearchOption" native="true"/>
-         </item>
+        <spacer name="VerticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="ViewerLayout">
+     <property name="leftMargin">
+      <number>12</number>
+     </property>
+     <property name="rightMargin">
+      <number>12</number>
+     </property>
+     <property name="bottomMargin">
+      <number>0</number>
+     </property>
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="ctkDICOMThumbnailListWidget" name="ThumbnailsWidget" native="true">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>0</width>
+           <height>200</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
          <item>
-          <spacer name="VerticalSpacer">
+          <spacer name="horizontalSpacer">
            <property name="orientation">
-            <enum>Qt::Vertical</enum>
+            <enum>Qt::Horizontal</enum>
            </property>
            <property name="sizeHint" stdset="0">
             <size>
-             <width>20</width>
-             <height>40</height>
+             <width>40</width>
+             <height>20</height>
             </size>
            </property>
           </spacer>
          </item>
-        </layout>
-       </item>
-      </layout>
-     </item>
-     <item>
-      <layout class="QHBoxLayout" name="horizontalLayout"/>
-     </item>
-     <item>
-      <widget class="QFrame" name="UserFrame">
-       <property name="frameShape">
-        <enum>QFrame::StyledPanel</enum>
-       </property>
-       <property name="frameShadow">
-        <enum>QFrame::Raised</enum>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <layout class="QHBoxLayout" name="ViewerLayout">
-       <property name="leftMargin">
-        <number>12</number>
-       </property>
-       <property name="rightMargin">
-        <number>12</number>
-       </property>
-       <property name="bottomMargin">
-        <number>0</number>
-       </property>
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout">
          <item>
-          <widget class="ctkDICOMThumbnailListWidget" name="ThumbnailsWidget" native="true">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="minimumSize">
+          <widget class="QSlider" name="ThumbnailWidthSlider">
+           <property name="maximumSize">
             <size>
-             <width>0</width>
-             <height>200</height>
+             <width>200</width>
+             <height>16777215</height>
             </size>
            </property>
+           <property name="minimum">
+            <number>64</number>
+           </property>
+           <property name="maximum">
+            <number>256</number>
+           </property>
+           <property name="value">
+            <number>128</number>
+           </property>
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
           </widget>
          </item>
          <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_3">
-           <item>
-            <spacer name="horizontalSpacer">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>40</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QSlider" name="ThumbnailWidthSlider">
-             <property name="maximumSize">
-              <size>
-               <width>200</width>
-               <height>16777215</height>
-              </size>
-             </property>
-             <property name="minimum">
-              <number>64</number>
-             </property>
-             <property name="maximum">
-              <number>256</number>
-             </property>
-             <property name="value">
-              <number>128</number>
-             </property>
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <spacer name="horizontalSpacer_2">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>40</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-          </layout>
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
          </item>
         </layout>
        </item>
-       <item>
-        <widget class="QFrame" name="PreviewFrame">
-         <property name="minimumSize">
-          <size>
-           <width>256</width>
-           <height>256</height>
-          </size>
-         </property>
-         <layout class="QVBoxLayout" name="verticalLayout_3">
+      </layout>
+     </item>
+     <item>
+      <widget class="QFrame" name="PreviewFrame">
+       <property name="minimumSize">
+        <size>
+         <width>256</width>
+         <height>256</height>
+        </size>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_3">
+        <item>
+         <layout class="QHBoxLayout" name="HorizontalLayout">
           <item>
-           <layout class="QHBoxLayout" name="HorizontalLayout">
-            <item>
-             <widget class="QPushButton" name="PrevStudyButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>32</horstretch>
-                <verstretch>32</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>40</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="toolTip">
-               <string>Previous study</string>
-              </property>
-              <property name="text">
-               <string>&lt;&lt;&lt;</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="PrevSeriesButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>32</horstretch>
-                <verstretch>32</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>40</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="toolTip">
-               <string>Previous series</string>
-              </property>
-              <property name="text">
-               <string>&lt;&lt;</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="PrevImageButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>32</horstretch>
-                <verstretch>32</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>40</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="toolTip">
-               <string>Previous image</string>
-              </property>
-              <property name="text">
-               <string>&lt;</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="NextImageButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>32</horstretch>
-                <verstretch>32</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>40</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="toolTip">
-               <string>Next image</string>
-              </property>
-              <property name="text">
-               <string>&gt;</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="NextSeriesButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>32</horstretch>
-                <verstretch>32</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>40</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="toolTip">
-               <string>Next series</string>
-              </property>
-              <property name="text">
-               <string>&gt;&gt;</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QPushButton" name="NextStudyButton">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>32</horstretch>
-                <verstretch>32</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>40</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="toolTip">
-               <string>Next study</string>
-              </property>
-              <property name="text">
-               <string>&gt;&gt;&gt;</string>
-              </property>
-             </widget>
-            </item>
-           </layout>
+           <widget class="QPushButton" name="PrevStudyButton">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>32</horstretch>
+              <verstretch>32</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>40</width>
+              <height>32</height>
+             </size>
+            </property>
+            <property name="toolTip">
+             <string>Previous study</string>
+            </property>
+            <property name="text">
+             <string>&lt;&lt;&lt;</string>
+            </property>
+           </widget>
           </item>
           <item>
-           <widget class="ctkDICOMDatasetView" name="ImagePreview" native="true">
+           <widget class="QPushButton" name="PrevSeriesButton">
             <property name="sizePolicy">
-             <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>32</horstretch>
+              <verstretch>32</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>40</width>
+              <height>32</height>
+             </size>
+            </property>
+            <property name="toolTip">
+             <string>Previous series</string>
+            </property>
+            <property name="text">
+             <string>&lt;&lt;</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QPushButton" name="PrevImageButton">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>32</horstretch>
+              <verstretch>32</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>40</width>
+              <height>32</height>
+             </size>
+            </property>
+            <property name="toolTip">
+             <string>Previous image</string>
+            </property>
+            <property name="text">
+             <string>&lt;</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QPushButton" name="NextImageButton">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>32</horstretch>
+              <verstretch>32</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>40</width>
+              <height>32</height>
+             </size>
+            </property>
+            <property name="toolTip">
+             <string>Next image</string>
+            </property>
+            <property name="text">
+             <string>&gt;</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QPushButton" name="NextSeriesButton">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>32</horstretch>
+              <verstretch>32</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>40</width>
+              <height>32</height>
+             </size>
+            </property>
+            <property name="toolTip">
+             <string>Next series</string>
+            </property>
+            <property name="text">
+             <string>&gt;&gt;</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QPushButton" name="NextStudyButton">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>32</horstretch>
+              <verstretch>32</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>40</width>
+              <height>32</height>
+             </size>
+            </property>
+            <property name="toolTip">
+             <string>Next study</string>
+            </property>
+            <property name="text">
+             <string>&gt;&gt;&gt;</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="ctkDICOMDatasetView" name="ImagePreview" native="true">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
+          <item>
+           <widget class="QCheckBox" name="AutoPlayCheckbox">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
               <horstretch>0</horstretch>
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
+            <property name="maximumSize">
+             <size>
+              <width>90</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string>auto-play</string>
+            </property>
            </widget>
           </item>
           <item>
-           <layout class="QHBoxLayout" name="horizontalLayout_2">
-            <item>
-             <widget class="QCheckBox" name="AutoPlayCheckbox">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>90</width>
-                <height>16777215</height>
-               </size>
-              </property>
-              <property name="text">
-               <string>auto-play</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QSlider" name="PlaySlider">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-             </widget>
-            </item>
-           </layout>
+           <widget class="QSlider" name="PlaySlider">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+           </widget>
           </item>
          </layout>
-        </widget>
-       </item>
-      </layout>
+        </item>
+       </layout>
+      </widget>
      </item>
     </layout>
    </item>

+ 62 - 0
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -78,6 +78,8 @@ public:
   QSharedPointer<ctkDICOMIndexer> DICOMIndexer;
 
   QTimer* AutoPlayTimer;
+
+  bool IsSearchWidgetPopUpMode;
 };
 
 //----------------------------------------------------------------------------
@@ -102,6 +104,8 @@ ctkDICOMAppWidget::ctkDICOMAppWidget(QWidget* _parent):Superclass(_parent),
 
   d->setupUi(this);
 
+  this->setSearchWidgetPopUpMode(true);
+
   //Hide image previewer buttons
   d->NextImageButton->hide();
   d->PrevImageButton->hide();
@@ -227,6 +231,33 @@ QString ctkDICOMAppWidget::databaseDirectory() const
   return settings.value("DatabaseDirectory").toString();
 }
 
+//----------------------------------------------------------------------------
+void ctkDICOMAppWidget::setSearchWidgetPopUpMode(bool flag){
+  Q_D(ctkDICOMAppWidget);
+
+  if(flag)
+    {
+    d->SearchDockWidget->setTitleBarWidget(0);
+    d->SearchPopUpButton->show();
+    d->SearchDockWidget->hide();
+    d->SearchDockWidget->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
+    connect(d->SearchDockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(onSearchWidgetTopLevelChanged(bool)));
+    connect(d->SearchPopUpButton, SIGNAL(clicked()), this, SLOT(onSearchPopUpButtonClicked()));
+    }
+  else
+    {
+    d->SearchDockWidget->setTitleBarWidget(new QWidget());
+    d->SearchPopUpButton->hide();
+    d->SearchDockWidget->show();
+    d->SearchDockWidget->setFeatures(QDockWidget::NoDockWidgetFeatures);
+    disconnect(d->SearchDockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(onSearchWidgetTopLevelChanged(bool)));
+    disconnect(d->SearchPopUpButton, SIGNAL(clicked()), this, SLOT(onSearchPopUpButtonClicked()));
+    }
+
+  d->IsSearchWidgetPopUpMode = flag;
+}
+
+//----------------------------------------------------------------------------
 void ctkDICOMAppWidget::onAddToDatabase()
 {
   //Q_D(ctkDICOMAppWidget);
@@ -606,3 +637,34 @@ void ctkDICOMAppWidget::onImagePreviewDisplayed(int imageID, int count){
   d->PlaySlider->setMaximum(count-1);
   d->PlaySlider->setValue(imageID);
 }
+
+//----------------------------------------------------------------------------
+void ctkDICOMAppWidget::onSearchPopUpButtonClicked(){
+  Q_D(ctkDICOMAppWidget);
+
+  if(d->SearchDockWidget->isFloating())
+    {
+    d->SearchDockWidget->hide();
+    d->SearchDockWidget->setFloating(false);
+    }
+  else
+    {
+    d->SearchDockWidget->setFloating(true);
+    d->SearchDockWidget->adjustSize();
+    d->SearchDockWidget->show();
+    }
+}
+
+//----------------------------------------------------------------------------
+void ctkDICOMAppWidget::onSearchWidgetTopLevelChanged(bool topLevel){
+  Q_D(ctkDICOMAppWidget);
+
+  if(topLevel)
+    {
+    d->SearchDockWidget->show();
+    }
+  else
+    {
+    d->SearchDockWidget->hide();
+    }
+}

+ 11 - 0
Libs/DICOM/Widgets/ctkDICOMAppWidget.h

@@ -42,6 +42,11 @@ public:
 
   QString databaseDirectory() const;
 
+  /// Setting search widget pop-up mode
+  /// Default value is false. Setting it to true will make
+  /// search widget to be displayed as pop-up widget
+  void setSearchWidgetPopUpMode(bool flag);
+
 public slots:
   void setDatabaseDirectory(const QString& directory);
   void onAddToDatabase();
@@ -95,6 +100,12 @@ protected slots:
     /// To be called after image preview displayed an image
     void onImagePreviewDisplayed(int imageID, int count);
 
+private slots:
+
+    void onSearchPopUpButtonClicked();
+
+    void onSearchWidgetTopLevelChanged(bool topLevel);
+
 private:
   Q_DECLARE_PRIVATE(ctkDICOMAppWidget);
   Q_DISABLE_COPY(ctkDICOMAppWidget);