ctkDICOMThumbnailListWidget.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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(){}
  15. void rearrangeThumbnails();
  16. QList<ctkDICOMThumbnailWidget*> thumbnailList;
  17. int maxColumnNum;
  18. int thumbnailWidth;
  19. };
  20. //----------------------------------------------------------------------------
  21. // ctkDICOMThumbnailListWidgetPrivate methods
  22. void ctkDICOMThumbnailListWidgetPrivate::rearrangeThumbnails(){
  23. int count = this->thumbnailList.count();
  24. // clear all thumbnails from layout
  25. for(int i = 0; i < count; i++){
  26. this->thumbnailLayout->removeWidget(this->thumbnailList.at(i));
  27. }
  28. // add all thumbnails to layout with new arrangement
  29. int row = 0;
  30. int column = 0;
  31. for(int i = 0; i < count; i++){
  32. this->thumbnailLayout->addWidget(this->thumbnailList.at(i), row, column);
  33. column++;
  34. if(column >= this->maxColumnNum){
  35. column = 0;
  36. row++;
  37. }
  38. }
  39. }
  40. //----------------------------------------------------------------------------
  41. // ctkDICOMThumbnailListWidget methods
  42. //----------------------------------------------------------------------------
  43. ctkDICOMThumbnailListWidget::ctkDICOMThumbnailListWidget(QWidget* _parent):Superclass(_parent),
  44. d_ptr(new ctkDICOMThumbnailListWidgetPrivate)
  45. {
  46. Q_D(ctkDICOMThumbnailListWidget);
  47. d->setupUi(this);
  48. d->maxColumnNum = 4;
  49. d->thumbnailWidth = 128;
  50. }
  51. //----------------------------------------------------------------------------
  52. ctkDICOMThumbnailListWidget::~ctkDICOMThumbnailListWidget()
  53. {
  54. }
  55. void ctkDICOMThumbnailListWidget::clearThumbnail(){
  56. Q_D(ctkDICOMThumbnailListWidget);
  57. int count = d->thumbnailList.count();
  58. // clear all thumbnails from layout
  59. for(int i = 0; i < count; i++){
  60. d->thumbnailLayout->removeWidget(d->thumbnailList.at(i));
  61. }
  62. d->thumbnailList.clear();
  63. }
  64. void ctkDICOMThumbnailListWidget::addThumbnail(ctkDICOMThumbnailWidget* widget){
  65. Q_D(ctkDICOMThumbnailListWidget);
  66. if(widget == NULL)return;
  67. d->thumbnailList.push_back(widget);
  68. int count = d->thumbnailList.count();
  69. int lastRow = (count/d->maxColumnNum);
  70. int lastColumn = (count%d->maxColumnNum);
  71. int nextRow = (lastRow+((lastColumn+1)/d->maxColumnNum));
  72. int nextColumn = (lastColumn+1)%d->maxColumnNum;
  73. d->thumbnailLayout->addWidget(widget, nextRow, nextColumn);
  74. }
  75. void ctkDICOMThumbnailListWidget::addTestThumbnail(){
  76. Q_D(ctkDICOMThumbnailListWidget);
  77. for(int i = 0; i<11; i++){
  78. ctkDICOMThumbnailWidget* widget = new ctkDICOMThumbnailWidget(this);
  79. QString text("Thumbnail: ");
  80. widget->setMaximumWidth(d->thumbnailWidth);
  81. widget->setText(text);
  82. this->addThumbnail(widget);
  83. }
  84. }
  85. void ctkDICOMThumbnailListWidget::setThumbnailWidth(int width){
  86. Q_D(ctkDICOMThumbnailListWidget);
  87. d->thumbnailWidth = width;
  88. d->maxColumnNum = this->width()/d->thumbnailWidth;
  89. d->rearrangeThumbnails();
  90. }
  91. void ctkDICOMThumbnailListWidget::resizeEvent ( QResizeEvent * event ){
  92. Q_D(ctkDICOMThumbnailListWidget);
  93. d->maxColumnNum = event->size().width()/d->thumbnailWidth;
  94. d->rearrangeThumbnails();
  95. }