Overte C++ Documentation
ModelsBrowser.h
1 //
2 // ModelsBrowser.h
3 // interface/src/ui
4 //
5 // Created by Clement on 3/17/14.
6 // Copyright 2014 High Fidelity, Inc.
7 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 
12 #ifndef hifi_ModelsBrowser_h
13 #define hifi_ModelsBrowser_h
14 
15 #include <QReadWriteLock>
16 #include <QStandardItemModel>
17 #include <QTreeView>
18 
19 #include <FSTReader.h>
20 
21 class QNetworkReply;
22 
23 extern const char* MODEL_TYPE_NAMES[];
24 
25 class ModelHandler : public QObject {
26  Q_OBJECT
27 public:
28  ModelHandler(FSTReader::ModelType modelsType, QWidget* parent = NULL);
29 
30  void lockModel() { _lock.lockForRead(); }
31  QStandardItemModel* getModel() { return &_model; }
32  void unlockModel() { _lock.unlock(); }
33 
34 signals:
35  void doneDownloading();
36  void updated();
37 
38 public slots:
39  void setNameFilter(QString nameFilter);
40  void download();
41  void update();
42  void exit();
43 
44 private slots:
45  void downloadFinished();
46 
47 private:
48  bool _initiateExit;
49  FSTReader::ModelType _type;
50  QReadWriteLock _lock;
51  QStandardItemModel _model;
52  QString _nameFilter;
53 
54  void queryNewFiles(QString marker = QString());
55  bool parseXML(QByteArray xmlFile);
56  bool parseHeaders(QNetworkReply* reply);
57 };
58 
59 
60 class ModelsBrowser : public QWidget {
61  Q_OBJECT
62 public:
63 
64  ModelsBrowser(FSTReader::ModelType modelsType, QWidget* parent = NULL);
65  QString getSelectedFile() { return _selectedFile; }
66 
67 signals:
68  void startDownloading();
69  void startUpdating();
70  void selected(QString filename);
71 
72 public slots:
73  void setNameFilter(QString nameFilter);
74  void browse();
75 
76 private slots:
77  void applyFilter(const QString& filter);
78  void resizeView();
79  void enableSearchBar();
80 
81 private:
82  ModelHandler* _handler;
83  QLineEdit* _searchBar;
84  QTreeView _view;
85  QString _selectedFile;
86 };
87 
88 #endif // hifi_ModelsBrowser_h