Selaa lähdekoodia

Add DICOM thumbnail list widget

nherlambang 14 vuotta sitten
vanhempi
commit
87fb4a02ea

+ 43 - 0
Libs/DICOM/Widgets/Resources/UI/ctkDICOMThumbnailListWidget.ui

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ctkDICOMThumbnailListWidget</class>
+ <widget class="QWidget" name="ctkDICOMThumbnailListWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>224</width>
+    <height>237</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="widgetResizable">
+      <bool>true</bool>
+     </property>
+     <widget class="QWidget" name="scrollAreaContentWidget">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>198</width>
+        <height>211</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <layout class="QGridLayout" name="thumbnailLayout"/>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 126 - 0
Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.cpp

@@ -0,0 +1,126 @@
+
+// Qt include
+#include <QGridLayout>
+#include <QResizeEvent>
+
+// ctkDICOMWidgets includes
+#include "ctkDICOMThumbnailListWidget.h"
+#include "ui_ctkDICOMThumbnailListWidget.h"
+#include "ctkDICOMThumbnailWidget.h"
+
+// STD includes
+#include <iostream>
+
+//----------------------------------------------------------------------------
+class ctkDICOMThumbnailListWidgetPrivate: public Ui_ctkDICOMThumbnailListWidget
+{
+public:
+  ctkDICOMThumbnailListWidgetPrivate(){}
+
+  void rearrangeThumbnails();
+
+  QList<ctkDICOMThumbnailWidget*> thumbnailList;
+  int maxColumnNum;
+  int thumbnailWidth;
+};
+
+//----------------------------------------------------------------------------
+// ctkDICOMThumbnailListWidgetPrivate methods
+
+void ctkDICOMThumbnailListWidgetPrivate::rearrangeThumbnails(){
+  int count = this->thumbnailList.count();
+
+  // clear all thumbnails from layout
+  for(int i = 0; i < count; i++){
+    this->thumbnailLayout->removeWidget(this->thumbnailList.at(i));
+  }
+
+  // add all thumbnails to layout with new arrangement
+  int row = 0;
+  int column = 0;
+  for(int i = 0; i < count; i++){
+    this->thumbnailLayout->addWidget(this->thumbnailList.at(i), row, column);
+    column++;
+    if(column >= this->maxColumnNum){
+      column = 0;
+      row++;
+    }
+  }
+}
+
+//----------------------------------------------------------------------------
+// ctkDICOMThumbnailListWidget methods
+
+//----------------------------------------------------------------------------
+ctkDICOMThumbnailListWidget::ctkDICOMThumbnailListWidget(QWidget* _parent):Superclass(_parent), 
+  d_ptr(new ctkDICOMThumbnailListWidgetPrivate)
+{
+  Q_D(ctkDICOMThumbnailListWidget);
+  
+  d->setupUi(this);
+  d->maxColumnNum = 4;
+  d->thumbnailWidth = 128;
+}
+
+//----------------------------------------------------------------------------
+ctkDICOMThumbnailListWidget::~ctkDICOMThumbnailListWidget()
+{
+}
+
+void ctkDICOMThumbnailListWidget::clearThumbnail(){
+  Q_D(ctkDICOMThumbnailListWidget);
+  
+  int count = d->thumbnailList.count();
+
+  // clear all thumbnails from layout
+  for(int i = 0; i < count; i++){
+    d->thumbnailLayout->removeWidget(d->thumbnailList.at(i));
+  }
+
+  d->thumbnailList.clear();
+}
+
+void ctkDICOMThumbnailListWidget::addThumbnail(ctkDICOMThumbnailWidget* widget){
+  Q_D(ctkDICOMThumbnailListWidget);
+  if(widget == NULL)return;
+
+  d->thumbnailList.push_back(widget);
+
+  int count = d->thumbnailList.count();
+
+  int lastRow = (count/d->maxColumnNum);
+  int lastColumn = (count%d->maxColumnNum);
+
+  int nextRow = (lastRow+((lastColumn+1)/d->maxColumnNum));
+  int nextColumn = (lastColumn+1)%d->maxColumnNum;
+
+  d->thumbnailLayout->addWidget(widget, nextRow, nextColumn);
+}
+
+void ctkDICOMThumbnailListWidget::addTestThumbnail(){
+  Q_D(ctkDICOMThumbnailListWidget);
+  for(int i = 0; i<11; i++){
+    ctkDICOMThumbnailWidget* widget = new ctkDICOMThumbnailWidget(this);
+    QString text("Thumbnail: ");
+    widget->setMaximumWidth(d->thumbnailWidth);
+    widget->setText(text);
+    this->addThumbnail(widget);
+  }
+}
+
+void ctkDICOMThumbnailListWidget::setThumbnailWidth(int width){
+  Q_D(ctkDICOMThumbnailListWidget);
+  
+  d->thumbnailWidth = width;
+
+  d->maxColumnNum = this->width()/d->thumbnailWidth;
+  d->rearrangeThumbnails();
+}
+
+void ctkDICOMThumbnailListWidget::resizeEvent ( QResizeEvent * event ){
+  Q_D(ctkDICOMThumbnailListWidget);
+  
+  d->maxColumnNum = event->size().width()/d->thumbnailWidth;
+  d->rearrangeThumbnails();
+}
+

+ 57 - 0
Libs/DICOM/Widgets/ctkDICOMThumbnailListWidget.h

@@ -0,0 +1,57 @@
+/*=========================================================================
+
+  Library:   CTK
+
+  Copyright (c) Kitware Inc.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.commontk.org/LICENSE
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=========================================================================*/
+
+#ifndef __ctkDICOMThumbnailsListWidget_h
+#define __ctkDICOMThumbnailsListWidget_h
+
+// Qt includes 
+#include <QWidget>
+
+#include "ctkDICOMWidgetsExport.h"
+
+class ctkDICOMThumbnailListWidgetPrivate;
+
+class ctkDICOMThumbnailWidget;
+
+class CTK_DICOM_WIDGETS_EXPORT ctkDICOMThumbnailListWidget : public QWidget
+{
+public:
+  typedef QWidget Superclass;
+  explicit ctkDICOMThumbnailListWidget(QWidget* parent=0);
+  virtual ~ctkDICOMThumbnailListWidget();
+
+  void setThumbnailWidth(int width);
+
+  void addTestThumbnail();
+  
+protected:
+  QScopedPointer<ctkDICOMThumbnailListWidgetPrivate> d_ptr;
+
+  void clearThumbnail();
+  void addThumbnail(ctkDICOMThumbnailWidget* widget);
+
+  virtual void resizeEvent(QResizeEvent * event);
+  
+private:
+  Q_DECLARE_PRIVATE(ctkDICOMThumbnailListWidget);
+  Q_DISABLE_COPY(ctkDICOMThumbnailListWidget);
+};
+
+#endif