ctkDICOMThumbnailListWidget.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Qt include
  2. #include <QGridLayout>
  3. #include <QResizeEvent>
  4. // ctkDICOMWidgets includes
  5. #include "ctkDICOMThumbnailListWidget.h"
  6. #include "ui_ctkDICOMThumbnailListWidget.h"
  7. #include "ctkDICOMThumbnailWidget.h"
  8. // STD includes
  9. #include <iostream>
  10. //----------------------------------------------------------------------------
  11. class ctkDICOMThumbnailListWidgetPrivate: public Ui_ctkDICOMThumbnailListWidget
  12. {
  13. public:
  14. ctkDICOMThumbnailListWidgetPrivate(ctkDICOMThumbnailListWidget* parent): q_ptr(parent){
  15. }
  16. void clearAllThumbnails();
  17. void addThumbnail(ctkDICOMThumbnailWidget* widget);
  18. void rearrangeThumbnails();
  19. QList<ctkDICOMThumbnailWidget*> thumbnailList;
  20. int maxColumnNum;
  21. int thumbnailWidth;
  22. ctkDICOMThumbnailListWidget* const q_ptr;
  23. Q_DECLARE_PUBLIC(ctkDICOMThumbnailListWidget);
  24. };
  25. //----------------------------------------------------------------------------
  26. // ctkDICOMThumbnailListWidgetPrivate methods
  27. void ctkDICOMThumbnailListWidgetPrivate::rearrangeThumbnails(){
  28. int count = this->thumbnailList.count();
  29. // clear all thumbnails from layout
  30. for(int i = 0; i < count; i++){
  31. this->thumbnailLayout->removeWidget(this->thumbnailList.at(i));
  32. }
  33. // add all thumbnails to layout with new arrangement
  34. int row = 0;
  35. int column = 0;
  36. for(int i = 0; i < count; i++){
  37. ctkDICOMThumbnailWidget* widget = this->thumbnailList.at(i);
  38. this->thumbnailLayout->addWidget(widget, row, column);
  39. column++;
  40. if(column >= this->maxColumnNum){
  41. column = 0;
  42. row++;
  43. }
  44. }
  45. }
  46. void ctkDICOMThumbnailListWidgetPrivate::addThumbnail(ctkDICOMThumbnailWidget* widget){
  47. Q_Q(ctkDICOMThumbnailListWidget);
  48. if(widget == NULL)return;
  49. this->thumbnailList.push_back(widget);
  50. q->connect(widget, SIGNAL(selected(const ctkDICOMThumbnailWidget&)), q, SIGNAL(selected(const ctkDICOMThumbnailWidget&)));
  51. }
  52. void ctkDICOMThumbnailListWidgetPrivate::clearAllThumbnails(){
  53. int count = this->thumbnailList.count();
  54. // clear all thumbnails from layout
  55. for(int i = 0; i < count; i++){
  56. QWidget* widget = this->thumbnailList.at(i);
  57. this->thumbnailLayout->removeWidget(widget);
  58. widget->deleteLater();
  59. }
  60. this->thumbnailList.clear();
  61. }
  62. //----------------------------------------------------------------------------
  63. // ctkDICOMThumbnailListWidget methods
  64. //----------------------------------------------------------------------------
  65. ctkDICOMThumbnailListWidget::ctkDICOMThumbnailListWidget(QWidget* _parent):Superclass(_parent),
  66. d_ptr(new ctkDICOMThumbnailListWidgetPrivate(this))
  67. {
  68. Q_D(ctkDICOMThumbnailListWidget);
  69. d->setupUi(this);
  70. d->maxColumnNum = 4;
  71. d->thumbnailWidth = 128;
  72. }
  73. //----------------------------------------------------------------------------
  74. ctkDICOMThumbnailListWidget::~ctkDICOMThumbnailListWidget()
  75. {
  76. }
  77. void ctkDICOMThumbnailListWidget::addTestThumbnail(int count){
  78. Q_D(ctkDICOMThumbnailListWidget);
  79. for(int i = 0; i<count; i++){
  80. ctkDICOMThumbnailWidget* widget = new ctkDICOMThumbnailWidget(this);
  81. QPixmap pixmap(64, 64);
  82. pixmap.fill(Qt::blue);
  83. QString text("Thumbnail: ");
  84. widget->setMaximumWidth(d->thumbnailWidth);
  85. widget->setText(text);
  86. widget->setPixmap(pixmap);
  87. d->addThumbnail(widget);
  88. }
  89. d->rearrangeThumbnails();
  90. }
  91. void ctkDICOMThumbnailListWidget::setThumbnailWidth(int width){
  92. Q_D(ctkDICOMThumbnailListWidget);
  93. d->thumbnailWidth = width;
  94. d->maxColumnNum = this->width()/d->thumbnailWidth;
  95. d->rearrangeThumbnails();
  96. }
  97. void ctkDICOMThumbnailListWidget::resizeEvent ( QResizeEvent * event ){
  98. Q_D(ctkDICOMThumbnailListWidget);
  99. d->maxColumnNum = event->size().width()/d->thumbnailWidth;
  100. d->rearrangeThumbnails();
  101. }
  102. void ctkDICOMThumbnailListWidget::setModelIndex(const QModelIndex &index){
  103. Q_D(ctkDICOMThumbnailListWidget);
  104. d->clearAllThumbnails();
  105. this->addTestThumbnail(index.model()->rowCount(index));
  106. }