xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/allwinner/camera/CameraUI/src/picturewidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "picturewidget.h"
2 #include "ui_picturewidget.h"
3 #include "main_desktop.h"
4 #include "midwindow.h"
5 #include "frmmessagebox.h"
6 #include <QTextCodec>
7 extern main_desktop *g_pStaticMaindesktop;
8 // This is available in all editors.
9 extern QFileInfo fileInfo_to_show;
10 const QString win_path="E:/tech_practise/DvrUI/DvrUI/";
11 //const QString linux_path="/mnt/sdcard/mmcblk1p1/frontVideo/";//sdcard
12 extern QString linux_usb_path;//U
13 extern QString linux_sdcard_path;//sd
14 extern QString prase_path(QString linux_path);
15 extern QString print_info(unsigned char tmp[],int tmp2);
16 #include<stdio.h>
17 #include<string.h>
18 #include<sys/types.h>
19 #include<iostream>
20 using namespace std;
21 #pragma pack(2)
22 typedef struct BITMAPFILEHEADER
23 {
24     u_int16_t bfType;
25     u_int32_t bfSize;
26     u_int16_t bfReserved1;
27     u_int16_t bfReserved2;
28     u_int32_t bfOffBits;
29 }BITMAPFILEHEADER;
30 
31 typedef struct BITMAPINFOHEADER
32 {
33     u_int32_t biSize;
34     u_int32_t biWidth;
35     u_int32_t biHeight;
36     u_int16_t biPlanes;
37     u_int16_t biBitCount;
38     u_int32_t biCompression;
39     u_int32_t biSizeImage;
40     u_int32_t biXPelsPerMeter;
41     u_int32_t biYPelsPerMeter;
42     u_int32_t biClrUsed;
43     u_int32_t biClrImportant;
44 }BITMAPINFODEADER;
showBmpInforHead(BITMAPFILEHEADER & pBmpHead,BITMAPINFODEADER & pBmpInforHead)45 void showBmpInforHead(BITMAPFILEHEADER &pBmpHead,BITMAPINFODEADER &pBmpInforHead)
46 {
47     qDebug()<<"file type:"<<pBmpHead.bfType;
48     qDebug()<<"file size:"<<pBmpHead.bfSize;
49     qDebug()<<"reverse_1:"<<pBmpHead.bfReserved1;
50     qDebug()<<"reverse_2:"<<pBmpHead.bfReserved2;
51     qDebug()<<"bitmap data offsets:"<<pBmpHead.bfOffBits;
52 
53     qDebug()<<"struct BITMAPINFODEADER size:"<<pBmpInforHead.biSize;
54     qDebug()<<"width:"<<pBmpInforHead.biWidth;
55     qDebug()<<"height:"<<pBmpInforHead.biHeight;
56     qDebug()<<"biPlanes:"<<pBmpInforHead.biPlanes;
57     qDebug()<<"biBitCount:"<<pBmpInforHead.biBitCount;
58     qDebug()<<"comprass:"<<pBmpInforHead.biCompression;
59     qDebug()<<"biSizeImage ,bit map data size:"<<pBmpInforHead.biSizeImage;
60     qDebug()<<"x resolution:"<<pBmpInforHead.biXPelsPerMeter;
61     qDebug()<<"y resolution:"<<pBmpInforHead.biYPelsPerMeter;
62     qDebug()<<"color count:"<<pBmpInforHead.biClrUsed;
63     qDebug()<<"important color count:"<<pBmpInforHead.biClrImportant;
64 }
show_bitmap_info(QString path)65 void show_bitmap_info(QString path)
66 {
67     FILE *fp = fopen((char*)path.toStdString().c_str(), "rb");
68     if(fp==NULL)
69     {
70         qDebug()<<"open file error";
71         return ;
72     }
73     BITMAPFILEHEADER head;
74     BITMAPINFODEADER info;
75 
76     fread(&head, sizeof(BITMAPFILEHEADER),1,  fp);
77     fread(&info,sizeof(BITMAPINFODEADER), 1,  fp);
78 
79     showBmpInforHead(head,info);
80 }
81 extern MidWindow *g_MidWindow;
82 const int W_ICONSIZE = 100;
83 const int H_ICONSIZE = 100;
84 const int H_ITEMSIZE = 120;
pictureWidget(QWidget * parent)85 pictureWidget::pictureWidget(QWidget *parent) :
86     QDialog(parent),
87     ui(new Ui::pictureWidget)
88 {
89     ui->setupUi(this);
90 
91     show_model=true;
92     ui->listWidget_file->clear();
93 
94     show_file();
95 
96     connect(this,SIGNAL(main_desktop_disvisible()),g_pStaticMaindesktop,SLOT(on_main_desktop_disvisible()));
97 
98     connect(g_MidWindow,SIGNAL(usb_insert()),this,SLOT(on_usb_mount()));
99     connect(g_MidWindow,SIGNAL(usb_delete()),this,SLOT(on_usb_umount()));
100     connect(ui->listWidget_file,SIGNAL(clicked(QModelIndex)),this,SLOT(show_big_picture(QModelIndex)));
101 
102 }
show_file()103 void pictureWidget::show_file()
104 {
105     qDebug()<<"pic widget is showing file";
106     #if defined(Q_OS_LINUX)
107     qDebug()<<"now path is "<<linux_usb_path;
108     //file_list=GetFileList(prase_path(linux_usb_path));
109     #else
110     file_list=GetFileList(QDir(win_path));
111     #endif
112     ui->listWidget_file->setObjectName(QString::fromUtf8("listWidget_file"));
113     ui->listWidget_file->setMovement(QListView::Static);
114 
115     ui->listWidget_file->setSelectionMode(QAbstractItemView::ExtendedSelection);
116 
117     ui->listWidget_file->setSpacing(12);
118     ui->listWidget_file->setResizeMode(QListView::Adjust);
119     if(show_model){
120 
121         ui->listWidget_file->setViewMode(QListView::IconMode);
122         ui->listWidget_file->setIconSize(QSize(100,100));
123 
124         ui->listWidget_file->setDragEnabled(false);
125         show_file_by_iconview(file_list);
126     }else{
127         ui->listWidget_file->setViewMode(QListView::ListMode);
128         ui->listWidget_file->setDragEnabled(false);
129         ui->listWidget_file->setIconSize(QSize(22,22));
130         show_file_by_listview(file_list);
131     }
132 }
~pictureWidget()133 pictureWidget::~pictureWidget()
134 {
135     delete ui;
136 }
on_usb_mount()137 void pictureWidget::on_usb_mount()
138 {
139     qDebug()<<"picwidget get the signal usb insert";
140     show_file();
141 }
on_usb_umount()142 void pictureWidget::on_usb_umount()
143 {
144     qDebug()<<"picwidget get the signal usb delete";
145     ui->listWidget_file->clear();
146 }
GetFileList(QDir dir)147 QFileInfoList pictureWidget::GetFileList(QDir dir)
148 {
149     qDebug()<<"GetFileList:"<<"now path is :"<<dir.path();
150     qDebug()<<"get all file name";
151     QStringList filters;
152      filters << "*.bmp"<<"*.jpg"<<"*.jpeg"<<"*.png";
153     dir.setNameFilters(filters);
154 
155     QFileInfoList file_list=dir.entryInfoList();
156     for(int i=0;i<file_list.size();i++)
157     {
158         QFileInfo fileInfo=file_list.at(i);
159         fileInfo.absoluteFilePath();
160 //        qDebug()<<fileInfo.fileName();
161     }
162     return file_list;
163 }
covert_image_format(QString tempFilePath)164 QImage covert_image_format(QString tempFilePath)
165 {
166     QImage image(tempFilePath);
167     QImage currentImage;
168     if(image.format() == QImage::Format_Mono)
169     {
170         qDebug() << "format_mono";
171         currentImage = image.convertToFormat(QImage::Format_Mono);
172     }
173     else if(image.format()  == QImage::Format_MonoLSB)
174     {
175         qDebug() << "format_monoLSB";
176         currentImage = image.convertToFormat(QImage::Format_MonoLSB);
177     }
178     else if(image.format()  == QImage::Format_Indexed8)
179     {
180         qDebug() << "QImage::Format_Indexed8";
181         currentImage = image.convertToFormat(QImage::Format_Indexed8);
182     }
183     else if(image.format()  == QImage::Format_RGB32)
184     {
185         qDebug() << "QImage::Format_RGB32";
186         currentImage = image.convertToFormat(QImage::Format_RGB32);
187     }
188     else if(image.format()  == QImage::Format_ARGB32)
189     {
190         qDebug()<<"QImage::Format_ARGB32";
191         currentImage = image.convertToFormat(QImage::Format_ARGB32);
192     }
193 
194     else if(image.format()  ==QImage::Format_ARGB32_Premultiplied)
195     {
196          qDebug()<<"QImage::Format_ARGB32_Premultiplied";
197          currentImage = image.convertToFormat(QImage::Format_ARGB32_Premultiplied);
198     }
199 
200     else if(image.format()  == QImage::Format_RGB16)
201     {
202         qDebug("QImage::Format_RGB16");
203         currentImage = image.convertToFormat(QImage::Format_RGB16);
204     }
205 
206     else if(image.format()  == QImage::Format_ARGB8565_Premultiplied)
207     {
208         qDebug()<<"QImage::Format_ARGB8565_Premultiplied";
209         currentImage = image.convertToFormat(QImage::Format_ARGB8565_Premultiplied);
210     }
211 
212     else if(image.format()  == QImage::Format_RGB666)
213     {
214         qDebug()<<"QImage::Format_RGB666";
215         currentImage = image.convertToFormat(QImage::Format_RGB666);
216     }
217 
218     else if(image.format()  == QImage::Format_ARGB6666_Premultiplied)
219     {
220         qDebug()<<"QImage::Format_ARGB6666_Premultiplied";
221         currentImage = image.convertToFormat(QImage::Format_ARGB6666_Premultiplied);
222     }
223 
224     else if(image.format()  == QImage::Format_RGB555)
225     {
226         qDebug()<<"QImage::Format_RGB555";
227         currentImage = image.convertToFormat(QImage::Format_RGB555);
228     }
229 
230     else if(image.format()  == QImage::Format_ARGB8555_Premultiplied)
231     {
232         qDebug()<<"QImage::Format_ARGB8555_Premultiplied";
233         currentImage = image.convertToFormat(QImage::Format_ARGB8555_Premultiplied);
234     }
235 
236     else if(image.format()  == QImage::Format_RGB888)
237     {
238         qDebug()<<"QImage::Format_RGB888";
239         currentImage = image.convertToFormat(QImage::Format_RGB888);
240     }
241 
242     else if(image.format() == QImage::Format_RGB444)
243     {
244         qDebug()<<"QImage::Format_RGB444";
245         currentImage = image.convertToFormat(QImage::Format_RGB444);
246     }
247     else if(image.format()  == QImage::Format_ARGB4444_Premultiplied)
248     {
249         qDebug()<<"QImage::Format_ARGB4444_Premultiplied";
250         currentImage = image.convertToFormat(QImage::Format_ARGB4444_Premultiplied);
251     }
252     else
253     {
254         qDebug()<<"unkown format";
255         currentImage = image;
256     }
257     return currentImage;
258 }
show_file_by_iconview(QFileInfoList file_list)259 void pictureWidget::show_file_by_iconview(QFileInfoList file_list)
260 {
261     qDebug()<<"show_file_by_iconview";
262     qDebug()<<"file_list has "<<file_list.size()<<" files";
263     ui->listWidget_file->setIconSize(QSize(100,100));
264     for(int i=0;i<file_list.size();i++)
265     {
266         QFileInfo file_info=file_list.at(i);
267         QString tempFilePath=file_info.absoluteFilePath();
268         int filename_index=tempFilePath.lastIndexOf("/");
269         QString tempFileName=tempFilePath.right(tempFilePath.size()-filename_index-1);
270         qDebug()<<"file name:"<<tempFileName;
271         QString tempFileName_NoSuffix=tempFileName;
272         int suffix_index=tempFileName_NoSuffix.lastIndexOf(".");
273         QString suffix=tempFileName.right(tempFileName.size()-suffix_index-1);
274         qDebug()<<"suffix is:"<<suffix;
275         tempFileName_NoSuffix.truncate(suffix_index);
276 //        qDebug()<<"the no_suffix filename:"<<tempFileName_NoSuffix;
277         QPixmap objPixmap;
278         if(suffix=="bmp")
279         {
280             show_bitmap_info(tempFilePath);
281             //QImage image=covert_image_format(tempFilePath);
282             //qDebug()<<"is a bitmap"<<tempFileName<<"imageformat"<<image.format();
283             //objPixmap.fromImage(image);
284         }else{
285             qDebug()<<"not a bitmap";
286             objPixmap=QPixmap(tempFilePath);
287         }
288         QTextCodec *codec = QTextCodec::codecForName("GB2312");
289         QString str = codec->toUnicode(tempFileName.toLatin1().data());
290         if(objPixmap.isNull())
291         {
292             objPixmap=QPixmap(":/icon/no_shotvideo.png");
293         }
294         QListWidgetItem *pItem = new QListWidgetItem(QIcon(objPixmap.scaled(QSize(W_ICONSIZE,H_ICONSIZE))),str);
295         pItem->setSizeHint(QSize(W_ICONSIZE,H_ITEMSIZE));
296         ui->listWidget_file->addItem(pItem);
297     }
298 }
show_file_by_listview(QFileInfoList file_list)299 void pictureWidget::show_file_by_listview(QFileInfoList file_list)
300 {
301     ui->listWidget_file->setIconSize(QSize(22,22));
302     for(int i=0;i<file_list.size();i++)
303     {
304         QFileInfo file_info=file_list.at(i);
305         QString tempFilePath=file_info.absoluteFilePath();
306         int filename_index=tempFilePath.lastIndexOf("/");
307         QString tempFileName=tempFilePath.right(tempFilePath.size()-filename_index-1);
308 
309 //        qDebug()<<"file name:"<<tempFileName;
310         QString tempFileName_NoSuffix=tempFileName;
311         int suffix_index=tempFileName_NoSuffix.lastIndexOf(".");
312         tempFileName_NoSuffix.truncate(suffix_index);
313 //        qDebug()<<"the no_suffix filename:"<<tempFileName_NoSuffix;
314 
315         QPixmap objPixmap(tempFilePath);
316         QListWidgetItem *pItem = new QListWidgetItem(QIcon(objPixmap.scaled(QSize(20,20))),tempFileName);
317         pItem->setSizeHint(QSize(W_ICONSIZE,H_ITEMSIZE));
318         ui->listWidget_file->addItem(pItem);
319     }
320 }
show_big_picture(QModelIndex pos)321 void pictureWidget::show_big_picture(QModelIndex pos)
322 {
323     QListWidgetItem* item=ui->listWidget_file->currentItem();
324     qDebug()<<"filename"<<item->text();
325     qDebug()<<"which file:"<<pos.row();
326 
327     fileInfo_to_show=file_list.at(pos.row());
328     QImage pic;
329     pic.load(fileInfo_to_show.absoluteFilePath());
330     if(pic.isNull())
331     {
332         frmMessageBox *msg=new frmMessageBox(this);
333         msg->SetMessage(QString(tr("this image format can't attach!")),0);
334         QTimer::singleShot(2000, msg, SLOT(close()));
335         msg->exec();
336         return ;
337     }else{
338         picture_views=new Picture_view(this);
339         g_pStaticMaindesktop->on_main_desktop_disvisible();
340         picture_views->showNormal();
341     }
342 }
deal_picture_views_signal()343 void pictureWidget::deal_picture_views_signal()
344 {
345 
346 }
347