class GeobricksTRMM: def __init__(self, iface): self.iface = iface self.plugin_dir = os.path.dirname(__file__) locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join( self.plugin_dir, 'i18n', 'geobricks_trmm_qgis_{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) self.layout = QVBoxLayout() self.username = QLineEdit() self.username.setPlaceholderText(self.tr('e.g. [email protected]')) self.password = QLineEdit() self.password.setEchoMode(QLineEdit.Password) self.password.setPlaceholderText(self.tr('e.g. [email protected]')) self.download_folder = QLineEdit() try: if self.last_download_folder is not None: self.download_folder.setText(self.last_download_folder) except: self.last_download_folder = None self.frequency = QComboBox() self.frequency.addItem(self.tr('Daily Sum'), 'SUM') self.frequency.addItem(self.tr('Daily Average'), 'AVG') self.frequency.addItem(self.tr('None'), 'NONE') self.from_date = QCalendarWidget() self.to_date = QCalendarWidget() self.bar = QgsMessageBar() self.lbl_0 = QLabel('<b>' + self.tr('Username') + '</b>') self.lbl_1 = QLabel('<b>' + self.tr('Password') + '</b>') self.lbl_2 = QLabel('<b>' + self.tr('Aggregation') + '</b>') self.from_date_label = QLabel('<b>' + self.tr('From Date') + '</b>: ' + QDate(2015, 7, 31).toString('MMMM d, yyyy')) self.to_date_label = QLabel('<b>' + self.tr('To Date') + '</b>: ' + QDate(2015, 7, 31).toString('MMMM d, yyyy')) self.lbl_5 = QLabel('<b>' + self.tr('Download Folder') + '</b>') self.lbl_6 = QLabel('<i style="color: blue;">' + self.tr('Create an account') + '</i>') self.lbl_7 = QLabel('<b>' + self.tr('Data availability') + '</b>: ' + self.tr('from January 1st 1998 to July 31st 2015')) self.palette = QPalette() self.from_date_widget = QWidget() self.from_date_widget_layout = QVBoxLayout() self.dates_widget = QWidget() self.dates_widget_layout = QHBoxLayout() self.username_widget = QWidget() self.username_layout = QVBoxLayout() self.password_widget = QWidget() self.password_layout = QVBoxLayout() self.progressBar = QProgressBar() self.progress_label = QLabel('<b>' + self.tr('Progress') + '</b>') self.login_widget = QWidget() self.login_layout = QHBoxLayout() self.download_folder_widget = QWidget() self.download_folder_layout = QHBoxLayout() self.download_folder_button = QPushButton(self.tr('...')) self.download_button = QPushButton(self.tr('Start Download')) self.close_button = QPushButton(self.tr('Close Window')) self.add_to_canvas = QCheckBox(self.tr('Add output layer to canvas')) self.add_to_canvas.setChecked(True) self.to_date_widget = QWidget() self.to_date_widget_layout = QVBoxLayout() self.spacing = 16 self.dlg = GeobricksTRMMDialog() self.actions = [] self.menu = self.tr('Download Data') self.toolbar = self.iface.addToolBar(self.tr('TRMM Data Downloader')) self.toolbar.setObjectName('TRMMDataDownloader') self.is_rendered = False def run(self): # Build UI self.build_ui() def build_ui(self): # Link label self.lbl_6.mousePressEvent = open_browser_registration self.palette.setColor(QPalette.Foreground, QColor('blue')) self.lbl_6.setPalette(self.palette) # Calendars self.from_date.setMinimumDate(QDate(1998, 1, 1)) self.from_date.setMaximumDate(QDate(2015, 7, 31)) self.to_date.setMinimumDate(QDate(1998, 1, 1)) self.to_date.setMaximumDate(QDate(2015, 7, 31)) # Message bar self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) self.layout.addWidget(self.bar) # From date panel self.from_date_widget_layout.setContentsMargins(0, 0, 0, 0) self.from_date_widget_layout.setSpacing(self.spacing) self.from_date_widget.setLayout(self.from_date_widget_layout) self.from_date_widget_layout.addWidget(self.from_date_label) self.from_date_widget_layout.addWidget(self.from_date) self.from_date.clicked[QDate].connect(self.update_from_label) # To date panel self.to_date_widget_layout.setContentsMargins(0, 0, 0, 0) self.to_date_widget_layout.setSpacing(self.spacing) self.to_date_widget.setLayout(self.to_date_widget_layout) self.to_date_widget_layout.addWidget(self.to_date_label) self.to_date_widget_layout.addWidget(self.to_date) self.to_date.clicked[QDate].connect(self.update_to_label) # Dates panel self.dates_widget_layout.setContentsMargins(0, 0, 0, 0) self.dates_widget_layout.setSpacing(self.spacing) self.dates_widget.setLayout(self.dates_widget_layout) self.dates_widget_layout.addWidget(self.from_date_widget) self.dates_widget_layout.addWidget(self.to_date_widget) # Username panel self.username_layout.setContentsMargins(0, 0, 0, 0) self.username_layout.setSpacing(self.spacing) self.username_widget.setLayout(self.username_layout) self.username_layout.addWidget(self.lbl_0) self.username_layout.addWidget(self.username) # Password panel self.password_layout.setContentsMargins(0, 0, 0, 0) self.password_layout.setSpacing(self.spacing) self.password_widget.setLayout(self.password_layout) self.password_layout.addWidget(self.lbl_1) self.password_layout.addWidget(self.password) # Login panel self.login_layout.setContentsMargins(0, 0, 0, 0) self.login_layout.setSpacing(self.spacing) self.login_widget.setLayout(self.login_layout) self.login_layout.addWidget(self.username_widget) self.login_layout.addWidget(self.password_widget) # Download folder panel self.download_folder_layout.setContentsMargins(0, 0, 0, 0) self.download_folder_layout.setSpacing(0) self.download_folder_widget.setLayout(self.download_folder_layout) self.download_folder_button.clicked.connect(self.select_output_file) self.download_folder_layout.addWidget(self.download_folder) self.download_folder_layout.addWidget(self.download_folder_button) # Download button self.download_button.clicked.connect(self.start) # Close button self.close_button.clicked.connect(self.close) # Add widgets to layout self.layout.addWidget(self.login_widget) self.layout.addWidget(self.lbl_6) self.layout.addWidget(self.lbl_2) self.layout.addWidget(self.frequency) self.layout.addWidget(self.dates_widget) self.layout.addWidget(self.lbl_5) self.layout.addWidget(self.download_folder_widget) self.layout.addWidget(self.add_to_canvas) self.layout.addWidget(self.download_button) self.layout.addWidget(self.progress_label) self.layout.addWidget(self.progressBar) self.layout.addWidget(self.close_button) # Set layout self.dlg.setLayout(self.layout) # Show dialog self.dlg.show() def update_from_label(self, date): self.from_date_label.setText('<b>' + self.tr('From Date') + '</b>: ' + date.toString('MMMM d, yyyy')) def update_to_label(self, date): self.to_date_label.setText('<b>' + self.tr('To Date') + '</b>: ' + date.toString('MMMM d, yyyy')) def select_output_file(self): filename = QFileDialog.getExistingDirectory(self.dlg, self.tr('Select Folder')) self.last_download_folder = filename self.download_folder.setText(self.last_download_folder) def tr(self, message): return QCoreApplication.translate('geobricks_trmm_qgis', message) def add_action( self, icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None): icon = QIcon(icon_path) action = QAction(icon, text, parent) action.triggered.connect(callback) action.setEnabled(enabled_flag) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar: self.toolbar.addAction(action) if add_to_menu: self.iface.addPluginToMenu( self.menu, action) self.actions.append(action) return action def initGui(self): icon_path = ':/plugins/geobricks_qgis_plugin_trmm/icon.png' self.add_action( icon_path, text=self.tr('TRMM Data Downloader'), callback=self.run, parent=self.iface.mainWindow()) def unload(self): for action in self.actions: self.iface.removePluginMenu( 'TRMMDataDownloader', action) self.iface.removeToolBarIcon(action) del self.toolbar def close(self): self.dlg.close() def start(self): p = self.collect_parameters() if p is not None: self.progressBar.setMaximum(100) self.progressBar.setValue(0) i = 0 try: range = date_range(p['from_date'], p['to_date']) for current_date in range: layers = list_layers(p['username'], p['password'], current_date.year, current_date.month, current_date.day, p['download_path']) if p['frequency'] is not 'NONE': self.aggregate_layers(layers, current_date) else: if p['open_in_qgis'] is True: for l in layers: if '.tfw' not in l: self.iface.addRasterLayer(l, str(l)) i += 1 percent = (i/float(len(range))) * 100 self.progressBar.setValue(percent) except Exception, e: self.bar.pushMessage(None, str(e), level=QgsMessageBar.CRITICAL)
class QtCalendar(QtBoundedDate, ProxyCalendar): """ A Qt implementation of an Enaml ProxyCalendar. """ #: A reference to the widget created by the proxy. widget = Typed(QCalendarWidget) #-------------------------------------------------------------------------- # Initialization #-------------------------------------------------------------------------- def create_widget(self): """ Create the calender widget. """ self.widget = QCalendarWidget(self.parent_widget()) def init_widget(self): """ Initialize the widget. """ super(QtCalendar, self).init_widget() self.widget.activated.connect(self.on_date_changed) #-------------------------------------------------------------------------- # Abstract API Implementation #-------------------------------------------------------------------------- def get_date(self): """ Return the current date in the control. Returns ------- result : date The current control date as a Python date object. """ return self.widget.selectedDate().toPyDate() def set_minimum(self, date): """ Set the widget's minimum date. Parameters ---------- date : date The date object to use for setting the minimum date. """ self.widget.setMinimumDate(date) def set_maximum(self, date): """ Set the widget's maximum date. Parameters ---------- date : date The date object to use for setting the maximum date. """ self.widget.setMaximumDate(date) def set_date(self, date): """ Set the widget's current date. Parameters ---------- date : date The date object to use for setting the date. """ self._guard |= CHANGED_GUARD try: self.widget.setSelectedDate(date) finally: self._guard &= ~CHANGED_GUARD
class GeobricksTRMM: def __init__(self, iface): self.iface = iface self.plugin_dir = os.path.dirname(__file__) locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join(self.plugin_dir, 'i18n', 'geobricks_trmm_qgis_{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) self.layout = QVBoxLayout() self.username = QLineEdit() self.username.setPlaceholderText( self.tr('e.g. [email protected]')) self.password = QLineEdit() self.password.setEchoMode(QLineEdit.Password) self.password.setPlaceholderText( self.tr('e.g. [email protected]')) self.download_folder = QLineEdit() try: if self.last_download_folder is not None: self.download_folder.setText(self.last_download_folder) except: self.last_download_folder = None self.frequency = QComboBox() self.frequency.addItem(self.tr('Daily Sum'), 'SUM') self.frequency.addItem(self.tr('Daily Average'), 'AVG') self.frequency.addItem(self.tr('None'), 'NONE') self.from_date = QCalendarWidget() self.to_date = QCalendarWidget() self.bar = QgsMessageBar() self.lbl_0 = QLabel('<b>' + self.tr('Username') + '</b>') self.lbl_1 = QLabel('<b>' + self.tr('Password') + '</b>') self.lbl_2 = QLabel('<b>' + self.tr('Aggregation') + '</b>') self.from_date_label = QLabel( '<b>' + self.tr('From Date') + '</b>: ' + QDate(2015, 7, 31).toString('MMMM d, yyyy')) self.to_date_label = QLabel( '<b>' + self.tr('To Date') + '</b>: ' + QDate(2015, 7, 31).toString('MMMM d, yyyy')) self.lbl_5 = QLabel('<b>' + self.tr('Download Folder') + '</b>') self.lbl_6 = QLabel('<i style="color: blue;">' + self.tr('Create an account') + '</i>') self.lbl_7 = QLabel('<b>' + self.tr('Data availability') + '</b>: ' + self.tr('from January 1st 1998 to July 31st 2015')) self.palette = QPalette() self.from_date_widget = QWidget() self.from_date_widget_layout = QVBoxLayout() self.dates_widget = QWidget() self.dates_widget_layout = QHBoxLayout() self.username_widget = QWidget() self.username_layout = QVBoxLayout() self.password_widget = QWidget() self.password_layout = QVBoxLayout() self.progressBar = QProgressBar() self.progress_label = QLabel('<b>' + self.tr('Progress') + '</b>') self.login_widget = QWidget() self.login_layout = QHBoxLayout() self.download_folder_widget = QWidget() self.download_folder_layout = QHBoxLayout() self.download_folder_button = QPushButton(self.tr('...')) self.download_button = QPushButton(self.tr('Start Download')) self.close_button = QPushButton(self.tr('Close Window')) self.add_to_canvas = QCheckBox(self.tr('Add output layer to canvas')) self.add_to_canvas.setChecked(True) self.to_date_widget = QWidget() self.to_date_widget_layout = QVBoxLayout() self.spacing = 16 self.dlg = GeobricksTRMMDialog() self.actions = [] self.menu = self.tr('Download Data') self.toolbar = self.iface.addToolBar(self.tr('TRMM Data Downloader')) self.toolbar.setObjectName('TRMMDataDownloader') self.is_rendered = False def run(self): # Build UI self.build_ui() def build_ui(self): # Link label self.lbl_6.mousePressEvent = open_browser_registration self.palette.setColor(QPalette.Foreground, QColor('blue')) self.lbl_6.setPalette(self.palette) # Calendars self.from_date.setMinimumDate(QDate(1998, 1, 1)) self.from_date.setMaximumDate(QDate(2015, 7, 31)) self.to_date.setMinimumDate(QDate(1998, 1, 1)) self.to_date.setMaximumDate(QDate(2015, 7, 31)) # Message bar self.bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) self.layout.addWidget(self.bar) # From date panel self.from_date_widget_layout.setContentsMargins(0, 0, 0, 0) self.from_date_widget_layout.setSpacing(self.spacing) self.from_date_widget.setLayout(self.from_date_widget_layout) self.from_date_widget_layout.addWidget(self.from_date_label) self.from_date_widget_layout.addWidget(self.from_date) self.from_date.clicked[QDate].connect(self.update_from_label) # To date panel self.to_date_widget_layout.setContentsMargins(0, 0, 0, 0) self.to_date_widget_layout.setSpacing(self.spacing) self.to_date_widget.setLayout(self.to_date_widget_layout) self.to_date_widget_layout.addWidget(self.to_date_label) self.to_date_widget_layout.addWidget(self.to_date) self.to_date.clicked[QDate].connect(self.update_to_label) # Dates panel self.dates_widget_layout.setContentsMargins(0, 0, 0, 0) self.dates_widget_layout.setSpacing(self.spacing) self.dates_widget.setLayout(self.dates_widget_layout) self.dates_widget_layout.addWidget(self.from_date_widget) self.dates_widget_layout.addWidget(self.to_date_widget) # Username panel self.username_layout.setContentsMargins(0, 0, 0, 0) self.username_layout.setSpacing(self.spacing) self.username_widget.setLayout(self.username_layout) self.username_layout.addWidget(self.lbl_0) self.username_layout.addWidget(self.username) # Password panel self.password_layout.setContentsMargins(0, 0, 0, 0) self.password_layout.setSpacing(self.spacing) self.password_widget.setLayout(self.password_layout) self.password_layout.addWidget(self.lbl_1) self.password_layout.addWidget(self.password) # Login panel self.login_layout.setContentsMargins(0, 0, 0, 0) self.login_layout.setSpacing(self.spacing) self.login_widget.setLayout(self.login_layout) self.login_layout.addWidget(self.username_widget) self.login_layout.addWidget(self.password_widget) # Download folder panel self.download_folder_layout.setContentsMargins(0, 0, 0, 0) self.download_folder_layout.setSpacing(0) self.download_folder_widget.setLayout(self.download_folder_layout) self.download_folder_button.clicked.connect(self.select_output_file) self.download_folder_layout.addWidget(self.download_folder) self.download_folder_layout.addWidget(self.download_folder_button) # Download button self.download_button.clicked.connect(self.start) # Close button self.close_button.clicked.connect(self.close) # Add widgets to layout self.layout.addWidget(self.login_widget) self.layout.addWidget(self.lbl_6) self.layout.addWidget(self.lbl_2) self.layout.addWidget(self.frequency) self.layout.addWidget(self.dates_widget) self.layout.addWidget(self.lbl_5) self.layout.addWidget(self.download_folder_widget) self.layout.addWidget(self.add_to_canvas) self.layout.addWidget(self.download_button) self.layout.addWidget(self.progress_label) self.layout.addWidget(self.progressBar) self.layout.addWidget(self.close_button) # Set layout self.dlg.setLayout(self.layout) # Show dialog self.dlg.show() def update_from_label(self, date): self.from_date_label.setText('<b>' + self.tr('From Date') + '</b>: ' + date.toString('MMMM d, yyyy')) def update_to_label(self, date): self.to_date_label.setText('<b>' + self.tr('To Date') + '</b>: ' + date.toString('MMMM d, yyyy')) def select_output_file(self): filename = QFileDialog.getExistingDirectory(self.dlg, self.tr('Select Folder')) self.last_download_folder = filename self.download_folder.setText(self.last_download_folder) def tr(self, message): return QCoreApplication.translate('geobricks_trmm_qgis', message) def add_action(self, icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None): icon = QIcon(icon_path) action = QAction(icon, text, parent) action.triggered.connect(callback) action.setEnabled(enabled_flag) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar: self.toolbar.addAction(action) if add_to_menu: self.iface.addPluginToMenu(self.menu, action) self.actions.append(action) return action def initGui(self): icon_path = ':/plugins/geobricks_qgis_plugin_trmm/icon.png' self.add_action(icon_path, text=self.tr('TRMM Data Downloader'), callback=self.run, parent=self.iface.mainWindow()) def unload(self): for action in self.actions: self.iface.removePluginMenu('TRMMDataDownloader', action) self.iface.removeToolBarIcon(action) del self.toolbar def close(self): self.dlg.close() def start(self): p = self.collect_parameters() if p is not None: self.progressBar.setMaximum(100) self.progressBar.setValue(0) i = 0 try: range = date_range(p['from_date'], p['to_date']) for current_date in range: layers = list_layers(p['username'], p['password'], current_date.year, current_date.month, current_date.day, p['download_path']) if p['frequency'] is not 'NONE': self.aggregate_layers(layers, current_date) else: if p['open_in_qgis'] is True: for l in layers: if '.tfw' not in l: self.iface.addRasterLayer(l, str(l)) i += 1 percent = (i / float(len(range))) * 100 self.progressBar.setValue(percent) except Exception, e: self.bar.pushMessage(None, str(e), level=QgsMessageBar.CRITICAL)