00001
00002
00003
00004
00005 #ifndef BALL_VIEW_DIALOGSPUBCHEMDIALOG_H
00006 #define BALL_VIEW_DIALOGSPUBCHEMDIALOG_H
00007
00008 #ifndef BALL_COMMON_GLOBAL_H
00009 # include <BALL/COMMON/global.h>
00010 #endif
00011
00012 #ifndef BALL_VIEW_KERNEL_MODULARWIDGET_H
00013 # include <BALL/VIEW/KERNEL/modularWidget.h>
00014 #endif
00015
00016 #ifndef BALL_VIEW_WIDGETS_SDWIDGET_H
00017 # include <BALL/VIEW/WIDGETS/SDWidget.h>
00018 #endif
00019
00020 #ifndef BALL_STRUCTURE_SMILESPARSER_H
00021 # include <BALL/STRUCTURE/smilesParser.h>
00022 #endif
00023
00024 #ifndef BALL_FORMAT_PUBCHEMDOWNLOADER_H
00025 # include <BALL/FORMAT/pubchemDownloader.h>
00026 #endif
00027
00028 #include <BALL/VIEW/UIC/ui_pubchemDialog.h>
00029
00030 #include <QtGui/QDialog>
00031
00032 #include <map>
00033
00034 class QProgressBar;
00035
00036 namespace BALL
00037 {
00038 namespace VIEW
00039 {
00040 class PubChemDialog;
00041
00042 namespace PubChemDialogPrivate
00043 {
00044 class DownloadHelper
00045 : public QThread
00046 {
00047 Q_OBJECT
00048
00049 public:
00050 DownloadHelper(PubChemDialog* parent);
00051
00052 void run();
00053
00054 String query;
00055 String filename;
00056
00057 protected:
00058 PubChemDialog *parent_;
00059 };
00060 }
00061
00064 class BALL_VIEW_EXPORT PubChemDialog
00065 : public QDialog,
00066 public Ui_PubChemDialogData,
00067 public ModularWidget
00068 {
00069 Q_OBJECT
00070
00071 friend class PubChemDialogPrivate::DownloadHelper;
00072
00073 public:
00074
00075 BALL_EMBEDDABLE(PubChemDialog,ModularWidget)
00076
00077
00078 PubChemDialog(QWidget *parent = NULL, const char *name = "PubChemDialog");
00079
00081 virtual ~PubChemDialog();
00082
00084 virtual void initializeWidget(MainControl& main_control);
00085
00087 virtual void checkMenu(MainControl& main_control);
00088
00090 void generateFromSMILES(const String& SMILES);
00091 public slots:
00092
00094 void show();
00095
00097 void generateButtonClicked();
00098
00100 void queryPubChem();
00101
00103 void switchView(QTreeWidgetItem* item, int column);
00104
00106 void clearEntries();
00107
00109 void finished();
00110
00112 void updateDownloadProgress(qint64 done, qint64 total);
00113
00115 void downloadFinished(const QString& filename);
00116
00117 protected:
00118
00119 SmilesParser smiles_parser_;
00120
00121 struct ParsedResult_
00122 {
00123 String name;
00124 String description;
00125 String smiles;
00126 };
00127
00128 void parseItemRecursive_(const QDomNode& current_node, Position level, ParsedResult_& result);
00129
00130 void insert_(ParsedResult_ d, QTreeWidgetItem* parent, bool plot);
00131
00132 PubChemDownloader* pcd_;
00133
00134 std::map<QTreeWidgetItem*, System*> sd_systems_;
00135 std::map<QTreeWidgetItem*, System*> original_systems_;
00136 std::map<QTreeWidgetItem*, ParsedResult_> descriptions_;
00137
00138 QAction* action1_, *action2_;
00139
00140 int current_request_id_;
00141
00142 HashMap<int, QTreeWidgetItem*> esummary_request_ids_;
00143 QProgressBar *progress_;
00144
00145 QPushButton* add_button_;
00146
00147 PubChemDialogPrivate::DownloadHelper downloader_;
00148 };
00149
00150 }
00151 }
00152 #endif