示例#1
0
 def helpClicked(self):
     dialog = displayobject.AnObject(QtWidgets.QDialog(),
                                     self.help,
                                     title='Help for getmap (' +
                                     fileVersion() + ')',
                                     section='map')
     dialog.exec_()
示例#2
0
 def do_zipfile(zip_in, temp_dir):  # copy multiple files
     zf = zipfile.ZipFile(zip_in, 'r')
     ctr = 0
     for zi in zf.infolist():
         if zi.filename[:-4] == '.exe':
             if temp_dir is None:
                 temp_dir = tempfile.gettempdir() + '/'
             zf.extract(zi, temp_dir)
             newver = credits.fileVersion(program=temp_dir +
                                          zi.filename)
             if newver != '?':
                 curver = credits.fileVersion(program=zi.filename)
                 if newver > curver or curver == '?':
                     if not self.debug:
                         if os.path.exists(zi.filename + '~'):
                             os.remove(zi.filename + '~')
                         if cur_verson != '?':
                             os.rename(zi.filename, zi_filename + '~')
                         os.rename(temp_dir + zi.filename, zi.filename)
                     ctr += 1
         else:
             newtime = datetime.fromtimestamp(
                 time.mktime(zi.date_time + (0, 0, -1)))
             try:
                 curtime = datetime.fromtimestamp(
                     int(os.path.getmtime(zi.filename)))
             except:
                 curtime = 0
             if curtime == 0 or newtime > curtime:
                 # print(zi.filename, newtime, curtime)
                 if not self.debug:
                     if os.path.exists(zi.filename + '~'):
                         os.remove(zi.filename + '~')
                     if curtime != 0:
                         os.rename(zi.filename, zi.filename + '~')
                     zf.extract(zi)
                     date_time = time.mktime(zi.date_time + (0, 0, -1))
                     os.utime(zi.filename, (date_time, date_time))
                 ctr += 1
     if ctr == 0:
         msg = 'Current is newer'
     else:
         msg = f'Updated {ctr} files'
     return msg
示例#3
0
 def __init__(self, parent=None):
     super(GetMany, self).__init__(parent)
     layout = QtGui.QVBoxLayout(self)
     layout.addWidget(QtGui.QLabel('Enter Coordinates'))
     self.text = QtGui.QPlainTextEdit()
     self.text.setPlainText('Enter list of coordinates separated by spaces or commas. west lat.,' \
                            + ' north lon., east lat., south lon. ...')
     layout.addWidget(self.text)
      # OK and Cancel buttons
     buttons = QtGui.QDialogButtonBox(
         QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel,
         QtCore.Qt.Horizontal, self)
     buttons.accepted.connect(self.accept)
     buttons.rejected.connect(self.reject)
     layout.addWidget(buttons)
     self.setWindowTitle('SIREN - worldwindow (' + fileVersion() + ") - List of Coordinates")
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
示例#4
0
 def doitClicked(self):
     host = 'https://sourceforge.net/projects/sensiren/files/'
     default_suffix = sys.argv[0][sys.argv[0].rfind('.'):]
     for p in range(len(self.newbox)):
         if self.newbox[p].checkState() == QtCore.Qt.Checked:
             self.newbox[p].setCheckState(QtCore.Qt.Unchecked)
             self.newbox[p].setFlags(self.newbox[p].flags() ^ QtCore.Qt.ItemIsUserCheckable)
             s = self.newprog[p].rfind('.')
             if s < len(self.newprog[p]) - 4 and self.newprog[p][s:] != '.html':
                 suffix = default_suffix
             else:
                 suffix = ''
             command = 'wget -O %snew%s %s%s%s' % (self.newprog[p], suffix, host,
                       self.newprog[p], suffix)
             command = command.split(' ')
             if self.debug:
                 response = '200 OK'
             else:
                 pid = subprocess.Popen(command, stderr=subprocess.PIPE)
                 response = get_response(pid.communicate()[1])
                 if response != '200 OK':
                     errmsg = 'Error ' + response
                     self.table.setItem(p, 3, QtGui.QTableWidgetItem(errmsg))
                     continue
             if suffix == '.exe' or suffix == '.py':
                 if os.path.exists(self.newprog[p] + 'new' + suffix):
                     version = fileVersion(program=self.newprog[p] + 'new')
                     if version != '?':
                         if version < str(self.table.item(p, 3).text()):
                             if not self.debug:
                                 os.rename(self.newprog[p] + 'new' + suffix,
                                           self.newprog[p] + '.' + version + suffix)
                             self.table.setItem(p, 3, QtGui.QTableWidgetItem('Current is newer'))
                             continue
             if not self.debug:
                 if os.path.exists(self.newprog[p] + suffix + '~'):
                     os.remove(self.newprog[p] + suffix + '~')
                 os.rename(self.newprog[p] + suffix, self.newprog[p] + suffix +'~')
                 os.rename(self.newprog[p] + 'new' + suffix, self.newprog[p] + suffix)
             self.table.setItem(p, 3, QtGui.QTableWidgetItem('Updated'))
     self.table.resizeColumnsToContents()
     self.table.setColumnWidth(0, 29)
示例#5
0
 def get_new_versions(self, versions_file, local=''):
     versions = open(versions_file)
     programs = csv.DictReader(versions)
     for program in programs:
         version = credits.fileVersion(
             program=program['Program'].replace('.zip', '.py'))
         if version != '?' and version != program['Version']:
             cur = version.split('.')
             new = program['Version'].split('.')
             if new[0] == cur[0]:  # must be same major release
                 curt = ''
                 newt = ''
                 for b in range(1, len(cur)):
                     curt += cur[b].rjust(4, '0')
                     newt += new[b].rjust(4, '0')
                 if newt > curt or self.debug:
                     self.new_versions.append([
                         program['Program'], program['Version'] + local,
                         version
                     ])
             elif new[0] > cur[0]:
                 self.new_versions.append(
                     [program['Program'], 'New Release' + local, version])
     versions.close()
示例#6
0
 def writetile(self, x, y, zoom):
     url = self.url
     if len(self.subs) > 0:
         self.sub_ctr += 1
         if self.sub_ctr >= len(self.subs):
             self.sub_ctr = 0
         url = url.replace('[]', self.subs[self.sub_ctr])
     file_name = str(x) + '_' + str(y) + '.png'
     url_tail = self.url_tail.replace('/zoom', '/' + str(zoom))
     url_tail = url_tail.replace('/x', '/' + str(x))
     url_tail = url_tail.replace('/y', '/' + str(y))
     if 1 == 2:  # Google?
         url_tail = self.url_tail.replace('z=zoom', 'z=' + str(zoom))
         url_tail = url_tail.replace('x=x', 'x=' + str(x))
         url_tail = url_tail.replace('y=y', 'y=' + str(y))
     if self.batch:
         print(url + url_tail)
     user_agent = {
         'User-agent':
         'getmap ' + fileVersion() + ' contact [email protected]'
     }
     http = PoolManager(headers=user_agent)
     if self.batch:
         print('Retrieving ' + url_tail)
     response = http.request('GET', url + url_tail)
     if response.status == 200 and response.reason == 'OK':
         if self.batch:
             print(url_tail + ' retrieved')
         f = open(self.tmp_location + file_name, 'wb')
         f.write(response.data)
         f.close()
         message = 'OK'
     else:
         message = url_tail + ' failed\n' + str(
             response.status) + ' ' + response.reason
     return message, file_name
示例#7
0
 def helpClicked(self):
     dialog = displayobject.AnObject(QtWidgets.QDialog(), self.help,
              title='Help for makerainfall2 (' + fileVersion() + ')', section='merrar')
     dialog.exec_()
示例#8
0
 def initUI(self):
     self.yearSpin = QtWidgets.QSpinBox()
     now = datetime.datetime.now()
     self.yearSpin.setRange(1979, now.year)
     self.yearSpin.setValue(now.year - 1)
     self.zoneCombo = QtWidgets.QComboBox()
     self.zoneCombo.addItem('Auto')
     for i in range(-12, 13):
         self.zoneCombo.addItem(str(i))
     self.zoneCombo.currentIndexChanged[str].connect(self.zoneChanged)
     self.zone_lon = QtWidgets.QLabel(('Time zone calculated from MERRA data'))
     self.grid = QtWidgets.QGridLayout()
     self.grid.addWidget(QtWidgets.QLabel('Year:'), 0, 0)
     self.grid.addWidget(self.yearSpin, 0, 1)
     self.grid.addWidget(QtWidgets.QLabel('Time Zone:'), 1, 0)
     self.grid.addWidget(self.zoneCombo, 1, 1)
     self.grid.addWidget(self.zone_lon, 1, 2, 1, 3)
     self.grid.addWidget(QtWidgets.QLabel('Rainfall File Format:'), 2, 0)
     self.fmatcombo = QtWidgets.QComboBox(self)
     self.fmats = ['any', 'flx', 'lnd', 'mld']
     for i in range(len(self.fmats)):
         self.fmatcombo.addItem(self.fmats[i])
     self.fmatcombo.setCurrentIndex(0)
     self.grid.addWidget(self.fmatcombo, 2, 1)
     self.grid.addWidget(QtWidgets.QLabel('Coordinates:'), 3, 0)
     self.coords = QtWidgets.QPlainTextEdit()
     self.grid.addWidget(self.coords, 3, 1, 1, 3)
     self.grid.addWidget(QtWidgets.QLabel('Copy folder down:'), 4, 0)
     self.checkbox = QtWidgets.QCheckBox()
     self.checkbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.checkbox, 4, 1)
     self.grid.addWidget(QtWidgets.QLabel('If checked will copy rainfall folder changes down to others'), 4, 3)
     cur_dir = os.getcwd()
     self.dir_labels = ['Rainfall Source', 'Target']
     self.dirs = [None, None, None]
     for i in range(2):
         self.grid.addWidget(QtWidgets.QLabel(self.dir_labels[i] + ' Folder:'), 5 + i, 0)
         self.dirs[i] = ClickableQLabel()
         self.dirs[i].setText(cur_dir)
         self.dirs[i].setStyleSheet("background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;")
         self.dirs[i].clicked.connect(self.dirChanged)
         self.grid.addWidget(self.dirs[i], 5 + i, 1, 1, 3)
     quit = QtWidgets.QPushButton('Quit', self)
     self.grid.addWidget(quit, 8, 0)
     quit.clicked.connect(self.quitClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     dorain = QtWidgets.QPushButton('Produce Rainfall Files', self)
     wdth = dorain.fontMetrics().boundingRect(dorain.text()).width() + 9
     self.grid.addWidget(dorain, 8, 1)
     dorain.clicked.connect(self.dorainClicked)
     help = QtWidgets.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, 8, 2)
     help.clicked.connect(self.helpClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     info = QtWidgets.QPushButton('File Info', self)
     info.setMaximumWidth(wdth)
     self.grid.addWidget(info, 8, 3)
     info.clicked.connect(self.infoClicked)
   #   self.grid.setColumnStretch(4, 2)
     frame = QtWidgets.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtWidgets.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtWidgets.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     self.setWindowTitle('SIREN - makerainfall2 (' + fileVersion() + ') - Make rainfall files from MERRA data')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.center()
     self.resize(int(self.sizeHint().width()* 1.07), int(self.sizeHint().height() * 1.07))
     self.show()
示例#9
0
 def __init__(self, ini_file='getfiles.ini', parent=None):
     QtWidgets.QDialog.__init__(self, parent)
     self.setWindowTitle('SIREN Update (' + credits.fileVersion() +
                         ') - Check for new versions')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     config = configparser.RawConfigParser()
     config_file = ini_file
     config.read(config_file)
     self.debug = False
     try:
         debug = config.get('sirenupd', 'debug')
         if debug.lower() in ['true', 'yes', 'on']:
             self.debug = True
     except:
         pass
     self.wget_cmd = 'wget --no-check-certificate -O'
     try:
         self.wget_cmd = config.get('sirenupd', 'wget_cmd')
     except:
         pass
     try:
         self.local = config.get('sirenupd', 'local')
         self.local = self.local.replace('$USER$', getUser())
     except:
         self.local = ''
     self.host = 'https://sourceforge.net/projects/sensiren/files/'
     try:
         self.host = config.get('sirenupd', 'url')
     except:
         pass
     self.new_versions = []
     row = 0
     newgrid = QtWidgets.QGridLayout()
     versions_file = 'siren_versions.csv'
     if self.local != '':  # local location?
         versions_file = self.local + versions_file
         if os.path.exists(versions_file):
             self.get_new_versions(versions_file, local=' (local)')
     # now remote versions
     versions_file = 'siren_versions.csv'
     command = '%s %s %s%s' % (self.wget_cmd, versions_file, self.host,
                               versions_file)
     command = command.split()
     if self.debug:
         response = '200 OK'
     else:
         try:
             pid = subprocess.Popen(command, stderr=subprocess.PIPE)
         except:
             command[0] = command[0] + '.exe'
             pid = subprocess.Popen(command, stderr=subprocess.PIPE)
         response = get_response(pid.communicate()[1])
     if response != '200 OK':
         newgrid.addWidget(QtWidgets.QLabel('Error encountered accessing siren_versions.csv\n\n' + \
                                        response), 0, 0, 1, 4)
         row = 1
     elif os.path.exists(versions_file):
         self.get_new_versions(versions_file)
     else:
         newgrid.addWidget(QtWidgets.QLabel('No versions file available.'),
                           0, 0, 1, 4)
         row = 1
     if len(self.new_versions) > 0:
         self.new_versions.sort()
         if self.debug:
             newgrid.addWidget(QtWidgets.QLabel('Debug mode.'), row, 0, 1,
                               4)
         else:
             newgrid.addWidget(QtWidgets.QLabel('New versions are available for the following programs.' + \
                                        '\nChoose those you wish to update.' + \
                                        '\nUpdates can take a while so please be patient.' + \
                                        '\nContact [email protected] with any issues.'), row, 0, 1, 4)
         self.table = QtWidgets.QTableWidget()
         self.table.setRowCount(len(self.new_versions))
         self.table.setColumnCount(4)
         hdr_labels = ['', 'Program', 'New Ver.', 'Current / Status']
         self.table.setHorizontalHeaderLabels(hdr_labels)
         self.table.verticalHeader().setVisible(False)
         self.newbox = []
         self.newprog = []
         rw = -1
         for new_version in self.new_versions:
             rw += 1
             self.newbox.append(QtWidgets.QTableWidgetItem())
             self.newprog.append(new_version[0])
             if new_version[1][:11] != 'New Release':
                 self.newbox[-1].setFlags(QtCore.Qt.ItemIsUserCheckable
                                          | QtCore.Qt.ItemIsEnabled)
                 self.newbox[-1].setCheckState(QtCore.Qt.Unchecked)
             self.table.setItem(rw, 0, self.newbox[-1])
             self.table.setItem(rw, 1,
                                QtWidgets.QTableWidgetItem(new_version[0]))
             self.table.setItem(rw, 2,
                                QtWidgets.QTableWidgetItem(new_version[1]))
             self.table.setItem(rw, 3,
                                QtWidgets.QTableWidgetItem(new_version[2]))
         self.table.resizeColumnsToContents()
         newgrid.addWidget(self.table, 1, 0, 1, 4)
         doit = QtWidgets.QPushButton('Update')
         doit.clicked.connect(self.doitClicked)
         newgrid.addWidget(doit, 2, 1)
         row = 2
     else:
         newgrid.addWidget(QtWidgets.QLabel('No new versions available.'),
                           0, 0, 1, 4)
         row = 1
     quit = QtWidgets.QPushButton('Quit')
     quit.clicked.connect(self.quit)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quit)
     newgrid.addWidget(quit, row, 0)
     self.setLayout(newgrid)
     self.resize(500, int(self.sizeHint().height()))
示例#10
0
 def __init__(self, help='help.html', ini_file='getfiles.ini', parent=None):
     super(getMERRA2, self).__init__(parent)
     self.help = help
     self.ini_file = ini_file
     self.get_config()
     self.ignore = False
     self.worldwindow = None
     ok = False
     if sys.platform == 'win32' or sys.platform == 'cygwin':
         try:
             netrc = '~\\.netrc'.replace('~', os.environ['HOME'])
         except:
             netrc = ''
     else:
         netrc = '~/.netrc'.replace('~', os.path.expanduser('~'))
     if netrc != '' and os.path.exists(netrc):
         ok = True
     if not ok:
         netrcmsg = '.netrc file missing.\n(' + netrc + ')\nDo you want create one?'
         if sys.platform == 'win32' or sys.platform == 'cygwin':
             netrcmsg += '\nYou will need to reinvoke getmerra2.'
         reply = QtWidgets.QMessageBox.question(self, 'SIREN - getmerra2 - No .netrc file',
                 netrcmsg,
                 QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
         if reply == QtWidgets.QMessageBox.Yes:
             self.create_netrc()
     self.northSpin = QtWidgets.QDoubleSpinBox()
     self.northSpin.setDecimals(3)
     self.northSpin.setSingleStep(.5)
     self.northSpin.setRange(-85.06, 85.06)
     self.northSpin.setObjectName('north')
     self.westSpin = QtWidgets.QDoubleSpinBox()
     self.westSpin.setDecimals(3)
     self.westSpin.setSingleStep(.5)
     self.westSpin.setRange(-180, 180)
     self.westSpin.setObjectName('west')
     self.southSpin = QtWidgets.QDoubleSpinBox()
     self.southSpin.setDecimals(3)
     self.southSpin.setSingleStep(.5)
     self.southSpin.setRange(-85.06, 85.06)
     self.southSpin.setObjectName('south')
     self.eastSpin = QtWidgets.QDoubleSpinBox()
     self.eastSpin.setDecimals(3)
     self.eastSpin.setSingleStep(.5)
     self.eastSpin.setRange(-180, 180)
     self.eastSpin.setObjectName('east')
     self.latSpin = QtWidgets.QDoubleSpinBox()
     self.latSpin.setDecimals(3)
     self.latSpin.setSingleStep(.5)
     self.latSpin.setRange(-84.56, 84.56)
     self.latSpin.setObjectName('lat')
     self.lonSpin = QtWidgets.QDoubleSpinBox()
     self.lonSpin.setDecimals(3)
     self.lonSpin.setSingleStep(.5)
     self.lonSpin.setRange(-179.687, 179.687)
     self.lonSpin.setObjectName('lon')
     self.latwSpin = QtWidgets.QDoubleSpinBox()
     self.latwSpin.setDecimals(3)
     self.latwSpin.setSingleStep(.5)
     self.latwSpin.setRange(0, 170.12)
     self.latwSpin.setObjectName('latw')
     self.lonwSpin = QtWidgets.QDoubleSpinBox()
     self.lonwSpin.setDecimals(3)
     self.lonwSpin.setSingleStep(.5)
     self.lonwSpin.setRange(0, 360)
     self.lonwSpin.setObjectName('lonw')
     if len(sys.argv) > 1:
         his_config_file = sys.argv[1]
         his_config = configparser.RawConfigParser()
         his_config.read(his_config_file)
         try:
             mapp = his_config.get('Map', 'map_choice')
         except:
             mapp = ''
         try:
              upper_left = his_config.get('Map', 'upper_left' + mapp).split(',')
              self.northSpin.setValue(float(upper_left[0].strip()))
              self.westSpin.setValue(float(upper_left[1].strip()))
              lower_right = his_config.get('Map', 'lower_right' + mapp).split(',')
              self.southSpin.setValue(float(lower_right[0].strip()))
              self.eastSpin.setValue(float(lower_right[1].strip()))
         except:
              try:
                  lower_left = his_config.get('Map', 'lower_left' + mapp).split(',')
                  upper_right = his_config.get('Map', 'upper_right' + mapp).split(',')
                  self.northSpin.setValue(float(upper_right[0].strip()))
                  self.westSpin.setValue(float(lower_left[1].strip()))
                  self.southSpin.setValue(float(lower_left[0].strip()))
                  self.eastSpin.setValue(float(upper_right[1].strip()))
              except:
                  pass
     self.northSpin.valueChanged.connect(self.showArea)
     self.westSpin.valueChanged.connect(self.showArea)
     self.southSpin.valueChanged.connect(self.showArea)
     self.eastSpin.valueChanged.connect(self.showArea)
     self.latSpin.valueChanged.connect(self.showArea)
     self.lonSpin.valueChanged.connect(self.showArea)
     self.latwSpin.valueChanged.connect(self.showArea)
     self.lonwSpin.valueChanged.connect(self.showArea)
     self.grid = QtWidgets.QGridLayout()
     self.grid.addWidget(QtWidgets.QLabel('Area of Interest:'), 0, 0)
     area = QtWidgets.QPushButton('Choose area via Map', self)
     self.grid.addWidget(area, 0, 1, 1, 2)
     area.clicked.connect(self.areaClicked)
     self.grid.addWidget(QtWidgets.QLabel('Upper left:'), 1, 0, 1, 1)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(QtWidgets.QLabel('North'), 2, 0)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(self.northSpin, 2, 1)
     self.grid.addWidget(QtWidgets.QLabel('West'), 3, 0)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(self.westSpin, 3, 1)
     self.grid.addWidget(QtWidgets.QLabel('Lower right:'), 1, 2)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(QtWidgets.QLabel('South'), 2, 2)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(self.southSpin, 2, 3)
     self.grid.addWidget(QtWidgets.QLabel('East'), 3, 2)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(self.eastSpin, 3, 3)
     self.grid.addWidget(QtWidgets.QLabel('Centre:'), 1, 4)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(QtWidgets.QLabel('Lat.'), 2, 4)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(self.latSpin, 2, 5)
     self.grid.addWidget(QtWidgets.QLabel('Lon.'), 3, 4)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(QtCore.Qt.AlignRight)
     self.grid.addWidget(self.lonSpin, 3, 5)
     self.grid.addWidget(QtWidgets.QLabel('Degrees'), 1, 6)
     self.grid.addWidget(self.latwSpin, 2, 6)
     self.grid.addWidget(self.lonwSpin, 3, 6)
     self.grid.addWidget(QtWidgets.QLabel('Approx. area:'), 4, 0)
     self.approx_area = QtWidgets.QLabel('')
     self.grid.addWidget(self.approx_area, 4, 1)
     self.grid.addWidget(QtWidgets.QLabel('MERRA-2 dimensions:'), 4, 2)
     self.merra_cells = QtWidgets.QLabel('')
     self.grid.addWidget(self.merra_cells, 4, 3, 1, 2)
     self.grid.addWidget(QtWidgets.QLabel('Start date:'), 5, 0)
     self.strt_date = QtWidgets.QDateEdit(self)
     self.strt_date.setDate(QtCore.QDate.currentDate().addDays(-self.wait_days))
     self.strt_date.setCalendarPopup(True)
     self.strt_date.setMinimumDate(QtCore.QDate(1980, 1, 1))
     self.strt_date.setMaximumDate(QtCore.QDate.currentDate().addDays(-self.wait_days))
     self.grid.addWidget(self.strt_date, 5, 1)
     self.grid.addWidget(QtWidgets.QLabel('End date:'), 6, 0)
     self.end_date = QtWidgets.QDateEdit(self)
     self.end_date.setDate(QtCore.QDate.currentDate().addDays(-self.wait_days))
     self.end_date.setCalendarPopup(True)
     self.end_date.setMinimumDate(QtCore.QDate(1980,1,1))
     self.end_date.setMaximumDate(QtCore.QDate.currentDate())
     self.grid.addWidget(self.end_date, 6, 1)
     self.grid.addWidget(QtWidgets.QLabel('Copy folder down:'), 7, 0)
     self.checkbox = QtWidgets.QCheckBox()
     self.checkbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.checkbox, 7, 1)
     self.grid.addWidget(QtWidgets.QLabel('If checked will copy solar folder changes down'), 7, 2, 1, 3)
     cur_dir = os.getcwd()
     self.dir_labels = ['Solar', 'Wind']
     datasets = []
     self.collections = []
     for typ in self.dir_labels:
         datasets.append(self.config.get('getmerra2', typ.lower() + '_collection') + ' (Parameters: ' + \
                         self.config.get('getmerra2', typ.lower() + '_variables') + ')')
         self.collections.append(self.config.get('getmerra2', typ.lower() + '_collection'))
     self.dirs = [None, None, None]
     for i in range(2):
         self.grid.addWidget(QtWidgets.QLabel(self.dir_labels[i] + ' files:'), 8 + i * 2, 0)
         self.grid.addWidget(QtWidgets.QLabel(datasets[i]), 8 + i * 2, 1, 1, 5)
         self.grid.addWidget(QtWidgets.QLabel('    Target Folder:'), 9 + i * 2, 0)
         self.dirs[i] = ClickableQLabel()
         try:
             self.dirs[i].setText(self.config.get('Files', self.dir_labels[i].lower() + '_files').replace('$USER$', getUser()))
         except:
             self.dirs[i].setText(cur_dir)
         self.dirs[i].setStyleSheet("background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;")
         self.dirs[i].clicked.connect(self.dirChanged)
         self.grid.addWidget(self.dirs[i], 9 + i * 2, 1, 1, 8)
     self.log = QtWidgets.QLabel('')
     msg_palette = QtGui.QPalette()
     msg_palette.setColor(QtGui.QPalette.Foreground, QtCore.Qt.red)
     self.log.setPalette(msg_palette)
     self.grid.addWidget(self.log, 12, 1, 2, 4)
     sw = self.northSpin.minimumSizeHint().width()
     dw = self.strt_date.minimumSizeHint().width()
     if sw > dw: # fix for wide QDoubleSpinBox width in Windows
         self.northSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
         self.westSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
         self.southSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
         self.eastSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
         self.latSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
         self.lonSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
         self.latwSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
         self.lonwSpin.setMinimumWidth(self.strt_date.minimumSizeHint().width())
     buttongrid = QtWidgets.QGridLayout()
     quit = QtWidgets.QPushButton('Done', self)
     buttongrid.addWidget(quit, 0, 0)
     quit.clicked.connect(self.quitClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('x'), self, self.quitClicked)
     solar = QtWidgets.QPushButton('Get Solar', self)
     buttongrid.addWidget(solar, 0, 1)
     solar.clicked.connect(self.getClicked)
     wind = QtWidgets.QPushButton('Get Wind', self)
     buttongrid.addWidget(wind, 0, 2)
     wind.clicked.connect(self.getClicked)
     check = QtWidgets.QPushButton('Check Solar', self)
     buttongrid.addWidget(check, 0, 3)
     check.clicked.connect(self.checkClicked)
     check = QtWidgets.QPushButton('Check Wind', self)
     buttongrid.addWidget(check, 0, 4)
     check.clicked.connect(self.checkClicked)
     help = QtWidgets.QPushButton('Help', self)
     buttongrid.addWidget(help, 0, 5)
     help.clicked.connect(self.helpClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     frame = QtWidgets.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtWidgets.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtWidgets.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     frame2 = QtWidgets.QFrame()
     frame2.setLayout(buttongrid)
     self.layout.addWidget(frame2)
     self.setWindowTitle('SIREN - getmerra2 (' + fileVersion() + ') - Get MERRA-2 data')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.resize(int(self.sizeHint().width()* 1.5), int(self.sizeHint().height() * 1.07))
     self.updated = False
     self.show()
示例#11
0
 def initUI(self):
     config = configparser.RawConfigParser()
     if len(sys.argv) > 1:
         config_file = sys.argv[1]
     else:
         config_file = getModelFile('SIREN.ini')
     config.read(config_file)
     try:
         self.base_year = config.get('Base', 'year')
     except:
         self.base_year = '2012'
     self.parents = []
     try:
         self.parents = getParents(config.items('Parents'))
     except:
         pass
     try:
         self.solarfiles = config.get('Files', 'solar_files')
         for key, value in self.parents:
             self.solarfiles = self.solarfiles.replace(key, value)
         self.solarfiles = self.solarfiles.replace('$USER$', getUser())
         self.solarfiles = self.solarfiles.replace('$YEAR$', self.base_year)
     except:
         self.solarfiles = ''
     try:
         self.solarindex = config.get('Files', 'solar_index')
         for key, value in self.parents:
             self.solarindex = self.solarindex.replace(key, value)
         self.solarindex = self.solarindex.replace('$USER$', getUser())
         self.solarindex = self.solarindex.replace('$YEAR$', self.base_year)
     except:
         self.solarindex = ''
     if self.solarindex == '':
         self.solarindex = self.solarfiles + '/solar_index.xls'
     try:
         self.windfiles = config.get('Files', 'wind_files')
         for key, value in self.parents:
             self.windfiles = self.windfiles.replace(key, value)
         self.windfiles = self.windfiles.replace('$USER$', getUser())
         self.windfiles = self.windfiles.replace('$YEAR$', self.base_year)
     except:
         self.windfiles = ''
     try:
         self.windindex = config.get('Files', 'wind_index')
         for key, value in self.parents:
             self.windindex = self.windindex.replace(key, value)
         self.windindex = self.windindex.replace('$USER$', getUser())
         self.windindex = self.windindex.replace('$YEAR$', self.base_year)
     except:
         self.windindex = ''
     if self.windindex == '':
         self.windindex = self.windfiles + '/wind_index.xls'
     self.grid = QtWidgets.QGridLayout()
     self.grid.addWidget(QtWidgets.QLabel('Solar Folder:'), 1, 0)
     self.ssource = ClickableQLabel()
     self.ssource.setText(self.solarfiles)
     self.ssource.setStyleSheet("background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;")
     self.ssource.clicked.connect(self.sdirChanged)
     self.grid.addWidget(self.ssource, 1, 1, 1, 4)
     self.grid.addWidget(QtWidgets.QLabel('Solar Index:'), 2, 0)
     self.starget = ClickableQLabel()
     self.starget.setText(self.solarindex)
     self.starget.setStyleSheet("background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;")
     self.starget.clicked.connect(self.stgtChanged)
     self.grid.addWidget(self.starget, 2, 1, 1, 4)
     self.grid.addWidget(QtWidgets.QLabel('Wind Folder:'), 3, 0)
     self.wsource = ClickableQLabel()
     self.wsource.setText(self.windfiles)
     self.wsource.setStyleSheet("background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;")
     self.wsource.clicked.connect(self.wdirChanged)
     self.grid.addWidget(self.wsource, 3, 1, 1, 4)
     self.grid.addWidget(QtWidgets.QLabel('Wind Index:'), 4, 0)
     self.wtarget = ClickableQLabel()
     self.wtarget.setText(self.windindex)
     self.wtarget.setStyleSheet("background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;")
     self.wtarget.clicked.connect(self.wtgtChanged)
     self.grid.addWidget(self.wtarget, 4, 1, 1, 4)
     self.grid.addWidget(QtWidgets.QLabel('Properties:'), 5, 0)
     self.properties = QtWidgets.QLineEdit()
     self.properties.setReadOnly(True)
     self.grid.addWidget(self.properties, 5, 1, 1, 4)
     self.log = QtWidgets.QLabel(' ')
     self.grid.addWidget(self.log, 6, 1, 1, 4)
     quit = QtWidgets.QPushButton('Quit', self)
     self.grid.addWidget(quit, 7, 0)
     quit.clicked.connect(self.quitClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     dosolar = QtWidgets.QPushButton('Produce Solar Index', self)
     wdth = dosolar.fontMetrics().boundingRect(dosolar.text()).width() + 9
     dosolar.setMaximumWidth(wdth)
     self.grid.addWidget(dosolar, 7, 1)
     dosolar.clicked.connect(self.dosolarClicked)
     dowind = QtWidgets.QPushButton('Produce Wind Index', self)
     dowind.setMaximumWidth(wdth)
     self.grid.addWidget(dowind, 7, 2)
     dowind.clicked.connect(self.dowindClicked)
     help = QtWidgets.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, 7, 3)
     help.clicked.connect(self.helpClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     self.grid.setColumnStretch(3, 5)
     frame = QtWidgets.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtWidgets.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtWidgets.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     self.setWindowTitle('SIREN - indexweather (' + fileVersion() + ') - Make resource grid file')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.center()
     self.resize(int(self.sizeHint().width()* 1.07), int(self.sizeHint().height() * 1.07))
     self.show()
示例#12
0
 def initUI(self):
     config = ConfigParser.RawConfigParser()
     if len(sys.argv) > 1:
         config_file = sys.argv[1]
     else:
         config_file = 'SIREN.ini'
     config.read(config_file)
     try:
         self.base_year = config.get('Base', 'year')
     except:
         self.base_year = '2012'
     self.yrndx = -1
     try:
         self.years = []
         years = config.get('Base', 'years')
         bits = years.split(',')
         for i in range(len(bits)):
             rngs = bits[i].split('-')
             if len(rngs) > 1:
                 for j in range(int(rngs[0].strip()), int(rngs[1].strip()) + 1):
                     if str(j) == self.base_year:
                         self.yrndx = len(self.years)
                     self.years.append(str(j))
             else:
                 if rngs[0].strip() == self.base_year:
                     self.yrndx = len(self.years)
                 self.years.append(rngs[0].strip())
     except:
         self.years = [self.base_year]
         self.yrndx = 0
     if self.yrndx < 0:
         self.yrndx = len(self.years)
         self.years.append(self.base_year)
     self.parents = []
     try:
         self.parents = getParents(config.items('Parents'))
     except:
         pass
     self.do_rain = False
     try:
         self.rainfiles = config.get('Files', 'rain_files')
         for key, value in self.parents:
             self.rainfiles = self.rainfiles.replace(key, value)
         self.rainfiles = self.rainfiles.replace('$USER$', getUser())
         self.rainfiles = self.rainfiles.replace('$YEAR$', self.base_year)
         self.do_rain = True
     except:
         self.rainfiles = ''
         try:
             variable = config.get('View', 'resource_rainfall')
             if variable.lower() in ['true', 'yes', 'on']:
                 self.do_rain = True
         except:
             pass
     try:
         self.solarfiles = config.get('Files', 'solar_files')
         for key, value in self.parents:
             self.solarfiles = self.solarfiles.replace(key, value)
         self.solarfiles = self.solarfiles.replace('$USER$', getUser())
         self.solarfiles = self.solarfiles.replace('$YEAR$', self.base_year)
     except:
         self.solarfiles = ''
     try:
         self.windfiles = config.get('Files', 'wind_files')
         for key, value in self.parents:
             self.windfiles = self.windfiles.replace(key, value)
         self.windfiles = self.windfiles.replace('$USER$', getUser())
         self.windfiles = self.windfiles.replace('$YEAR$', self.base_year)
     except:
         self.windfiles = ''
     try:
         self.resource_grid = config.get('Files', 'resource_grid')
         for key, value in self.parents:
             self.resource_grid = self.resource_grid.replace(key, value)
         self.resource_grid = self.resource_grid.replace('$USER$', getUser())
         self.resource_grid = self.resource_grid.replace('$YEAR$', self.base_year)
     except:
         self.resource_grid = ''
     if self.resource_grid == '':
         self.resource_grid = self.solarfiles + '/resource_$YEAR$.xls'
     self.grid = QtGui.QGridLayout()
     row = 0
     self.grid.addWidget(QtGui.QLabel('Year:'), row, 0)
     self.yearCombo = QtGui.QComboBox()
     for i in range(len(self.years)):
         self.yearCombo.addItem(self.years[i])
     self.yearCombo.setCurrentIndex(self.yrndx)
     self.yearCombo.currentIndexChanged[str].connect(self.yearChanged)
     self.grid.addWidget(self.yearCombo, row, 1)
     row += 1
     self.grid.addWidget(QtGui.QLabel('Update year:'), row, 0)
     self.checkbox = QtGui.QCheckBox()
     self.checkbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.checkbox, row, 1)
     self.grid.addWidget(QtGui.QLabel('Update year in solar, wind and resource fields'), row, 2, 1, 2)
     row += 1
     self.grid.addWidget(QtGui.QLabel('Level of Detail:'), row, 0)
     self.detailCombo = QtGui.QComboBox()
     details = ['Daily By Month', 'Hourly by Month', 'Hourly by Day']
     for detail in details:
         self.detailCombo.addItem(detail)
     self.detailCombo.currentIndexChanged[str].connect(self.detailChanged)
     self.grid.addWidget(self.detailCombo, row, 1)
     self.msg = QtGui.QLabel('')
     self.grid.addWidget(self.msg, row, 2, 1, 2)
     row += 1
     self.grid.addWidget(QtGui.QLabel('Non-zero minimum:'), row, 0)
     self.nonzero = QtGui.QCheckBox()
     self.nonzero.setCheckState(QtCore.Qt.Unchecked)
     self.grid.addWidget(self.nonzero, row, 1)
     self.grid.addWidget(QtGui.QLabel('Set non-zero minimum for all but temperature'), row, 2, 1, 2)
     row += 1
     self.grid.addWidget(QtGui.QLabel('Solar Folder:'), row, 0)
     self.source = ClickableQLabel()
     self.source.setText(self.solarfiles)
     self.source.setFrameStyle(6)
     self.connect(self.source, QtCore.SIGNAL('clicked()'), self.dirChanged)
     self.grid.addWidget(self.source, row, 1, 1, 3)
     row += 1
     self.grid.addWidget(QtGui.QLabel('Wind Folder:'), row, 0)
     self.wsource = ClickableQLabel()
     self.wsource.setText(self.windfiles)
     self.wsource.setFrameStyle(6)
     self.connect(self.wsource, QtCore.SIGNAL('clicked()'), self.wdirChanged)
     self.grid.addWidget(self.wsource, row, 1, 1, 3)
     if self.do_rain:
         row += 1
         self.grid.addWidget(QtGui.QLabel('Rain Folder:'), row, 0)
         self.rsource = ClickableQLabel()
         self.rsource.setText(self.rainfiles)
         self.rsource.setFrameStyle(6)
         self.connect(self.rsource, QtCore.SIGNAL('clicked()'), self.rdirChanged)
         self.grid.addWidget(self.rsource, row, 1, 1, 3)
     row += 1
     self.grid.addWidget(QtGui.QLabel('Resource File:'), row, 0)
     self.target = ClickableQLabel()
     self.target.setText(self.resource_grid)
     self.target.setFrameStyle(6)
     self.connect(self.target, QtCore.SIGNAL('clicked()'), self.tgtChanged)
     self.grid.addWidget(self.target, row, 1, 1, 3)
     row += 1
     self.grid.addWidget(QtGui.QLabel('Properties:'), row, 0)
     self.properties = QtGui.QPlainTextEdit()
     self.properties.setMaximumHeight(self.yearCombo.sizeHint().height())
     self.properties.setReadOnly(True)
     self.grid.addWidget(self.properties, row, 1, 1, 3)
     self.log = QtGui.QLabel(' ')
     row += 1
     self.grid.addWidget(self.log, row, 1, 1, 3)
     quit = QtGui.QPushButton('Quit', self)
     row += 1
     self.grid.addWidget(quit, row, 0)
     quit.clicked.connect(self.quitClicked)
     QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     dofile = QtGui.QPushButton('Produce Resource File', self)
     self.grid.addWidget(dofile, row, 1)
     dofile.clicked.connect(self.dofileClicked)
     help = QtGui.QPushButton('Help', self)
  #    help.setMaximumWidth(wdth)
     self.grid.addWidget(help, row, 2)
     help.clicked.connect(self.helpClicked)
     QtGui.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     self.grid.setColumnStretch(3, 5)
     frame = QtGui.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtGui.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtGui.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     self.setWindowTitle('SIREN - makegrid (' + fileVersion() + ') - Make resource grid file')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.center()
     self.resize(int(self.sizeHint().width()* 1.07), int(self.sizeHint().height() * 1.07))
     self.show()
示例#13
0
 def helpClicked(self):
     dialog = displayobject.AnObject(QtGui.QDialog(), self.help,
              title='Help for makerainfall2 (' + fileVersion() + ')', section='merrar')
     dialog.exec_()
示例#14
0
 def initUI(self):
     self.yearSpin = QtGui.QSpinBox()
     now = datetime.datetime.now()
     self.yearSpin.setRange(1979, now.year)
     self.yearSpin.setValue(now.year - 1)
     self.zoneCombo = QtGui.QComboBox()
     self.zoneCombo.addItem('Auto')
     for i in range(-12, 13):
         self.zoneCombo.addItem(str(i))
     self.zoneCombo.currentIndexChanged[str].connect(self.zoneChanged)
     self.zone_lon = QtGui.QLabel(('Time zone calculated from MERRA data'))
     self.grid = QtGui.QGridLayout()
     self.grid.addWidget(QtGui.QLabel('Year:'), 0, 0)
     self.grid.addWidget(self.yearSpin, 0, 1)
     self.grid.addWidget(QtGui.QLabel('Time Zone:'), 1, 0)
     self.grid.addWidget(self.zoneCombo, 1, 1)
     self.grid.addWidget(self.zone_lon, 1, 2, 1, 3)
     self.grid.addWidget(QtGui.QLabel('Rainfall File Format:'), 2, 0)
     self.fmatcombo = QtGui.QComboBox(self)
     self.fmats = ['any', 'flx', 'lnd', 'mld']
     for i in range(len(self.fmats)):
         self.fmatcombo.addItem(self.fmats[i])
     self.fmatcombo.setCurrentIndex(0)
     self.grid.addWidget(self.fmatcombo, 2, 1)
     self.grid.addWidget(QtGui.QLabel('Coordinates:'), 3, 0)
     self.coords = QtGui.QPlainTextEdit()
     self.grid.addWidget(self.coords, 3, 1, 1, 3)
     self.grid.addWidget(QtGui.QLabel('Copy folder down:'), 4, 0)
     self.checkbox = QtGui.QCheckBox()
     self.checkbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.checkbox, 4, 1)
     self.grid.addWidget(QtGui.QLabel('If checked will copy rainfall folder changes down to others'), 4, 3)
     cur_dir = os.getcwd()
     self.dir_labels = ['Rainfall Source', 'Target']
     self.dirs = [None, None, None]
     for i in range(2):
         self.grid.addWidget(QtGui.QLabel(self.dir_labels[i] + ' Folder:'), 5 + i, 0)
         self.dirs[i] = ClickableQLabel()
         self.dirs[i].setText(cur_dir)
         self.dirs[i].setFrameStyle(6)
         self.connect(self.dirs[i], QtCore.SIGNAL('clicked()'), self.dirChanged)
         self.grid.addWidget(self.dirs[i], 5 + i, 1, 1, 3)
     quit = QtGui.QPushButton('Quit', self)
     self.grid.addWidget(quit, 8, 0)
     quit.clicked.connect(self.quitClicked)
     QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     dorain = QtGui.QPushButton('Produce Rainfall Files', self)
     wdth = dorain.fontMetrics().boundingRect(dorain.text()).width() + 9
     self.grid.addWidget(dorain, 8, 1)
     dorain.clicked.connect(self.dorainClicked)
     help = QtGui.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, 8, 2)
     help.clicked.connect(self.helpClicked)
     QtGui.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     info = QtGui.QPushButton('File Info', self)
     info.setMaximumWidth(wdth)
     self.grid.addWidget(info, 8, 3)
     info.clicked.connect(self.infoClicked)
   #   self.grid.setColumnStretch(4, 2)
     frame = QtGui.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtGui.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtGui.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     self.setWindowTitle('SIREN - makerainfall2 (' + fileVersion() + ') - Make rainfall files from MERRA data')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.center()
     self.resize(int(self.sizeHint().width()* 1.07), int(self.sizeHint().height() * 1.07))
     self.show()
示例#15
0
 def helpClicked(self):
     dialog = displayobject.AnObject(QtGui.QDialog(), self.help,
              title='Help for updateswis (' + fileVersion() + ')', section='updateswis')
     dialog.exec_()
示例#16
0
 def initUI(self):
     config = ConfigParser.RawConfigParser()
     if len(sys.argv) > 1:
         config_file = sys.argv[1]
     else:
         config_file = 'SIREN.ini'
     config.read(config_file)
     try:
         self.base_year = config.get('Base', 'year')
     except:
         self.base_year = '2012'
     self.yrndx = -1
     this_year = time.strftime('%Y')
     try:
         self.years = []
         years = config.get('Base', 'years')
         bits = years.split(',')
         for i in range(len(bits)):
             rngs = bits[i].split('-')
             if len(rngs) > 1:
                 for j in range(int(rngs[0].strip()), int(rngs[1].strip()) + 1):
                     if str(j) == self.base_year:
                         self.yrndx = len(self.years)
                     self.years.append(str(j))
             else:
                 if rngs[0].strip() == self.base_year:
                     self.yrndx = len(self.years)
                 self.years.append(rngs[0].strip())
         if this_year not in self.years:
             self.years.append(this_year)
     except:
         if self.base_year != this_year:
             self.years = [self.base_year, this_year]
         else:
             self.years = self.base_year
         self.yrndx = 0
     if self.yrndx < 0:
         self.yrndx = len(self.years)
         self.years.append(self.base_year)
     parents = []
     try:
         parents = getParents(config.items('Parents'))
     except:
         pass
     self.grid_stations = ''
     try:
         fac_file = config.get('Files', 'grid_stations')
         for key, value in parents:
             fac_file = fac_file.replace(key, value)
         fac_file = fac_file.replace('$USER$', getUser())
         fac_file = fac_file.replace('$YEAR$', self.base_year)
         self.grid_stations = fac_file
     except:
         pass
     self.load_file = ''
     try:
         fac_file = config.get('Files', 'load')
         for key, value in parents:
             fac_file = fac_file.replace(key, value)
         fac_file = fac_file.replace('$USER$', getUser())
         fac_file = fac_file.replace('$YEAR$', self.base_year)
         self.load_file = fac_file
     except:
         pass
     my_config = ConfigParser.RawConfigParser()
     my_config_file = 'getfiles.ini'
     my_config.read(my_config_file)
     try:
         aemo_facilities = my_config.get('updateswis', 'aemo_facilities')
     except:
         aemo_facilities = '/datafiles/facilities/facilities.csv'
     try:
         aemo_load = my_config.get('updateswis', 'aemo_load')
     except:
         aemo_load = '/datafiles/load-summary/load-summary-$YEAR$.csv'
     aemo_load = aemo_load.replace('$YEAR$', self.base_year)
     try:
         aemo_url = my_config.get('updateswis', 'aemo_url')
     except:
         aemo_url = 'data.wa.aemo.com.au'
     self.grid = QtGui.QGridLayout()
     self.grid.addWidget(QtGui.QLabel('Host site:'), 0, 0)
     self.host = QtGui.QLineEdit()
     self.host.setText(aemo_url)
     self.grid.addWidget(self.host, 0, 1, 1, 2)
     self.grid.addWidget(QtGui.QLabel('Existing Stations (Facilities)'), 1, 0, 1, 2)
     self.grid.addWidget(QtGui.QLabel('File location:'), 2, 0)
     self.url = QtGui.QLineEdit()
     self.url.setText(aemo_facilities)
     self.grid.addWidget(self.url, 2, 1, 1, 2)
     self.grid.addWidget(QtGui.QLabel('Target file:'), 3, 0)
     self.target = ClickableQLabel()
     self.target.setText(self.grid_stations)
     self.target.setFrameStyle(6)
     self.connect(self.target, QtCore.SIGNAL('clicked()'), self.tgtChanged)
     self.grid.addWidget(self.target, 3, 1, 1, 4)
     self.grid.addWidget(QtGui.QLabel('Excel file:'), 4, 0)
     self.excel = ClickableQLabel()
     self.excel.setText('')
     self.excel.setFrameStyle(6)
     self.connect(self.excel, QtCore.SIGNAL('clicked()'), self.excelChanged)
     self.grid.addWidget(self.excel, 4, 1, 1, 3)
     self.grid.addWidget(QtGui.QLabel('Keep deleted:'), 5, 0)
     self.keepbox = QtGui.QCheckBox()
     self.keepbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.keepbox, 5, 1)
     self.grid.addWidget(QtGui.QLabel('If checked will retain deleted facilities'), 5, 2, 1, 3)
     self.grid.addWidget(QtGui.QLabel('System Load'), 6, 0)
     self.grid.addWidget(QtGui.QLabel('Year:'), 7, 0)
     self.yearCombo = QtGui.QComboBox()
     for i in range(len(self.years)):
         self.yearCombo.addItem(self.years[i])
     self.yearCombo.setCurrentIndex(self.yrndx)
     self.yearCombo.currentIndexChanged[str].connect(self.yearChanged)
     self.grid.addWidget(self.yearCombo, 7, 1)
     self.grid.addWidget(QtGui.QLabel('Wrap to prior year:'), 8, 0)
     self.wrapbox = QtGui.QCheckBox()
     self.wrapbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.wrapbox, 8, 1)
     self.grid.addWidget(QtGui.QLabel('If checked will wrap back to prior year'), 8, 2, 1, 3)
     self.grid.addWidget(QtGui.QLabel('Load file location:'), 9, 0)
     self.lurl = QtGui.QLineEdit()
     self.lurl.setText(aemo_load)
     self.grid.addWidget(self.lurl, 9, 1, 1, 3)
     self.grid.addWidget(QtGui.QLabel('Target load file:'), 10, 0)
     self.targetl = ClickableQLabel()
     self.targetl.setText(self.load_file)
     self.targetl.setFrameStyle(6)
     self.connect(self.targetl, QtCore.SIGNAL('clicked()'), self.tgtlChanged)
     self.grid.addWidget(self.targetl, 10, 1, 1, 4)
     self.log = QtGui.QLabel(' ')
     self.grid.addWidget(self.log, 11, 1, 1, 3)
     quit = QtGui.QPushButton('Quit', self)
     wdth = quit.fontMetrics().boundingRect(quit.text()).width() + 29
     self.grid.addWidget(quit, 12, 0)
     quit.clicked.connect(self.quitClicked)
     QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     dofile = QtGui.QPushButton('Update Existing Stations', self)
     self.grid.addWidget(dofile, 12, 1)
     dofile.clicked.connect(self.dofileClicked)
     dofilel = QtGui.QPushButton('Update Load file', self)
     self.grid.addWidget(dofilel, 12, 2)
     dofilel.clicked.connect(self.dofilelClicked)
     help = QtGui.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, 12, 3)
     help.clicked.connect(self.helpClicked)
     QtGui.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     self.grid.setColumnStretch(3, 5)
     frame = QtGui.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtGui.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtGui.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     self.setWindowTitle('SIREN - updateswis (' + fileVersion() + ') - Update SWIS Data')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.center()
     self.resize(int(self.sizeHint().width()* 1.07), int(self.sizeHint().height() * 1.07))
     self.show()
示例#17
0
 def __init__(self, help='help.html'):
     super(FlexiPlot, self).__init__()
     self.help = help
     config = configparser.RawConfigParser()
     if len(sys.argv) > 1:
         self.config_file = sys.argv[1]
     else:
         self.config_file = getModelFile('flexiplot.ini')
     config.read(self.config_file)
     if not config.has_section('Flexiplot'):  # new file set windows section
         self.restorewindows = True
     else:
         self.restorewindows = False
     try:
         rw = config.get('Windows', 'restorewindows')
         if rw.lower() in ['true', 'yes', 'on']:
             self.restorewindows = True
     except:
         pass
     parents = []
     self.colours = {}
     try:
         parents = getParents(config.items('Parents'))
     except:
         pass
     try:
         base_year = config.get('Base', 'year')
     except:
         base_year = '2012'
     try:
         scenario_prefix = config.get('Files', 'scenario_prefix')
     except:
         scenario_prefix = ''
     try:
         self.scenarios = config.get('Files', 'scenarios')
         if scenario_prefix != '':
             self.scenarios += '/' + scenario_prefix
         for key, value in parents:
             self.scenarios = self.scenarios.replace(key, value)
         self.scenarios = self.scenarios.replace('$USER$', getUser())
         self.scenarios = self.scenarios.replace('$YEAR$', base_year)
         self.scenarios = self.scenarios[:self.scenarios.rfind('/') + 1]
         if self.scenarios[:3] == '../':
             ups = self.scenarios.split('../')
             me = os.getcwd().split(os.sep)
             me = me[:-(len(ups) - 1)]
             me.append(ups[-1])
             self.scenarios = '/'.join(me)
     except:
         self.scenarios = ''
     try:
         colours = config.items('Plot Colors')
         for item, colour in colours:
             itm = item.replace('_', ' ')
             self.colours[itm] = colour
     except:
         pass
     ifile = ''
     isheet = ''
     columns = []
     self.setup = [False, False]
     self.details = True
     self.book = None
     self.rows = None
     self.leapyear = False
     iper = '<none>'
     imax = 0
     self.alpha = 0.25
     self.title_font = 'size=x-large'  #'size=15'
     self.label_font = ''  #'size=x-large'
     self.legend_font = ''  #'size=x-large'
     self.ticks_font = ''  #'size=large'
     self.constrained_layout = False
     self.series = []
     self.xvalues = []
     self.palette = True
     self.history = None
     self.max_files = 10
     ifiles = self.get_flex_config()
     if len(ifiles) > 0:
         if self.history is None:
             self.history = sorted(ifiles.keys(), reverse=True)
         while ifile == '' and len(self.history) > 0:
             try:
                 ifile = ifiles[self.history[0]]
             except:
                 self.history.pop(0)
     matplotlib.rcParams['savefig.directory'] = os.getcwd()
     self.grid = QtWidgets.QGridLayout()
     self.updated = False
     self.colours_updated = False
     self.log = QtWidgets.QLabel('')
     rw = 0
     self.grid.addWidget(QtWidgets.QLabel('Recent Files:'), rw, 0)
     self.files = QtWidgets.QComboBox()
     if ifile != '':
         self.popfileslist(ifile, ifiles)
     self.grid.addWidget(self.files, rw, 1, 1, 5)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('File:'), rw, 0)
     self.file = ClickableQLabel()
     self.file.setStyleSheet(
         "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
     )
     self.file.setText('')
     self.grid.addWidget(self.file, rw, 1, 1, 5)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Sheet:'), rw, 0)
     self.sheet = QtWidgets.QComboBox()
     self.grid.addWidget(self.sheet, rw, 1, 1, 2)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Title:'), rw, 0)
     self.title = QtWidgets.QLineEdit('')
     self.grid.addWidget(self.title, rw, 1, 1, 2)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Series:'), rw, 0)
     self.seriesi = CustomCombo()
     for series in self.series:
         self.seriesi.addItem(series)
     self.seriesi.setEditable(True)
     self.grid.addWidget(self.seriesi, rw, 1, 1, 2)
     self.grid.addWidget(
         QtWidgets.QLabel(
             '(Cells for Series Categories; A1:B2 or r1,c1,r2,c2 format)'),
         rw, 3, 1, 2)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Series Label:'), rw, 0)
     self.ylabel = QtWidgets.QLineEdit('')
     self.grid.addWidget(self.ylabel, rw, 1, 1, 2)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('X Values:'), rw, 0)
     self.xvaluesi = CustomCombo()
     for xvalues in self.xvalues:
         self.xvaluesi.addItem(xvalues)
     self.xvaluesi.setEditable(True)
     self.grid.addWidget(self.xvaluesi, rw, 1, 1, 2)
     self.grid.addWidget(
         QtWidgets.QLabel(
             '(Cells for X values; A1:B2 or r1,c1,r2,c2 format)'), rw, 3, 1,
         2)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('X Label:'), rw, 0)
     self.xlabel = QtWidgets.QLineEdit('')
     self.grid.addWidget(self.xlabel, rw, 1, 1, 2)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Maximum:'), rw, 0)
     self.maxSpin = QtWidgets.QSpinBox()
     self.maxSpin.setRange(0, 100000)
     self.maxSpin.setSingleStep(500)
     self.grid.addWidget(self.maxSpin, rw, 1)
     self.grid.addWidget(
         QtWidgets.QLabel(
             '(Handy if you want to produce a series of plots)'), rw, 3, 1,
         3)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Type of Plot:'), rw, 0)
     plots = ['Bar Chart', 'Cumulative', 'Linegraph', 'Step Plot']
     self.plottype = QtWidgets.QComboBox()
     for plot in plots:
         self.plottype.addItem(plot)
     self.grid.addWidget(self.plottype, rw, 1)  #, 1, 2)
     self.grid.addWidget(
         QtWidgets.QLabel('(Type of plot - stacked except for Linegraph)'),
         rw, 3, 1, 3)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Percentage:'), rw, 0)
     self.percentage = QtWidgets.QCheckBox()
     self.percentage.setCheckState(QtCore.Qt.Unchecked)
     self.grid.addWidget(self.percentage, rw, 1)  #, 1, 2)
     self.grid.addWidget(
         QtWidgets.QLabel('(Check for percentage distribution)'), rw, 3, 1,
         3)
     rw += 1
     self.grid.addWidget(QtWidgets.QLabel('Show Grid:'), rw, 0)
     grids = ['Both', 'Horizontal', 'Vertical', 'None']
     self.gridtype = QtWidgets.QComboBox()
     for grid in grids:
         self.gridtype.addItem(grid)
     self.grid.addWidget(self.gridtype, rw, 1)  #, 1, 2)
     self.grid.addWidget(QtWidgets.QLabel('(Choose gridlines)'), rw, 3, 1,
                         3)
     rw += 1
     self.grid.addWidget(
         QtWidgets.QLabel('Column Order:\n(move to right\nto exclude)'), rw,
         0)
     self.order = ListWidget(self)
     self.grid.addWidget(self.order, rw, 1, 1, 2)
     self.ignore = ListWidget(self)
     self.grid.addWidget(self.ignore, rw, 3, 1, 2)
     self.grid.addWidget(QtWidgets.QLabel(' '), rw, 5)
     if ifile != '':
         self.get_file_config(self.history[0])
     self.files.currentIndexChanged.connect(self.filesChanged)
     self.file.clicked.connect(self.fileChanged)
     #   self.seriesi.textChanged.connect(self.seriesChanged)
     self.seriesi.activated[str].connect(self.seriesChanged)
     self.seriesi.currentIndexChanged.connect(self.seriesChanged)
     self.xvaluesi.activated[str].connect(self.xvaluesChanged)
     self.xvaluesi.currentIndexChanged.connect(self.xvaluesChanged)
     #      self.xvalues.textChanged.connect(self.somethingChanged)
     self.files.currentIndexChanged.connect(self.seriesChanged)
     self.sheet.currentIndexChanged.connect(self.sheetChanged)
     self.title.textChanged.connect(self.somethingChanged)
     self.maxSpin.valueChanged.connect(self.somethingChanged)
     self.plottype.currentIndexChanged.connect(self.somethingChanged)
     self.gridtype.currentIndexChanged.connect(self.somethingChanged)
     self.percentage.stateChanged.connect(self.somethingChanged)
     self.order.itemSelectionChanged.connect(self.somethingChanged)
     rw += 1
     msg_palette = QtGui.QPalette()
     msg_palette.setColor(QtGui.QPalette.Foreground, QtCore.Qt.red)
     self.log.setPalette(msg_palette)
     self.grid.addWidget(self.log, rw, 1, 1, 4)
     rw += 1
     done = QtWidgets.QPushButton('Done', self)
     self.grid.addWidget(done, rw, 0)
     done.clicked.connect(self.doneClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.doneClicked)
     pp = QtWidgets.QPushButton('Plot', self)
     self.grid.addWidget(pp, rw, 1)
     pp.clicked.connect(self.ppClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('p'), self, self.ppClicked)
     cb = QtWidgets.QPushButton('Colours', self)
     self.grid.addWidget(cb, rw, 2)
     cb.clicked.connect(self.editColours)
     ep = QtWidgets.QPushButton('Preferences', self)
     self.grid.addWidget(ep, rw, 3)
     ep.clicked.connect(self.editIniFile)
     help = QtWidgets.QPushButton('Help', self)
     self.grid.addWidget(help, rw, 4)
     help.clicked.connect(self.helpClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     frame = QtWidgets.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtWidgets.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtWidgets.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     self.setWindowTitle('SIREN - flexiplot (' + fileVersion() +
                         ') - FlexiPlot')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     if self.restorewindows:
         try:
             rw = config.get('Windows', 'flexiplot_size').split(',')
             self.resize(int(rw[0]), int(rw[1]))
             mp = config.get('Windows', 'flexiplot_pos').split(',')
             self.move(int(mp[0]), int(mp[1]))
         except:
             pass
     else:
         self.center()
         self.resize(int(self.sizeHint().width() * 1.2),
                     int(self.sizeHint().height() * 1.2))
     self.log.setText('Preferences file: ' + self.config_file)
     self.show()
示例#18
0
   def __init__(self, help='help.html'):
       super(getMap, self).__init__()
       self.help = help
       self.ignore = False
       self.worldwindow = None
       self.northSpin = QtGui.QDoubleSpinBox()
       self.northSpin.setDecimals(3)
       self.northSpin.setSingleStep(.5)
       self.northSpin.setRange(-85.06, 85.06)
       self.westSpin = QtGui.QDoubleSpinBox()
       self.westSpin.setDecimals(3)
       self.westSpin.setSingleStep(.5)
       self.westSpin.setRange(-180, 180)
       self.southSpin = QtGui.QDoubleSpinBox()
       self.southSpin.setDecimals(3)
       self.southSpin.setSingleStep(.5)
       self.southSpin.setRange(-85.06, 85.06)
       self.eastSpin = QtGui.QDoubleSpinBox()
       self.eastSpin.setDecimals(3)
       self.eastSpin.setSingleStep(.5)
       self.eastSpin.setRange(-180, 180)
       if len(sys.argv) > 1:
           his_config_file = sys.argv[1]
           his_config = ConfigParser.RawConfigParser()
           his_config.read(his_config_file)
           try:
               mapp = his_config.get('Map', 'map_choice')
           except:
               mapp = ''
           try:
                upper_left = his_config.get('Map', 'upper_left' + mapp).split(',')
                self.northSpin.setValue(float(upper_left[0].strip()))
                self.westSpin.setValue(float(upper_left[1].strip()))
                lower_right = his_config.get('Map', 'lower_right' + mapp).split(',')
                self.southSpin.setValue(float(lower_right[0].strip()))
                self.eastSpin.setValue(float(lower_right[1].strip()))
           except:
                try:
                    lower_left = his_config.get('Map', 'lower_left' + mapp).split(',')
                    upper_right = his_config.get('Map', 'upper_right' + mapp).split(',')
                    self.northSpin.setValue(float(upper_right[0].strip()))
                    self.westSpin.setValue(float(lower_left[1].strip()))
                    self.southSpin.setValue(float(lower_left[0].strip()))
                    self.eastSpin.setValue(float(upper_right[1].strip()))
                except:
                    pass
       self.northSpin.valueChanged.connect(self.showArea)
       self.westSpin.valueChanged.connect(self.showArea)
       self.southSpin.valueChanged.connect(self.showArea)
       self.eastSpin.valueChanged.connect(self.showArea)
       self.grid = QtGui.QGridLayout()
       self.grid.addWidget(QtGui.QLabel('Area of Interest:'), 0, 0)
       area = QtGui.QPushButton('Choose area via Map', self)
       self.grid.addWidget(area, 0, 1, 1, 2)
       area.clicked.connect(self.areaClicked)
       self.grid.addWidget(QtGui.QLabel('Upper left:'), 1, 0)
       self.grid.addWidget(QtGui.QLabel('  North'), 2, 0)
       self.grid.addWidget(self.northSpin, 2, 1)
       self.grid.addWidget(QtGui.QLabel('  West'), 3, 0)
       self.grid.addWidget(self.westSpin, 3, 1)
       self.grid.addWidget(QtGui.QLabel('Lower right:'), 1, 2)
       self.grid.addWidget(QtGui.QLabel('  South'), 2, 2)
       self.grid.addWidget(self.southSpin, 2, 3)
       self.grid.addWidget(QtGui.QLabel('  East'), 3, 2)
       self.grid.addWidget(self.eastSpin, 3, 3)
       self.grid.addWidget(QtGui.QLabel('Approx. area:'), 4, 0)
       self.approx_area = QtGui.QLabel('')
       self.grid.addWidget(self.approx_area, 4, 1)
       zoom = QtGui.QLabel('Map Scale (Zoom):')
       self.zoomSpin = QtGui.QSpinBox()
       self.zoomSpin.setValue(6)
       config_file = 'getfiles.ini'
       config = ConfigParser.RawConfigParser()
       config.read(config_file)
       try:
           maxz = int(config.get('getmap', 'max_zoom'))
       except:
           maxz = 11
       self.zoomSpin.setRange(0, maxz)
       self.zoomSpin.valueChanged[str].connect(self.zoomChanged)
       self.zoomScale = QtGui.QLabel('(' + scale[6] + ')')
       self.grid.addWidget(zoom, 5, 0)
       self.grid.addWidget(self.zoomSpin, 5, 1)
       self.grid.addWidget(self.zoomScale, 5, 2)
       self.grid.addWidget(QtGui.QLabel('URL template:'), 6, 0)
       self.urltemplate = QtGui.QLineEdit()
       config_file = 'getfiles.ini'
       config = ConfigParser.RawConfigParser()
       config.read(config_file)
       try:
           url = his_config.get('getmap', 'url_template')
       except:
           url = 'http://[abc].tile.openstreetmap.org/zoom/x/y.png'
       self.urltemplate.setText(url)
       self.grid.addWidget(self.urltemplate, 6, 1, 1, 5)
       self.grid.addWidget(QtGui.QLabel('Image Width:'), 7, 0)
       self.widthSpin = QtGui.QSpinBox()
       self.widthSpin.setSingleStep(50)
       self.widthSpin.setRange(50, 3840)
       self.widthSpin.setValue(400)
       self.grid.addWidget(self.widthSpin, 7, 1)
       hlabel = QtGui.QLabel('Image Height:   ')
       hlabel.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
       self.grid.addWidget(hlabel, 7, 2)
       self.heightSpin = QtGui.QSpinBox()
       self.heightSpin.setSingleStep(50)
       self.heightSpin.setRange(50, 3840)
       self.heightSpin.setValue(200)
       self.grid.addWidget(self.heightSpin, 7, 3)
       self.grid.addWidget(QtGui.QLabel('Image File name:'), 8, 0)
       cur_dir = os.getcwd()
       self.filename = ClickableQLabel()
       self.filename.setText(cur_dir + '/untitled.png')
       self.filename.setFrameStyle(6)
       self.connect(self.filename, QtCore.SIGNAL('clicked()'), self.fileChanged)
       self.grid.addWidget(self.filename, 8, 1, 1, 5)
       self.grid.addWidget(QtGui.QLabel('Properties:'), 9, 0)
       self.properties = QtGui.QPlainTextEdit()
       self.properties.setMaximumHeight(self.northSpin.sizeHint().height() * 4.5)
       self.properties.setReadOnly(True)
       self.grid.addWidget(self.properties, 9, 1, 3, 5)
       self.log = QtGui.QLabel()
       self.grid.addWidget(self.log, 14, 1, 3, 5)
       self.progressbar = QtGui.QProgressBar()
       self.progressbar.setMinimum(0)
       self.progressbar.setMaximum(100)
       self.progressbar.setValue(0)
       self.progressbar.setStyleSheet('QProgressBar {border: 1px solid grey; border-radius: 2px; text-align: center;}' \
                                      + 'QProgressBar::chunk { background-color: #6891c6;}')
       self.grid.addWidget(self.progressbar, 17, 1, 1, 5)
       self.progressbar.setHidden(True)
       self.progresslabel=QtGui.QLabel('')
       self.grid.addWidget(self.progresslabel, 17, 1, 1, 2)
       self.progresslabel.setHidden(True)
       quit = QtGui.QPushButton('Quit', self)
       self.grid.addWidget(quit, 18, 0)
       quit.clicked.connect(self.quitClicked)
       QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
       query = QtGui.QPushButton('Query Map', self)
       wdth = query.fontMetrics().boundingRect(query.text()).width() + 9
       self.grid.addWidget(query, 18, 1)
       query.clicked.connect(self.queryClicked)
       make = QtGui.QPushButton('Get Map', self)
       make.setMaximumWidth(wdth)
       self.grid.addWidget(make, 18, 2)
       make.clicked.connect(self.makeClicked)
       mapquest = QtGui.QPushButton('MapQuest', self)
       mapquest.setMaximumWidth(wdth)
       self.grid.addWidget(mapquest, 18, 3)
       mapquest.clicked.connect(self.mapquestClicked)
       help = QtGui.QPushButton('Help', self)
       help.setMaximumWidth(wdth)
       self.grid.addWidget(help, 18, 4)
       help.clicked.connect(self.helpClicked)
       QtGui.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
       frame = QtGui.QFrame()
       frame.setLayout(self.grid)
       self.scroll = QtGui.QScrollArea()
       self.scroll.setWidgetResizable(True)
       self.scroll.setWidget(frame)
       self.layout = QtGui.QVBoxLayout(self)
       self.layout.addWidget(self.scroll)
 #      self.resize(self.width() + int(self.world_width * .7), self.height() + int(self.world_height * .7))
       self.setWindowTitle('SIREN - getmap (' + fileVersion() + ") - Make Map from OSM or MapQuest")
       self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
       self.center()
       self.resize(int(self.sizeHint().width()* 1.27), int(self.sizeHint().height() * 1.1))
       self.show()
示例#19
0
 def initUI(self):
     label = []
     self.edit = []
     self.field_type = []
     metrics = []
     widths = [0, 0]
     heights = 0
     i = -1
     grid = QtGui.QGridLayout()
     if isinstance(self.anobject, str):
         self.web = QtGui.QTextEdit()
         if os.path.exists(self.anobject):
             htf = open(self.anobject, 'r')
             html = htf.read()
             htf.close()
             if self.anobject[-5:].lower() == '.html' or \
                self.anobject[-4:].lower() == '.htm' or \
                html[:5] == '<html':
                 html = html.replace('[VERSION]', credits.fileVersion())
                 if self.section is not None:
                     line = html.split('\n')
                     html = ''
                     for i in range(len(line)):
                         html += line[i] + '\n'
                         if line[i].strip() == '<body>':
                            break
                     for i in range(i, len(line)):
                         if line[i][:2] == '<h':
                             if line[i].find('id="' + self.section + '"') > 0:
                                 break
                     for i in range(i, len(line)):
                         if line[i].find('Back to top<') > 0:
                             break
                         j = line[i].find(' (see <a href=')
                         if j > 0:
                             k = line[i].find('</a>)', j)
                             line[i] = line[i][:j] + line[i][k + 5:]
                         html += line[i] + '\n'
                     for i in range(i, len(line)):
                         if line[i].strip() == '</body>':
                             break
                     for i in range(i, len(line)):
                         html += line[i] + '\n'
                 self.web.setHtml(QtCore.QString(html))
             else:
                 self.web.setPlainText(QtCore.QString(html))
         else:
             html = self.anobject
             if self.anobject[:5] == '<html':
                 self.anobject = self.anobject.replace('[VERSION]', credits.fileVersion())
                 self.web.setHtml(QtCore.QString(self.anobject))
             else:
                 self.web.setPlainText(QtCore.QString(self.anobject))
         metrics.append(self.web.fontMetrics())
         try:
             widths[0] = metrics[0].boundingRect(self.web.text()).width()
             heights = metrics[0].boundingRect(self.web.text()).height()
         except:
             bits = html.split('\n')
             for lin in bits:
                 if len(lin) > widths[0]:
                     widths[0] = len(lin)
             heights = len(bits)
             fnt = self.web.fontMetrics()
             widths[0] = (widths[0]) * fnt.maxWidth()
             heights = (heights) * fnt.height()
             screen = QtGui.QDesktopWidget().availableGeometry()
             if widths[0] > screen.width() * .67:
                 heights = int(heights / .67)
                 widths[0] = int(screen.width() * .67)
         if self.readonly:
             self.web.setReadOnly(True)
         i = 1
         grid.addWidget(self.web, 0, 0)
         self.set_stuff(grid, widths, heights, i)
     elif isinstance(self.anobject, dict):
         if self.textedit:
             self.keys = []
             for key, value in self.anobject.iteritems():
                 self.field_type.append('str')
                 label.append(QtGui.QLabel(key + ':'))
                 self.keys.append(key)
                 self.edit.append(QtGui.QTextEdit())
                 self.edit[-1].setPlainText(value)
              #   print '(160)', key, self.edit[-1].document().blockCount()
                 if i < 0:
                     metrics.append(label[-1].fontMetrics())
                     metrics.append(self.edit[-1].fontMetrics())
                 bits = value.split('\n')
                 ln = 0
                 for lin in bits:
                     if len(lin) > ln:
                         ln = len(lin)
                 ln2 = len(bits)
                 ln = (ln + 5) * metrics[0].maxWidth()
                 ln2 = (ln2 + 4) * metrics[0].height()
                 self.edit[-1].resize(ln, ln2)
                 if metrics[0].boundingRect(label[-1].text()).width() > widths[0]:
                     widths[0] = metrics[0].boundingRect(label[-1].text()).width()
                 try:
                     if metrics[1].boundingRect(self.edit[-1].text()).width() > widths[1]:
                         widths[1] = metrics[1].boundingRect(self.edit[-1].text()).width()
                 except:
                     widths[1] = ln
                 for j in range(2):
                     try:
                         if metrics[j].boundingRect(label[-1].text()).height() > heights:
                             heights = metrics[j].boundingRect(label[-1].text()).height()
                     except:
                         heights = ln2
                 if self.readonly:
                     self.edit[-1].setReadOnly(True)
                 i += 1
                 grid.addWidget(label[-1], i + 1, 0)
                 grid.addWidget(self.edit[-1], i + 1, 1)
         else:
             self.keys = []
             for key, value in self.anobject.iteritems():
                 self.field_type.append('str')
                 label.append(QtGui.QLabel(key + ':'))
                 self.keys.append(key)
                 self.edit.append(QtGui.QLineEdit())
                 self.edit[-1].setText(value)
                 if i < 0:
                     metrics.append(label[-1].fontMetrics())
                     metrics.append(self.edit[-1].fontMetrics())
                 ln = (len(value) + 5) * metrics[0].maxWidth()
                 ln2 = metrics[0].height()
                 self.edit[-1].resize(ln, ln2)
                 if metrics[0].boundingRect(label[-1].text()).width() > widths[0]:
                     widths[0] = metrics[0].boundingRect(label[-1].text()).width()
                 try:
                     if metrics[1].boundingRect(self.edit[-1].text()).width() > widths[1]:
                         widths[1] = metrics[1].boundingRect(self.edit[-1].text()).width()
                 except:
                     widths[1] = ln
                 if self.readonly:
                     self.edit[-1].setReadOnly(True)
                 i += 1
                 grid.addWidget(label[-1], i, 0)
                 grid.addWidget(self.edit[-1], i, 1)
         self.set_stuff(grid, widths, heights, i)
     else:
         units = {'area': 'sq. Km', 'capacity': 'MW', 'rotor': 'm', 'generation': 'MWh', 'grid_len': 'Km',
                  'grid_path_len': 'Km'}
         for prop in dir(self.anobject):
             if prop[:2] != '__' and prop[-2:] != '__':
                 attr = getattr(self.anobject, prop)
                 if isinstance(attr, int):
                      self.field_type.append('int')
                 elif isinstance(attr, float):
                      self.field_type.append('float')
                 else:
                      self.field_type.append('str')
                 label.append(QtGui.QLabel(prop.title() + ':'))
                 if self.field_type[-1] != "str":
                     self.edit.append(QtGui.QLineEdit(str(attr)))
                 else:
                     self.edit.append(QtGui.QLineEdit(attr))
                 if i < 0:
                     metrics.append(label[-1].fontMetrics())
                     metrics.append(self.edit[-1].fontMetrics())
                 if metrics[0].boundingRect(label[-1].text()).width() > widths[0]:
                     widths[0] = metrics[0].boundingRect(label[-1].text()).width()
                 if metrics[1].boundingRect(self.edit[-1].text()).width() > widths[1]:
                     widths[1] = metrics[1].boundingRect(self.edit[-1].text()).width()
                 for j in range(2):
                     if metrics[j].boundingRect(label[-1].text()).height() > heights:
                         heights = metrics[j].boundingRect(label[-1].text()).height()
                 if self.readonly:
                     self.edit[-1].setReadOnly(True)
                 i += 1
                 grid.addWidget(label[-1], i + 1, 0)
                 grid.addWidget(self.edit[-1], i + 1, 1)
                 if prop in units.keys():
                     grid.addWidget(QtGui.QLabel(units[prop]), i + 1, 2)
                 if prop == 'turbine':
                     i += 1
                     curve = QtGui.QPushButton('Show Power Curve', self)
                     grid.addWidget(curve, i + 1, 1)
                     curve.clicked.connect(self.curveClicked)
                     self.turbine = attr
         self.set_stuff(grid, widths, heights, i)
     QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
示例#20
0
 def helpClicked(self):
     dialog = displayobject.AnObject(QtGui.QDialog(), self.help,
              title='Help for makegrid (' + fileVersion() + ')', section='resource')
     dialog.exec_()
示例#21
0
 def initUI(self):
     if sys.platform == 'win32' or sys.platform == 'cygwin':
         ini_file = 'siren_windows_default.ini'
     else:
         ini_file = 'siren_default.ini'
     if os.path.exists(self.siren_dir + ini_file):
         ini_file = self.siren_dir + ini_file
     else:
         if not os.path.exists(ini_file):
             return
     file_sects = ['[Parents]', '[Files]', '[SAM Modules]']
     dir_props = ['pow_files', 'sam_sdk', 'scenarios', 'solar_files', 'variable_files', 'wind_files']
     field_props = ['scenario_prefix']
     inf = open(ini_file, 'r')
     lines = inf.readlines()
     inf.close()
     sections = {}
     props = []
     for line in lines:
         if line[0] == ';' or line[0] == '#':
             continue
         if line[0] == '[':
             if len(props) > 0:
                 sections[section] = props
             j = line.find(']')
             section = line[:j + 1]
             props = []
         else:
             j = line.find('=')
             if line[j + 1] == '<' or section == '[Parents]':
                 prop = line[j + 1:].lstrip('<').strip().rstrip('>')
                 props.append([line[:j], prop])
     if len(props) > 0:
         sections[section] = props
     row = 0
     self.fields = []
     self.fields.append(['section', 'typ', 'name', 'value', QtGui.QLineEdit()])
     self.grid = QtGui.QGridLayout()
     self.grid.addWidget(QtGui.QLabel('New file name:'), row, 0)
     self.fields[row][4].setText('siren_new.ini')
     self.grid.addWidget(self.fields[row][4], row, 1)
     self.fields[row][4].textChanged.connect(self.filenameChanged)
     self.msg = QtGui.QLabel('')
     self.grid.addWidget(self.msg, row, 2, 1, 3)
     now = datetime.datetime.now()
     if '[Base]' in sections.keys():
         for key, value in sections['[Base]']:
             row += 1
             self.fields.append(['[Base]', 'txt', key, value, QtGui.QLineEdit()])
             if key == 'year':
                 self.fields[-1][3] = str((now.year - 1))
             if self.fields[row][0] != self.fields[row - 1][0]:
                 self.grid.addWidget(QtGui.QLabel(self.fields[row][0]), row, 0)
             self.grid.addWidget(QtGui.QLabel(self.fields[row][2]), row, 1)
             self.fields[row][4].setText(self.fields[row][3])
             self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
     self.parents = {}
     sections['[Parents]'].append(['$USER$', getUser()])
     sections['[Parents]'].append(['$YEAR$', str((now.year - 1))])
     if '[Parents]' in sections.keys():
         for key, value in sections['[Parents]']:
             self.parents[key] = value
             row += 1
             self.fields.append(['[Parents]', '?', key, value, '?'])
             if self.fields[row][0] != self.fields[row - 1][0]:
                 self.grid.addWidget(QtGui.QLabel(self.fields[row][0]), row, 0)
             self.grid.addWidget(QtGui.QLabel(self.fields[row][2]), row, 1)
             if key == '$USER$' or key == '$YEAR$':
                 self.fields[row][1] = 'txt'
                 self.fields[row][4] = QtGui.QLabel(self.fields[row][3])
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
             else:
                 self.fields[row][1] = 'dir'
                 self.fields[row][4] = ClickableQLabel()
                 self.fields[row][4].setText(self.fields[row][3])
                 self.fields[row][4].setFrameStyle(6)
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
                 self.connect(self.fields[row][4], QtCore.SIGNAL('clicked()'), self.itemClicked)
     for section, props in iter(sections.iteritems()):
         if section == '[Base]' or section == '[Parents]':
             continue
         elif section == '[Map]':
             for prop in props:
                 row += 1
                 self.fields.append([section, '?', prop[0], prop[1], '?'])
                 if self.fields[row][0] != self.fields[row - 1][0]:
                     self.grid.addWidget(QtGui.QLabel(self.fields[row][0]), row, 0)
                 self.grid.addWidget(QtGui.QLabel(self.fields[row][2]), row, 1)
                 if prop[0] == 'map' or (prop[0][:3] == 'map' and prop[0][3] != '_'):
                     self.fields[row][3] = prop[1]
                     self.fields[row][1] = 'fil'
                     self.fields[row][4] = ClickableQLabel()
                     self.fields[row][4].setFrameStyle(6)
                     self.connect(self.fields[row][4], QtCore.SIGNAL('clicked()'), self.itemClicked)
                 else:
                     self.fields[row][1] = 'txt'
                     self.fields[row][4] = QtGui.QLineEdit()
                 self.fields[row][4].setText(self.fields[row][3])
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
         elif section in file_sects:
             for prop in props:
                 row += 1
                 self.fields.append([section, '?', prop[0], prop[1], '?'])
                 if self.fields[row][0] != self.fields[row - 1][0]:
                     self.grid.addWidget(QtGui.QLabel(self.fields[row][0]), row, 0)
                 self.grid.addWidget(QtGui.QLabel(self.fields[row][2]), row, 1)
                 self.fields[row][3] = prop[1]
                 if prop[0] in field_props:
                     self.fields[row][1] = 'txt'
                     self.fields[row][4] = QtGui.QLineEdit()
                     self.fields[row][4].setText(self.fields[row][3])
                 else:
                     if prop[0] in dir_props:
                         self.fields[row][1] = 'dir'
                     else:
                         self.fields[row][1] = 'fil'
                     self.fields[row][4] = ClickableQLabel()
                     self.fields[row][4].setText(self.fields[row][3])
                     self.fields[row][4].setFrameStyle(6)
                     self.connect(self.fields[row][4], QtCore.SIGNAL('clicked()'), self.itemClicked)
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
         else:
             for prop in props:
                 row += 1
                 self.fields.append([section, 'txt', prop[0], prop[1], QtGui.QLineEdit()])
                 if self.fields[row][0] != self.fields[row - 1][0]:
                     self.grid.addWidget(QtGui.QLabel(self.fields[row][0]), row, 0)
                 self.grid.addWidget(QtGui.QLabel(self.fields[row][2]), row, 1)
                 self.fields[row][4].setText(self.fields[row][3])
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
     row += 1
     quit = QtGui.QPushButton('Quit', self)
     self.grid.addWidget(quit, row, 0)
     quit.clicked.connect(self.quitClicked)
     QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     save = QtGui.QPushButton('Save', self)
     self.grid.addWidget(save, row, 1)
     save.clicked.connect(self.saveClicked)
     launch = QtGui.QPushButton('Save && Open', self)
     self.grid.addWidget(launch, row, 3)
     launch.clicked.connect(self.saveLaunch)
     wdth = save.fontMetrics().boundingRect(launch.text()).width() + 9
     launch.setMaximumWidth(wdth)
     edit = QtGui.QPushButton('Save && Edit', self)
     self.grid.addWidget(edit, row, 2)
     edit.clicked.connect(self.saveEdit)
     edit.setMaximumWidth(wdth)
     help = QtGui.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, row, 4)
     help.clicked.connect(self.helpClicked)
     QtGui.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     self.grid.setColumnStretch(2, 5)
     frame = QtGui.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtGui.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtGui.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     utilities = ['getmap', 'getmerra2', 'makeweather2', 'sirenupd']
     utilicon = ['map.png', 'download.png', 'weather.png', 'download.png']
     spawns = []
     icons = []
     if sys.platform == 'win32' or sys.platform == 'cygwin':
         for i in range(len(utilities)):
             if os.path.exists(utilities[i] + '.exe'):
                 spawns.append(utilities[i] + '.exe')
                 icons.append(utilicon[i])
             else:
                 if os.path.exists(utilities[i] + '.py'):
                     spawns.append(utilities[i] + '.py')
                     icons.append(utilicon[i])
     else:
         for i in range(len(utilities)):
             if os.path.exists(utilities[i] + '.py'):
                 spawns.append(utilities[i] + '.py')
                 icons.append(utilicon[i])
     if len(spawns) > 0:
         spawnitem = []
         menubar = QtGui.QMenuBar()
         spawnMenu = menubar.addMenu('&Tools')
         for i in range(len(spawns)):
             if type(spawns[i]) is list:
                 who = spawns[i][0][:spawns[i][0].find('.')]
             else:
                 who = spawns[i][:spawns[i].find('.')]
             spawnitem.append(QtGui.QAction(QtGui.QIcon(icons[i]), who, self))
             spawnitem[-1].triggered.connect(partial(self.spawn, spawns[i]))
             spawnMenu.addAction(spawnitem[-1])
         self.layout.setMenuBar(menubar)
     self.setWindowTitle('SIREN (' + fileVersion() + ') - Create Preferences file')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.show()
示例#22
0
 def __init__(self, parent, scene):
     super(WorldWindow, self).__init__(parent)
     self.get_config()
    #  self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
     self.view = WorldView(scene, self.zoom)
     self.view.scale(1., 1.)
     self._mv = self.view
     self.grid_items = None
     self.setStatusBar(QtGui.QStatusBar())
     self.connect(self.view, QtCore.SIGNAL('statusmsg'), self.setStatusText)
     w = QtGui.QWidget()
     lay = QtGui.QVBoxLayout(w)
     lay.addWidget(self.view)
     self.setCentralWidget(w)
     self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
     self.customContextMenuRequested.connect(self.popup)
     menubar = self.menuBar()
     self.showRuler = QtGui.QAction(QtGui.QIcon('blank.png'), 'Scale Ruler', self)
     self.showRuler.setShortcut('Ctrl+R')
     self.showRuler.setStatusTip('Show Scale Ruler')
     self.showRuler.triggered.connect(self.show_Ruler)
     self.showGrid = QtGui.QAction(QtGui.QIcon('blank.png'), 'Coordinates Grid', self)
     self.showGrid.setShortcut('Ctrl+G')
     self.showGrid.setStatusTip('Show Coordinates Grid')
     self.showGrid.triggered.connect(self.show_Grid)
     self.showMGrid = QtGui.QAction(QtGui.QIcon('blank.png'), 'MERRA-2 Grid', self)
     self.showMGrid.setShortcut('Ctrl+M')
     self.showMGrid.setStatusTip('Show MERRA-2 Grid')
     self.showMGrid.triggered.connect(self.show_MGrid)
     self.saveView = QtGui.QAction(QtGui.QIcon('camera.png'), 'Save View', self)
     self.saveView.setShortcut('Ctrl+V')
     self.saveView.triggered.connect(self.save_View)
     self.showMany = QtGui.QAction(QtGui.QIcon('blank.png'), 'Show many Areas', self)
     self.showMany.setShortcut('Ctrl+A')
     self.showMany.setStatusTip('Show many Areas')
     self.showMany.triggered.connect(self.show_Many)
     viewMenu = menubar.addMenu('&View')
     viewMenu.addAction(self.showRuler)
     viewMenu.addAction(self.showGrid)
     viewMenu.addAction(self.showMGrid)
     viewMenu.addAction(self.showMany)
     viewMenu.addAction(self.saveView)
     self.editIni = QtGui.QAction(QtGui.QIcon('edit.png'), 'Edit Preferences File', self)
     self.editIni.setShortcut('Ctrl+E')
     self.editIni.setStatusTip('Edit Preferences')
     self.editIni.triggered.connect(self.editIniFile)
     self.editColour = QtGui.QAction(QtGui.QIcon('rainbow-icon.png'), 'Edit Colours', self)
     self.editColour.setShortcut('Ctrl+U')
     self.editColour.setStatusTip('Edit Colours')
     self.editColour.triggered.connect(self.editColours)
     self.editSect = QtGui.QAction(QtGui.QIcon('arrow.png'), 'Edit Section', self)
     self.editSect.setStatusTip('Edit Preferences Section')
     self.editSect.triggered.connect(self.editSects)
     editMenu = menubar.addMenu('P&references')
     editMenu.addAction(self.editIni)
     editMenu.addAction(self.editColour)
     editMenu.addAction(self.editSect)
     help = QtGui.QAction(QtGui.QIcon('help.png'), 'Help', self)
     help.setShortcut('F1')
     help.setStatusTip('Help')
     help.triggered.connect(self.showHelp)
     helpMenu = menubar.addMenu('&Help')
     helpMenu.addAction(help)
     QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.exit)
     QtGui.QShortcut(QtGui.QKeySequence('x'), self, self.exit)
     self.config = ConfigParser.RawConfigParser()
     self.config_file = 'getfiles.ini'
     self.config.read(self.config_file)
     parents = []
     try:
         parents = getParents(config.items('Parents'))
     except:
         pass
     try:
         mapc = self.config.get('Map', 'map_choice')
     except:
         mapc = ''
     try:
         mapp = self.config.get('Map', 'map' + mapc)
         for pkey, pvalue in parents:
             mapp = mapp.replace(pkey, pvalue)
         mapp = mapp.replace('$USER$', getUser())
         if not os.path.exists(mapp):
             if self.floatstatus is None:
                 self.show_FloatStatus()
             self.floatstatus.emit(QtCore.SIGNAL('log'),
                 'Need to check [Map].map%s property. Resolves to %s' % (mapc, mapp))
     except:
         pass
     self.setWindowTitle('SIREN - worldwindow (' + fileVersion() + ')')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     note = QtCore.QString('Map data ' + unichr(169) + ' OpenStreetMap contributors CC-BY-SA ' +
            '(http://www.openstreetmap.org/copyright)')
     self.view.emit(QtCore.SIGNAL('statusmsg'), note)
     if not self.restorewindows:
         return
     screen = QtGui.QApplication.desktop().primaryScreen()
     scr_right = QtGui.QApplication.desktop().availableGeometry(screen).right()
     scr_bottom = QtGui.QApplication.desktop().availableGeometry(screen).bottom()
     win_width = self.sizeHint().width()
     win_height = self.sizeHint().height()
     try:
         rw = self.config.get('Windows', 'main_size').split(',')
         lst_width = int(rw[0])
         lst_height = int(rw[1])
         mp = self.config.get('Windows', 'main_pos').split(',')
         lst_left = int(mp[0])
         lst_top = int(mp[1])
         lst_right = lst_left + lst_width
         lst_bottom = lst_top + lst_height
         screen = QtGui.QApplication.desktop().screenNumber(QtCore.QPoint(lst_left, lst_top))
         scr_right = QtGui.QApplication.desktop().availableGeometry(screen).right()
         scr_left = QtGui.QApplication.desktop().availableGeometry(screen).left()
         if lst_right < scr_right:
             if (lst_right - win_width) >= scr_left:
                 scr_right = lst_right
             else:
                 scr_right = scr_left + win_width
         scr_bottom = QtGui.QApplication.desktop().availableGeometry(screen).bottom()
         scr_top = QtGui.QApplication.desktop().availableGeometry(screen).top()
         if lst_bottom < scr_bottom:
             if (lst_bottom - win_height) >= scr_top:
                 scr_bottom = lst_bottom
             else:
                 scr_bottom = scr_top + win_height
     except:
         pass
     win_left = scr_right - win_width
     win_top = scr_bottom - win_height
     self.resize(win_width, win_height)
     self.move(win_left, win_top)
示例#23
0
 def __init__(self, help='help.html'):
     super(getMap, self).__init__()
     self.help = help
     self.ignore = False
     self.worldwindow = None
     self.northSpin = QtWidgets.QDoubleSpinBox()
     self.northSpin.setDecimals(3)
     self.northSpin.setSingleStep(.5)
     self.northSpin.setRange(-85.06, 85.06)
     self.westSpin = QtWidgets.QDoubleSpinBox()
     self.westSpin.setDecimals(3)
     self.westSpin.setSingleStep(.5)
     self.westSpin.setRange(-180, 180)
     self.southSpin = QtWidgets.QDoubleSpinBox()
     self.southSpin.setDecimals(3)
     self.southSpin.setSingleStep(.5)
     self.southSpin.setRange(-85.06, 85.06)
     self.eastSpin = QtWidgets.QDoubleSpinBox()
     self.eastSpin.setDecimals(3)
     self.eastSpin.setSingleStep(.5)
     self.eastSpin.setRange(-180, 180)
     if len(sys.argv) > 1:
         his_config_file = sys.argv[1]
         his_config = configparser.RawConfigParser()
         his_config.read(his_config_file)
         try:
             mapp = his_config.get('Map', 'map_choice')
         except:
             mapp = ''
         try:
             upper_left = his_config.get('Map',
                                         'upper_left' + mapp).split(',')
             self.northSpin.setValue(float(upper_left[0].strip()))
             self.westSpin.setValue(float(upper_left[1].strip()))
             lower_right = his_config.get('Map',
                                          'lower_right' + mapp).split(',')
             self.southSpin.setValue(float(lower_right[0].strip()))
             self.eastSpin.setValue(float(lower_right[1].strip()))
         except:
             try:
                 lower_left = his_config.get('Map',
                                             'lower_left' + mapp).split(',')
                 upper_right = his_config.get('Map', 'upper_right' +
                                              mapp).split(',')
                 self.northSpin.setValue(float(upper_right[0].strip()))
                 self.westSpin.setValue(float(lower_left[1].strip()))
                 self.southSpin.setValue(float(lower_left[0].strip()))
                 self.eastSpin.setValue(float(upper_right[1].strip()))
             except:
                 pass
     self.northSpin.valueChanged.connect(self.showArea)
     self.westSpin.valueChanged.connect(self.showArea)
     self.southSpin.valueChanged.connect(self.showArea)
     self.eastSpin.valueChanged.connect(self.showArea)
     self.grid = QtWidgets.QGridLayout()
     self.grid.addWidget(QtWidgets.QLabel('Area of Interest:'), 0, 0)
     area = QtWidgets.QPushButton('Choose area via Map', self)
     self.grid.addWidget(area, 0, 1, 1, 2)
     area.clicked.connect(self.areaClicked)
     self.grid.addWidget(QtWidgets.QLabel('Upper left:'), 1, 0)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(
         QtCore.Qt.AlignRight)
     self.grid.addWidget(QtWidgets.QLabel('  North'), 2, 0)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(
         QtCore.Qt.AlignRight)
     self.grid.addWidget(self.northSpin, 2, 1)
     self.grid.addWidget(QtWidgets.QLabel('  West'), 3, 0)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(
         QtCore.Qt.AlignRight)
     self.grid.addWidget(self.westSpin, 3, 1)
     self.grid.addWidget(QtWidgets.QLabel('Lower right:'), 1, 2)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(
         QtCore.Qt.AlignRight)
     self.grid.addWidget(QtWidgets.QLabel('  South'), 2, 2)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(
         QtCore.Qt.AlignRight)
     self.grid.addWidget(self.southSpin, 2, 3)
     self.grid.addWidget(QtWidgets.QLabel('  East'), 3, 2)
     self.grid.itemAt(self.grid.count() - 1).setAlignment(
         QtCore.Qt.AlignRight)
     self.grid.addWidget(self.eastSpin, 3, 3)
     self.grid.addWidget(QtWidgets.QLabel('Approx. area:'), 4, 0)
     self.approx_area = QtWidgets.QLabel('')
     self.grid.addWidget(self.approx_area, 4, 1, 1, 2)
     zoom = QtWidgets.QLabel('Map Scale (Zoom):')
     self.zoomSpin = QtWidgets.QSpinBox()
     self.zoomSpin.setValue(6)
     config_file = 'getfiles.ini'
     config = configparser.RawConfigParser()
     config.read(config_file)
     try:
         maxz = int(config.get('getmap', 'max_zoom'))
     except:
         maxz = 11
     self.zoomSpin.setRange(0, maxz)
     self.zoomSpin.valueChanged[str].connect(self.zoomChanged)
     self.zoomScale = QtWidgets.QLabel('(' + scale[6] + ')')
     self.grid.addWidget(zoom, 5, 0)
     self.grid.addWidget(self.zoomSpin, 5, 1)
     self.grid.addWidget(self.zoomScale, 5, 2, 1, 2)
     self.grid.addWidget(QtWidgets.QLabel('URL template:'), 6, 0)
     self.urltemplate = QtWidgets.QLineEdit()
     config_file = 'getfiles.ini'
     config = configparser.RawConfigParser()
     config.read(config_file)
     try:
         url = his_config.get('getmap', 'url_template')
     except:
         url = 'https://[abc].tile.openstreetmap.org/zoom/x/y.png'
     self.urltemplate.setText(url)
     self.grid.addWidget(self.urltemplate, 6, 1, 1, 5)
     self.grid.addWidget(QtWidgets.QLabel('Image Width:'), 7, 0)
     self.widthSpin = QtWidgets.QSpinBox()
     self.widthSpin.setSingleStep(50)
     self.widthSpin.setRange(50, 3840)
     self.widthSpin.setValue(400)
     self.grid.addWidget(self.widthSpin, 7, 1)
     hlabel = QtWidgets.QLabel('Image Height:   ')
     hlabel.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
     self.grid.addWidget(hlabel, 7, 2)
     self.heightSpin = QtWidgets.QSpinBox()
     self.heightSpin.setSingleStep(50)
     self.heightSpin.setRange(50, 3840)
     self.heightSpin.setValue(200)
     self.grid.addWidget(self.heightSpin, 7, 3)
     adate = QtWidgets.QDateEdit()
     dw = adate.minimumSizeHint().width()
     sw = self.northSpin.minimumSizeHint().width()
     if sw > dw:  # fix for wide QDoubleSpinBox width in Windows
         self.northSpin.setMinimumWidth(adate.minimumSizeHint().width())
         self.westSpin.setMinimumWidth(adate.minimumSizeHint().width())
         self.southSpin.setMinimumWidth(adate.minimumSizeHint().width())
         self.eastSpin.setMinimumWidth(adate.minimumSizeHint().width())
     sw = self.heightSpin.minimumSizeHint().width()
     if sw > dw:  # fix for wide QSpinBox width in Windows
         self.zoomSpin.setMinimumWidth(adate.minimumSizeHint().width())
         self.widthSpin.setMinimumWidth(adate.minimumSizeHint().width())
         self.heightSpin.setMinimumWidth(adate.minimumSizeHint().width())
     del adate
     self.grid.addWidget(QtWidgets.QLabel('Image File name:'), 8, 0)
     cur_dir = os.getcwd()
     self.filename = ClickableQLabel()
     self.filename.setStyleSheet(
         "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
     )
     self.filename.setText(cur_dir + '/untitled.png')
     self.filename.clicked.connect(self.fileChanged)
     self.grid.addWidget(self.filename, 8, 1, 1, 5)
     self.grid.addWidget(QtWidgets.QLabel('Properties:'), 9, 0)
     self.properties = QtWidgets.QPlainTextEdit()
     self.properties.setMaximumHeight(
         int(self.northSpin.sizeHint().height() * 4.5))
     self.properties.setReadOnly(True)
     self.grid.addWidget(self.properties, 9, 1, 3, 5)
     self.log = QtWidgets.QLabel()
     self.grid.addWidget(self.log, 14, 1, 3, 5)
     self.progressbar = QtWidgets.QProgressBar()
     self.progressbar.setMinimum(0)
     self.progressbar.setMaximum(100)
     self.progressbar.setValue(0)
     self.progressbar.setStyleSheet('QProgressBar {border: 1px solid grey; border-radius: 2px; text-align: center;}' \
                                    + 'QProgressBar::chunk { background-color: #6891c6;}')
     self.grid.addWidget(self.progressbar, 17, 1, 1, 5)
     self.progressbar.setHidden(True)
     self.progresslabel = QtWidgets.QLabel('')
     self.grid.addWidget(self.progresslabel, 17, 1, 1, 4)
     self.progresslabel.setHidden(True)
     quit = QtWidgets.QPushButton('Quit', self)
     self.grid.addWidget(quit, 18, 0)
     quit.clicked.connect(self.quitClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     query = QtWidgets.QPushButton('Query Map', self)
     wdth = query.fontMetrics().boundingRect(query.text()).width() + 9
     self.grid.addWidget(query, 18, 1)
     query.clicked.connect(self.queryClicked)
     make = QtWidgets.QPushButton('Get Map', self)
     make.setMaximumWidth(wdth)
     self.grid.addWidget(make, 18, 2)
     make.clicked.connect(self.makeClicked)
     mapquest = QtWidgets.QPushButton('MapQuest', self)
     mapquest.setMaximumWidth(wdth)
     self.grid.addWidget(mapquest, 18, 3)
     mapquest.clicked.connect(self.mapquestClicked)
     help = QtWidgets.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, 18, 4)
     help.clicked.connect(self.helpClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     frame = QtWidgets.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtWidgets.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtWidgets.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     #      self.resize(self.width() + int(self.world_width * .7), self.height() + int(self.world_height * .7))
     self.setWindowTitle('SIREN - getmap (' + fileVersion() +
                         ") - Make Map from OSM or MapQuest")
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.center()
     self.resize(int(self.sizeHint().width() * 1.5),
                 int(self.sizeHint().height() * 1.3))
     self.show()
示例#24
0
 def showHelp(self):
     dialog = displayobject.AnObject(QtGui.QDialog(), self.help,
              title='Help for worldwindow (' + fileVersion() + ')', section='worldwindow')
     dialog.exec_()
示例#25
0
 def initUI(self):
     config = configparser.RawConfigParser()
     if len(sys.argv) > 1:
         config_file = sys.argv[1]
     else:
         config_file = getModelFile('SIREN.ini')
     config.read(config_file)
     try:
         self.base_year = config.get('Base', 'year')
     except:
         self.base_year = '2012'
     self.yrndx = -1
     this_year = time.strftime('%Y')
     try:
         self.years = []
         years = config.get('Base', 'years')
         bits = years.split(',')
         for i in range(len(bits)):
             rngs = bits[i].split('-')
             if len(rngs) > 1:
                 for j in range(int(rngs[0].strip()),
                                int(rngs[1].strip()) + 1):
                     if str(j) == self.base_year:
                         self.yrndx = len(self.years)
                     self.years.append(str(j))
             else:
                 if rngs[0].strip() == self.base_year:
                     self.yrndx = len(self.years)
                 self.years.append(rngs[0].strip())
         if this_year not in self.years:
             self.years.append(this_year)
     except:
         if self.base_year != this_year:
             self.years = [self.base_year, this_year]
         else:
             self.years = self.base_year
         self.yrndx = 0
     if self.yrndx < 0:
         self.yrndx = len(self.years)
         self.years.append(self.base_year)
     parents = []
     try:
         parents = getParents(config.items('Parents'))
     except:
         pass
     self.grid_stations = ''
     try:
         fac_file = config.get('Files', 'grid_stations')
         for key, value in parents:
             fac_file = fac_file.replace(key, value)
         fac_file = fac_file.replace('$USER$', getUser())
         fac_file = fac_file.replace('$YEAR$', self.base_year)
         self.grid_stations = fac_file
     except:
         pass
     self.load_file = ''
     try:
         fac_file = config.get('Files', 'load')
         for key, value in parents:
             fac_file = fac_file.replace(key, value)
         fac_file = fac_file.replace('$USER$', getUser())
         fac_file = fac_file.replace('$YEAR$', self.base_year)
         self.load_file = fac_file
     except:
         pass
     my_config = configparser.RawConfigParser()
     my_config_file = 'getfiles.ini'
     my_config.read(my_config_file)
     try:
         aemo_facilities = my_config.get('updateswis', 'aemo_facilities')
     except:
         aemo_facilities = '/datafiles/facilities/facilities.csv'
     try:
         aemo_load = my_config.get('updateswis', 'aemo_load')
     except:
         aemo_load = '/datafiles/load-summary/load-summary-$YEAR$.csv'
     aemo_load = aemo_load.replace('$YEAR$', self.base_year)
     try:
         aemo_url = my_config.get('updateswis', 'aemo_url')
     except:
         aemo_url = 'data.wa.aemo.com.au'
     self.grid = QtWidgets.QGridLayout()
     self.grid.addWidget(QtWidgets.QLabel('Host site:'), 0, 0)
     self.host = QtWidgets.QLineEdit()
     self.host.setText(aemo_url)
     self.grid.addWidget(self.host, 0, 1, 1, 2)
     self.grid.addWidget(QtWidgets.QLabel('Existing Stations (Facilities)'),
                         1, 0, 1, 2)
     self.grid.addWidget(QtWidgets.QLabel('File location:'), 2, 0)
     self.url = QtWidgets.QLineEdit()
     self.url.setText(aemo_facilities)
     self.grid.addWidget(self.url, 2, 1, 1, 2)
     self.grid.addWidget(QtWidgets.QLabel('Target file:'), 3, 0)
     self.target = ClickableQLabel()
     self.target.setText(self.grid_stations)
     self.target.setStyleSheet(
         "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
     )
     self.target.clicked.connect(self.tgtChanged)
     self.grid.addWidget(self.target, 3, 1, 1, 4)
     self.grid.addWidget(QtWidgets.QLabel('Excel file:'), 4, 0)
     self.excel = ClickableQLabel()
     self.excel.setText('')
     self.excel.setStyleSheet(
         "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
     )
     self.excel.clicked.connect(self.excelChanged)
     self.grid.addWidget(self.excel, 4, 1, 1, 3)
     self.grid.addWidget(QtWidgets.QLabel('Keep deleted:'), 5, 0)
     self.keepbox = QtWidgets.QCheckBox()
     self.keepbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.keepbox, 5, 1)
     self.grid.addWidget(
         QtWidgets.QLabel('If checked will retain deleted facilities'), 5,
         2, 1, 3)
     self.grid.addWidget(QtWidgets.QLabel('System Load'), 6, 0)
     self.grid.addWidget(QtWidgets.QLabel('Year:'), 7, 0)
     self.yearCombo = QtWidgets.QComboBox()
     for i in range(len(self.years)):
         self.yearCombo.addItem(self.years[i])
     self.yearCombo.setCurrentIndex(self.yrndx)
     self.yearCombo.currentIndexChanged[str].connect(self.yearChanged)
     self.grid.addWidget(self.yearCombo, 7, 1)
     self.grid.addWidget(QtWidgets.QLabel('Wrap to prior year:'), 8, 0)
     self.wrapbox = QtWidgets.QCheckBox()
     self.wrapbox.setCheckState(QtCore.Qt.Checked)
     self.grid.addWidget(self.wrapbox, 8, 1)
     self.grid.addWidget(
         QtWidgets.QLabel('If checked will wrap back to prior year'), 8, 2,
         1, 3)
     self.grid.addWidget(QtWidgets.QLabel('Load file location:'), 9, 0)
     self.lurl = QtWidgets.QLineEdit()
     self.lurl.setText(aemo_load)
     self.grid.addWidget(self.lurl, 9, 1, 1, 3)
     self.grid.addWidget(QtWidgets.QLabel('Target load file:'), 10, 0)
     self.targetl = ClickableQLabel()
     self.targetl.setText(self.load_file)
     self.targetl.setStyleSheet(
         "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
     )
     self.targetl.clicked.connect(self.tgtlChanged)
     self.grid.addWidget(self.targetl, 10, 1, 1, 4)
     self.log = QtWidgets.QLabel(' ')
     self.grid.addWidget(self.log, 11, 1, 1, 3)
     quit = QtWidgets.QPushButton('Quit', self)
     wdth = quit.fontMetrics().boundingRect(quit.text()).width() + 29
     self.grid.addWidget(quit, 12, 0)
     quit.clicked.connect(self.quitClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     dofile = QtWidgets.QPushButton('Update Existing Stations', self)
     self.grid.addWidget(dofile, 12, 1)
     dofile.clicked.connect(self.dofileClicked)
     dofilel = QtWidgets.QPushButton('Update Load file', self)
     self.grid.addWidget(dofilel, 12, 2)
     dofilel.clicked.connect(self.dofilelClicked)
     help = QtWidgets.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, 12, 3)
     help.clicked.connect(self.helpClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     self.grid.setColumnStretch(3, 5)
     frame = QtWidgets.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtWidgets.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtWidgets.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     self.setWindowTitle('SIREN - updateswis (' + fileVersion() +
                         ') - Update SWIS Data')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.center()
     self.resize(int(self.sizeHint().width() * 1.07),
                 int(self.sizeHint().height() * 1.07))
     self.show()
示例#26
0
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.siren_dir = '.'
        if len(sys.argv) > 1:
            if sys.argv[1][-4:] == '.ini':
                self.invoke(sys.argv[1])
                sys.exit()
            elif os.path.isdir(sys.argv[1]):
                self.siren_dir = sys.argv[1]
        if self.siren_dir[-1] != '/':
            self.siren_dir += '/'
        self.entries = []
        fils = os.listdir(self.siren_dir)
        self.help = ''
        self.about = ''
        self.weather_icon = 'weather.png'
        config = ConfigParser.RawConfigParser()
        ignore = ['getfiles.ini', 'siren_default.ini', 'siren_windows_default.ini']
        for fil in sorted(fils):
            if fil[-4:] == '.ini':
                if fil in ignore:
                    continue
                try:
                    config.read(self.siren_dir + fil)
                except:
                    continue
                try:
                    model_name = config.get('Base', 'name')
                except:
                    model_name = ''
                self.entries.append([fil, model_name])
                if self.about == '':
                    try:
                        self.about = config.get('Files', 'about')
                        if not os.path.exists(self.about):
                            self.about = ''
                    except:
                        pass
                if self.help == '':
                    try:
                        self.help = config.get('Files', 'help')
                        if not os.path.exists(self.help):
                            self.help = ''
                    except:
                        pass
                try:
                    mb = config.get('View', 'menu_background')
                    if mb.lower() != 'b':
                        self.weather_icon = 'weather_b.png'
                except:
                    pass
        if len(self.entries) == 0:
            self.new()
     #    if len(entries) == 1:
     #        self.invoke(entries[0][0])
     #        sys.exit()
        self.setWindowTitle('SIREN (' + fileVersion() + ') - Select SIREN Model')
        self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
        buttonLayout = QtGui.QHBoxLayout()
        self.quitButton = QtGui.QPushButton(self.tr('&Quit'))
        buttonLayout.addWidget(self.quitButton)
        self.connect(self.quitButton, QtCore.SIGNAL('clicked()'), self.quit)
        QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quit)
        self.newButton = QtGui.QPushButton(self.tr('&New Model'))
        buttonLayout.addWidget(self.newButton)
        self.connect(self.newButton, QtCore.SIGNAL('clicked()'), self.new)
        buttons = QtGui.QFrame()
        buttons.setLayout(buttonLayout)
        layout = QtGui.QGridLayout()
        self.table = QtGui.QTableWidget()
        self.table.setRowCount(len(self.entries))
        self.table.setColumnCount(2)
        hdr_labels = ['Preference File', 'SIREN Model']
        self.table.setHorizontalHeaderLabels(hdr_labels)
        self.headers = self.table.horizontalHeader()
        self.headers.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.headers.customContextMenuRequested.connect(self.header_click)
        self.headers.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
        self.table.verticalHeader().setVisible(False)
        self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
        max_row = 30
        for rw in range(len(self.entries)):
            ln = 0
            for cl in range(2):
                self.table.setItem(rw, cl, QtGui.QTableWidgetItem(self.entries[rw][cl]))
                ln += len(self.entries[rw][cl])
            if ln > max_row:
                max_row = ln
        self.sort_asc = True
        self.sort_col = 0
        self.table.resizeColumnsToContents()
        self.table.itemClicked.connect(self.Clicked)
        fnt = self.table.fontMetrics()
        ln = max_row * max(9, fnt.averageCharWidth())
        ln2 = (len(self.entries) + 8) * (fnt.xHeight() + fnt.lineSpacing())
        screen = QtGui.QDesktopWidget().screenGeometry()
        if ln > screen.width() * .9:
            ln = int(screen.width() * .9)
        if ln2 > screen.height() * .9:
            ln2 = int(screen.height() * .9)
        layout.addWidget(QtGui.QLabel('Click on row for Desired Model; Right click column header to sort'), 0, 0)
        layout.addWidget(self.table, 1, 0)
        layout.addWidget(buttons, 2, 0)
        menubar = QtGui.QMenuBar()
        utilities = ['getmap', 'getmerra2', 'makeweather2', 'sirenupd']
        utilicon = ['map.png', 'download.png', self.weather_icon, 'download.png']
        spawns = []
        icons = []
        if sys.platform == 'win32' or sys.platform == 'cygwin':
            for i in range(len(utilities)):
                if os.path.exists(utilities[i] + '.exe'):
                    spawns.append(utilities[i] + '.exe')
                    icons.append(utilicon[i])
                else:
                    if os.path.exists(utilities[i] + '.py'):
                        spawns.append(utilities[i] + '.py')
                        icons.append(utilicon[i])
        else:
            for i in range(len(utilities)):
                if os.path.exists(utilities[i] + '.py'):
                    spawns.append(utilities[i] + '.py')
                    icons.append(utilicon[i])
        if len(spawns) > 0:
            spawnitem = []
            spawnMenu = menubar.addMenu('&Tools')
            for i in range(len(spawns)):
                if type(spawns[i]) is list:
                    who = spawns[i][0][:spawns[i][0].find('.')]
                else:
                    who = spawns[i][:spawns[i].find('.')]
                spawnitem.append(QtGui.QAction(QtGui.QIcon(icons[i]), who, self))
                spawnitem[-1].triggered.connect(partial(self.spawn, spawns[i]))
                spawnMenu.addAction(spawnitem[-1])
            layout.setMenuBar(menubar)
        help = QtGui.QAction(QtGui.QIcon('help.png'), 'Help', self)
        help.setShortcut('F1')
        help.setStatusTip('Help')
        help.triggered.connect(self.showHelp)
        about = QtGui.QAction(QtGui.QIcon('about.png'), 'About', self)
        about.setShortcut('Ctrl+I')
        about.setStatusTip('About')
        about.triggered.connect(self.showAbout)
        helpMenu = menubar.addMenu('&Help')
        helpMenu.addAction(help)
        helpMenu.addAction(about)

        self.setLayout(layout)
        size = QtCore.QSize(ln, ln2)
        self.resize(size)
示例#27
0
 def __init__(self, parent=None):
     self.debug = False
     QtGui.QDialog.__init__(self, parent)
     self.setWindowTitle('SIREN Update (' + fileVersion() + ') - Check for new versions')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     row = 0
     newgrid = QtGui.QGridLayout()
     host = 'https://sourceforge.net/projects/sensiren/files/'
     versions_file = 'siren_versions.csv'
     command = 'wget -O %s %s%s' % (versions_file, host, versions_file)
     command = command.split(' ')
     if self.debug:
         response = '200 OK'
     else:
         try:
             pid = subprocess.Popen(command, stderr=subprocess.PIPE)
         except:
             command[0] = command[0] + '.exe'
             pid = subprocess.Popen(command, stderr=subprocess.PIPE)
         response = get_response(pid.communicate()[1])
     if response != '200 OK':
         newgrid.addWidget(QtGui.QLabel('Error encountered accessing siren_versions.csv\n\n' + \
                                        response), 0, 0, 1, 4)
         row = 1
     elif os.path.exists(versions_file):
         new_versions = []
         versions = open(versions_file)
         programs = csv.DictReader(versions)
         for program in programs:
             version = fileVersion(program=program['Program'])
             if version != '?' and version != program['Version']:
                 new_versions.append([program['Program'], version, program['Version']])
         versions.close()
         if len(new_versions) > 0:
             newgrid.addWidget(QtGui.QLabel('New versions are available for the following programs.' + \
                                            '\nChoose those you wish to update.' + \
                                            '\nUpdates can take a while so please be patient.' + \
                                            '\nContact [email protected] with any issues.'), 0, 0, 1, 4)
             self.table = QtGui.QTableWidget()
             self.table.setRowCount(len(new_versions))
             self.table.setColumnCount(4)
             hdr_labels = ['', 'Program', 'New Ver.', 'Current / Status']
             self.table.setHorizontalHeaderLabels(hdr_labels)
             self.table.verticalHeader().setVisible(False)
             self.newbox = []
             self.newprog = []
             rw = -1
             for new_version in new_versions:
                  rw += 1
                  self.newbox.append(QtGui.QTableWidgetItem())
                  self.newprog.append(new_version[0])
                  self.newbox[-1].setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
                  self.newbox[-1].setCheckState(QtCore.Qt.Unchecked)
                  self.table.setItem(rw, 0, self.newbox[-1])
                  self.table.setItem(rw, 1, QtGui.QTableWidgetItem(new_version[0]))
                  self.table.setItem(rw, 2, QtGui.QTableWidgetItem(new_version[2]))
                  self.table.setItem(rw, 3, QtGui.QTableWidgetItem(new_version[1]))
             self.table.resizeColumnsToContents()
             self.table.setColumnWidth(0, 29)
             newgrid.addWidget(self.table, 1, 0, 1, 4)
             doit = QtGui.QPushButton('Update')
             doit.clicked.connect(self.doitClicked)
             newgrid.addWidget(doit, 2, 1)
             row = 2
         else:
             newgrid.addWidget(QtGui.QLabel('No new versions available.'), 0, 0, 1, 4)
             row = 1
     else:
         newgrid.addWidget(QtGui.QLabel('No versions file available.'), 0, 0, 1, 4)
         row = 1
     quit = QtGui.QPushButton('Quit')
     quit.clicked.connect(self.quit)
     QtGui.QShortcut(QtGui.QKeySequence('q'), self, self.quit)
     newgrid.addWidget(quit, row, 0)
     self.setLayout(newgrid)
示例#28
0
 def __init__(self,
              upper_lat,
              upper_lon,
              lower_lat,
              lower_lon,
              output,
              zoom=None,
              url=None,
              width=None,
              height=None,
              caller=None):
     if len(sys.argv) > 1 and sys.argv[1][-4:] != '.ini':
         self.batch = True
     else:
         self.batch = False
         self.caller = caller
     self.log = ''
     self.properties = ''
     config_file = 'getfiles.ini'
     config = configparser.RawConfigParser()
     config.read(config_file)
     if width != None and height != None:  # Mapquest map
         try:
             url = config.get('getmap', 'mapquest_url')
         except:
             url = 'www.mapquestapi.com'
         try:
             tail = config.get('getmap', 'mapquest_tail')
         except:
             tail = '/staticmap/v4/getmap?type=sat&margin=0&bestfit=%s,%s,%s,%s&size=%s,%s&imagetype=%s'
         url_tail = tail % (upper_lat, upper_lon, lower_lat, lower_lon,
                            width, height, output[output.rfind('.') + 1:])
         try:
             url_key = '&key=' + config.get('getmap', 'mapquest_key')
         except:
             url_key = '&key=yWspjYHSK6FHtNLzZVcqP3WBxSWSwEo8'
         if self.batch:
             print(url + url_tail)
         user_agent = {
             'User-agent':
             'getmap ' + fileVersion() + ' contact [email protected]'
         }
         http = PoolManager(headers=user_agent)
         if self.batch:
             print('Requesting ' + url_tail)
         response = http.request('GET', url + url_tail + url_key)
         if response.status == 200 and response.reason == 'OK':
             if self.batch:
                 print(url_tail + ' retrieved')
             f = open(output, 'wb')
             f.write(response.data)
             f.close()
             self.log += '\nSaving map to ' + output
             self.properties = 'map_choice=?'
             self.properties += '\nmap=%s' % (output)
             self.properties += '\nupper_left=%1.3f, %1.3f' % (upper_lat,
                                                               upper_lon)
             self.properties += '\nlower_right=%1.3f, %1.3f' % (lower_lat,
                                                                lower_lon)
         else:
             if self.batch:
                 print(url_tail + ' failed')
                 print(str(response.status) + ' ' + response.reason)
         return
     if url is None:
         try:
             self.url = config.get('getmap', 'url_template')
         except:
             self.url = 'https://[abc].tile.openstreetmap.org/zoom/x/y.png'
     else:
         self.url = url
     top_left = self.deg2num(upper_lat, upper_lon, zoom)
     bottom_right = self.deg2num(lower_lat, lower_lon, zoom)
     height = (bottom_right[1] - top_left[1] + 1) * 256
     width = (bottom_right[0] - top_left[0] + 1) * 256
     st, wt, nt, et = self.tileEdges(top_left[0], top_left[1], zoom)
     sb, wb, nb, eb = self.tileEdges(bottom_right[0], bottom_right[1], zoom)
     if self.batch:
         print(
             '(185)', '%d: %d,%d --> %1.3f :: %1.3f, %1.3f :: %1.3f' %
             (zoom, top_left[0], top_left[1], st, nt, wt, et))
         print(
             '(186)', '%d: %d,%d --> %1.3f :: %1.3f, %1.3f :: %1.3f' %
             (zoom, bottom_right[0], bottom_right[1], sb, nb, wb, eb))
     w = bottom_right[0] - top_left[0] + 1
     h = bottom_right[1] - top_left[1] + 1
     if self.batch:
         print(w, h, '=', w * h, 'tiles.', w * 256, 'x', h * 256,
               'pixels (approx.', w * 256 * h * 256, 'uncompressed bytes)')
         print('map_choice=%s' % (zoom))
         print('map%s=%s' % (zoom, output))
         print('upper_left%d=%1.3f, %1.3f' % (zoom, nt, wt))
         print('lower_right%d=%1.3f, %1.3f' % (zoom, sb, eb))
         if output == '?' or output == '':
             sys.exit()
     else:
         self.log = '%s x %s = %s tiles. %s x %s pixels (approx. %s uncompressed bytes)' % (
             w, h, w * h, '{:,}'.format(w * 256), '{:,}'.format(
                 h * 256), "{:,}".format(w * 256 * h * 256))
         self.properties = 'map_choice=%s' % (zoom)
         self.properties += '\nmap%s=%s' % (zoom, output)
         self.nt, self.wt, self.sb, self.eb = nt, wt, sb, eb
         self.properties += '\nupper_left%d=%1.3f, %1.3f' % (zoom, nt, wt)
         self.properties += '\nlower_right%d=%1.3f, %1.3f' % (zoom, sb, eb)
         if output == '?' or output == '':
             return
     i = self.url.find('//')
     if i >= 0:
         self.url = self.url[i + 2:]
     i = self.url.find('/')
     self.url_tail = self.url[i:]
     self.url = self.url[:i]
     self.subs = []
     i = self.url.find('[')
     if i >= 0:
         j = self.url.find(']', i)
         if j > 0:
             for k in range(i + 1, j):
                 self.subs.append(self.url[k])
             if i > 0:
                 self.url = self.url[:i + 1] + self.url[j:]
             else:
                 self.url = self.url[0] + self.url[j:]
     self.sub_ctr = -1
     self.tmp_location = tempfile.gettempdir() + '/'
     i = output.rfind('.')
     if i < 0:
         fname = output + '.png'
     else:
         fname = output
     outputimg = QtGui.QPixmap(width, height)
     painter = QtGui.QPainter(outputimg)
     if self.batch:
         print('Saving map to ' + fname)
     else:
         self.log += '\nSaving map to ' + fname
         tl = 0
         self.caller.progressbar.setMaximum(
             (bottom_right[0] - top_left[0] + 1) *
             (bottom_right[1] - top_left[1] + 1) - 1)
         self.caller.progresslabel.setText('Downloading tiles')
     for x in range(top_left[0], bottom_right[0] + 1):
         for y in range(top_left[1], bottom_right[1] + 1):
             msg, tile = self.writetile(x, y, zoom)
             if msg != 'OK':
                 if self.batch:
                     print(msg)
                 else:
                     self.log += '\n' + msg
                 painter.end()
                 return
             foo = QtGui.QImage(self.tmp_location + tile)
             painter.drawImage(
                 QtCore.QPoint(256 * (x - top_left[0]),
                               256 * (y - top_left[1])), foo)
             if not self.batch:
                 tl += 1
                 self.caller.progressbar.setValue(tl)
     outputimg.save(fname, fname[i + 1:])
     painter.end()
     if len(sys.argv) == 1:
         self.log += '\nDone'
示例#29
0
 def eventFilter(self, source, event):
     if self.table.selectedIndexes() != []:
         if event.type() == QtCore.QEvent.MouseButtonRelease and \
           event.button() == QtCore.Qt.LeftButton:
             ent = self.table.item(self.table.currentRow(), 0).text()
             self.table.viewport().removeEventFilter(self)
             self.invoke('sirenm', self.siren_dir + ent)
             self.quit()
         if (event.type() == QtCore.QEvent.MouseButtonPress or event.type() == QtCore.QEvent.MouseButtonRelease) and \
           event.button() == QtCore.Qt.RightButton:
             ent = self.table.item(self.table.currentRow(), 0).text()
             index = self.table.indexAt(event.pos())
             selectionModel = self.table.selectionModel()
             selectionModel.select(
                 self.table.model().index(self.table.currentRow(), 0),
                 selectionModel.Deselect | selectionModel.Rows)
             selectionModel.select(self.table.model().index(index.row(), 0),
                                   selectionModel.Rows)
             menu = QtWidgets.QMenu()
             actions = []
             for i in range(len(self.model_tool)):
                 if self.model_tool[i] == 'updateswis':
                     mdl = self.table.item(self.table.currentRow(),
                                           1).text()
                     if mdl.find('SWIS') < 0:
                         continue
                 actions.append(
                     menu.addAction(QtGui.QIcon(self.model_icon[i]),
                                    'Execute ' + self.model_tool[i]))
                 actions[-1].setIconVisibleInMenu(True)
             actions.append(
                 menu.addAction(QtGui.QIcon('edit.png'),
                                'Edit Preferences'))
             actions[-1].setIconVisibleInMenu(True)
             actions.append(
                 menu.addAction(QtGui.QIcon('edit.png'),
                                'Edit File Preferences'))
             actions[-1].setIconVisibleInMenu(True)
             action = menu.exec_(self.mapToGlobal(event.pos()))
             if action is not None:
                 if action.text()[:8] == 'Execute ':
                     if not self.entries[self.table.currentRow()][3]:
                         ok, model_name, errors = self.check_file(ent)
                         if len(errors) > 0:
                             dialog = displayobject.AnObject(
                                 QtWidgets.QDialog(),
                                 errors,
                                 title='SIREN (' + fileVersion() +
                                 ') - Preferences file errors')
                             dialog.exec_()
                             return QtCore.QObject.event(source, event)
                     self.invoke(action.text()[8:], self.siren_dir + ent)
                 elif action.text()[-11:] == 'Preferences':
                     i = self.table.item(self.table.currentRow(),
                                         1).text().find('[line ')
                     if i >= 0:
                         j = self.table.item(self.table.currentRow(),
                                             1).text().find(']', i)
                         line = int(
                             self.table.item(self.table.currentRow(),
                                             1).text()[i + 5:j].strip()) - 1
                     else:
                         line = None
                     if action.text()[-16:] == 'File Preferences':
                         self.editIniFileSects(self.siren_dir + ent)
                     else:
                         self.editIniFile(self.siren_dir + ent, line=line)
                     ok, model_name, errors = self.check_file(ent)
                     if model_name != self.entries[
                             self.table.currentRow()][1]:
                         self.entries[
                             self.table.currentRow()][1] = model_name
                         self.table.setItem(
                             self.table.currentRow(), 1,
                             QtWidgets.QTableWidgetItem(model_name))
                     if len(errors) > 0:
                         self.entries[self.table.currentRow()][3] = False
                         dialog = displayobject.AnObject(
                             QtWidgets.QDialog(),
                             errors,
                             title='SIREN (' + fileVersion() +
                             ') - Preferences file errors')
                         dialog.exec_()
                         return QtCore.QObject.event(source, event)
                     else:
                         self.entries[self.table.currentRow()][3] = True
     return QtCore.QObject.event(source, event)
示例#30
0
 def __init__(self, siren_dir=None, help='help.html'):
     super(makeNew, self).__init__()
     self.siren_dir = siren_dir
     self.help = help
     self.ini_file = ''
     if sys.platform == 'win32' or sys.platform == 'cygwin':
         ini_file = 'siren_windows_default.ini'
     else:
         ini_file = 'siren_default.ini'
     if os.path.exists(self.siren_dir + ini_file):
         ini_file = self.siren_dir + ini_file
     else:
         if not os.path.exists(ini_file):
             return
     file_sects = ['[Parents]', '[Files]', '[SAM Modules]']
     dir_props = [
         'pow_files', 'sam_sdk', 'scenarios', 'solar_files',
         'variable_files', 'wind_files'
     ]
     field_props = ['scenario_prefix']
     inf = open(ini_file, 'r')
     lines = inf.readlines()
     inf.close()
     sections = {}
     props = []
     for line in lines:
         if line[0] == ';' or line[0] == '#':
             continue
         if line[0] == '[':
             if len(props) > 0:
                 sections[section] = props
             j = line.find(']')
             section = line[:j + 1]
             props = []
         else:
             j = line.find('=')
             if line[j + 1] == '<' or section == '[Parents]':
                 prop = line[j + 1:].lstrip('<').strip().rstrip('>')
                 props.append([line[:j], prop])
     if len(props) > 0:
         sections[section] = props
     row = 0
     self.fields = []
     self.fields.append(
         ['section', 'typ', 'name', 'value',
          QtWidgets.QLineEdit()])
     self.grid = QtWidgets.QGridLayout()
     self.grid.addWidget(QtWidgets.QLabel('New file name:'), row, 0)
     self.fields[row][4].setText('siren_new.ini')
     self.grid.addWidget(self.fields[row][4], row, 1)
     self.fields[row][4].textChanged.connect(self.filenameChanged)
     self.msg = QtWidgets.QLabel('')
     self.grid.addWidget(self.msg, row, 2, 1, 3)
     now = datetime.datetime.now()
     if '[Base]' in list(sections.keys()):
         for key, value in sections['[Base]']:
             row += 1
             self.fields.append(
                 ['[Base]', 'txt', key, value,
                  QtWidgets.QLineEdit()])
             if key == 'year':
                 self.fields[-1][3] = str((now.year - 1))
             if self.fields[row][0] != self.fields[row - 1][0]:
                 self.grid.addWidget(QtWidgets.QLabel(self.fields[row][0]),
                                     row, 0)
             self.grid.addWidget(QtWidgets.QLabel(self.fields[row][2]), row,
                                 1)
             self.fields[row][4].setText(self.fields[row][3])
             self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
     self.parents = {}
     sections['[Parents]'].append(['$USER$', getUser()])
     sections['[Parents]'].append(['$YEAR$', str(now.year - 1)])
     if '[Parents]' in list(sections.keys()):
         for key, value in sections['[Parents]']:
             self.parents[key] = value
             row += 1
             self.fields.append(['[Parents]', '?', key, value, '?'])
             if self.fields[row][0] != self.fields[row - 1][0]:
                 self.grid.addWidget(QtWidgets.QLabel(self.fields[row][0]),
                                     row, 0)
             self.grid.addWidget(QtWidgets.QLabel(self.fields[row][2]), row,
                                 1)
             if key == '$USER$' or key == '$YEAR$':
                 self.fields[row][1] = 'txt'
                 self.fields[row][4] = QtWidgets.QLabel(self.fields[row][3])
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
             else:
                 self.fields[row][1] = 'dir'
                 self.fields[row][4] = ClickableQLabel()
                 self.fields[row][4].setText(self.fields[row][3])
                 self.fields[row][4].setStyleSheet(
                     "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
                 )
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
                 self.fields[row][4].clicked.connect(self.itemClicked)
     for section, props in sections.items():
         if section == '[Base]' or section == '[Parents]':
             continue
         elif section == '[Map]':
             for prop in props:
                 row += 1
                 self.fields.append([section, '?', prop[0], prop[1], '?'])
                 if self.fields[row][0] != self.fields[row - 1][0]:
                     self.grid.addWidget(
                         QtWidgets.QLabel(self.fields[row][0]), row, 0)
                 self.grid.addWidget(QtWidgets.QLabel(self.fields[row][2]),
                                     row, 1)
                 if prop[0] == 'map' or (prop[0][:3] == 'map'
                                         and prop[0][3] != '_'):
                     self.fields[row][3] = prop[1]
                     self.fields[row][1] = 'fil'
                     self.fields[row][4] = ClickableQLabel()
                     self.fields[row][4].setStyleSheet(
                         "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
                     )
                     self.fields[row][4].clicked.connect(self.itemClicked)
                 else:
                     self.fields[row][1] = 'txt'
                     self.fields[row][4] = QtWidgets.QLineEdit()
                 self.fields[row][4].setText(self.fields[row][3])
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
         elif section in file_sects:
             for prop in props:
                 row += 1
                 self.fields.append([section, '?', prop[0], prop[1], '?'])
                 if self.fields[row][0] != self.fields[row - 1][0]:
                     self.grid.addWidget(
                         QtWidgets.QLabel(self.fields[row][0]), row, 0)
                 self.grid.addWidget(QtWidgets.QLabel(self.fields[row][2]),
                                     row, 1)
                 self.fields[row][3] = prop[1]
                 if prop[0] in field_props:
                     self.fields[row][1] = 'txt'
                     self.fields[row][4] = QtWidgets.QLineEdit()
                     self.fields[row][4].setText(self.fields[row][3])
                 else:
                     if prop[0] in dir_props:
                         self.fields[row][1] = 'dir'
                     else:
                         self.fields[row][1] = 'fil'
                     self.fields[row][4] = ClickableQLabel()
                     self.fields[row][4].setText(self.fields[row][3])
                     self.fields[row][4].setStyleSheet(
                         "background-color: white; border: 1px inset grey; min-height: 22px; border-radius: 4px;"
                     )
                     self.fields[row][4].clicked.connect(self.itemClicked)
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
         else:
             for prop in props:
                 row += 1
                 self.fields.append([
                     section, 'txt', prop[0], prop[1],
                     QtWidgets.QLineEdit()
                 ])
                 if self.fields[row][0] != self.fields[row - 1][0]:
                     self.grid.addWidget(
                         QtWidgets.QLabel(self.fields[row][0]), row, 0)
                 self.grid.addWidget(QtWidgets.QLabel(self.fields[row][2]),
                                     row, 1)
                 self.fields[row][4].setText(self.fields[row][3])
                 self.grid.addWidget(self.fields[row][4], row, 2, 1, 3)
     row += 1
     quit = QtWidgets.QPushButton('Quit', self)
     self.grid.addWidget(quit, row, 0)
     quit.clicked.connect(self.quitClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quitClicked)
     save = QtWidgets.QPushButton('Save', self)
     self.grid.addWidget(save, row, 1)
     save.clicked.connect(self.saveClicked)
     launch = QtWidgets.QPushButton('Save && Open', self)
     self.grid.addWidget(launch, row, 3)
     launch.clicked.connect(self.saveLaunch)
     wdth = save.fontMetrics().boundingRect(launch.text()).width() + 9
     launch.setMaximumWidth(wdth)
     edit = QtWidgets.QPushButton('Save && Edit', self)
     self.grid.addWidget(edit, row, 2)
     edit.clicked.connect(self.saveEdit)
     edit.setMaximumWidth(wdth)
     help = QtWidgets.QPushButton('Help', self)
     help.setMaximumWidth(wdth)
     self.grid.addWidget(help, row, 4)
     help.clicked.connect(self.helpClicked)
     QtWidgets.QShortcut(QtGui.QKeySequence('F1'), self, self.helpClicked)
     self.grid.setColumnStretch(2, 5)
     frame = QtWidgets.QFrame()
     frame.setLayout(self.grid)
     self.scroll = QtWidgets.QScrollArea()
     self.scroll.setWidgetResizable(True)
     self.scroll.setWidget(frame)
     self.layout = QtWidgets.QVBoxLayout(self)
     self.layout.addWidget(self.scroll)
     utilities = ['getmap', 'getmerra2', 'makeweatherfiles', 'sirenupd']
     utilicon = ['map.png', 'download.png', 'weather.png', 'download.png']
     spawns = []
     icons = []
     if sys.platform == 'win32' or sys.platform == 'cygwin':
         for i in range(len(utilities)):
             if os.path.exists(utilities[i] + '.exe'):
                 spawns.append(utilities[i] + '.exe')
                 icons.append(utilicon[i])
             else:
                 if os.path.exists(utilities[i] + '.py'):
                     spawns.append(utilities[i] + '.py')
                     icons.append(utilicon[i])
     else:
         for i in range(len(utilities)):
             if os.path.exists(utilities[i] + '.py'):
                 spawns.append(utilities[i] + '.py')
                 icons.append(utilicon[i])
     if len(spawns) > 0:
         spawnitem = []
         menubar = QtWidgets.QMenuBar()
         spawnMenu = menubar.addMenu('&Tools')
         for i in range(len(spawns)):
             if type(spawns[i]) is list:
                 who = spawns[i][0][:spawns[i][0].find('.')]
             else:
                 who = spawns[i][:spawns[i].find('.')]
             spawnitem.append(
                 QtWidgets.QAction(QtGui.QIcon(icons[i]), who, self))
             spawnitem[-1].triggered.connect(partial(self.spawn, spawns[i]))
             spawnMenu.addAction(spawnitem[-1])
         self.layout.setMenuBar(menubar)
     self.setWindowTitle('SIREN (' + fileVersion() +
                         ') - Create Preferences file')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     self.show()
示例#31
0
 def __init__(self, parent=None):
     QtWidgets.QDialog.__init__(self, parent)
     self.siren_dir = '.'
     if len(sys.argv) > 1:
         if sys.argv[1][-4:] == '.ini':
             self.invoke('sirenm', sys.argv[1])
             sys.exit()
         elif os.path.isdir(sys.argv[1]):
             self.siren_dir = sys.argv[1]
         if sys.platform == 'win32' or sys.platform == 'cygwin':
             if self.siren_dir[-1] != '\\' and self.siren_dir[-1] != '/':
                 self.siren_dir += '\\'
         elif self.siren_dir[-1] != '/':
             self.siren_dir += '/'
     else:
         self.siren_dir = getModelFile()
     self.entries = []
     fils = os.listdir(self.siren_dir)
     self.help = 'help.html'
     self.about = 'about.html'
     self.config = configparser.RawConfigParser()
     ignore = [
         'flexiplot.ini', 'getfiles.ini', 'powerplot.ini',
         'siren_default.ini', 'siren_windows_default.ini'
     ]
     errors = ''
     for fil in sorted(fils):
         if fil[-4:] == '.ini':
             if fil in ignore:
                 continue
             mod_time = time.strftime(
                 '%Y-%m-%d %H:%M:%S',
                 time.localtime(os.path.getmtime(self.siren_dir + fil)))
             ok, model_name, errors = self.check_file(fil, errors)
             self.entries.append([fil, model_name, mod_time, ok])
     if len(errors) > 0:
         dialog = displayobject.AnObject(QtWidgets.QDialog(),
                                         errors,
                                         title='SIREN (' + fileVersion() +
                                         ') - Preferences file errors')
         dialog.exec_()
     if len(self.entries) == 0:
         self.new()
     self.setWindowTitle('SIREN (' + fileVersion() +
                         ') - Select SIREN Model')
     self.setWindowIcon(QtGui.QIcon('sen_icon32.ico'))
     buttonLayout = QtWidgets.QHBoxLayout()
     self.quitButton = QtWidgets.QPushButton(self.tr('&Quit'))
     buttonLayout.addWidget(self.quitButton)
     self.quitButton.clicked.connect(self.quit)
     QtWidgets.QShortcut(QtGui.QKeySequence('q'), self, self.quit)
     self.newButton = QtWidgets.QPushButton(self.tr('&New Model'))
     buttonLayout.addWidget(self.newButton)
     self.newButton.clicked.connect(self.new)
     buttons = QtWidgets.QFrame()
     buttons.setLayout(buttonLayout)
     layout = QtWidgets.QGridLayout()
     self.table = QtWidgets.QTableWidget()
     self.table.setRowCount(len(self.entries))
     self.table.setColumnCount(3)
     hdr_labels = ['Preference File', 'SIREN Model', 'Date modified']
     self.table.setHorizontalHeaderLabels(hdr_labels)
     self.headers = self.table.horizontalHeader()
     self.headers.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
     self.headers.customContextMenuRequested.connect(self.header_click)
     self.headers.setSelectionMode(
         QtWidgets.QAbstractItemView.SingleSelection)
     self.table.verticalHeader().setVisible(False)
     self.table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
     self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
     max_row = 30
     for rw in range(len(self.entries)):
         ln = 0
         for cl in range(3):
             self.table.setItem(
                 rw, cl, QtWidgets.QTableWidgetItem(self.entries[rw][cl]))
             ln += len(self.entries[rw][cl])
         if ln > max_row:
             max_row = ln
     self.sort_desc = False  # start in date descending order
     self.sort_col = 2
     self.order(2)
     self.table.resizeColumnsToContents()
     self.table.viewport().installEventFilter(self)
     fnt = self.table.fontMetrics()
     ln = max_row * max(9, fnt.averageCharWidth())
     ln2 = (len(self.entries) + 8) * (fnt.xHeight() + fnt.lineSpacing())
     screen = QtWidgets.QDesktopWidget().screenGeometry()
     if ln > screen.width() * .9:
         ln = int(screen.width() * .9)
     if ln2 > screen.height() * .9:
         ln2 = int(screen.height() * .9)
     layout.addWidget(
         QtWidgets.QLabel(
             'Left click on row for Desired Model or right click for Tools; Right click column header to sort'
         ), 0, 0)
     layout.addWidget(self.table, 1, 0)
     layout.addWidget(buttons, 2, 0)
     menubar = QtWidgets.QMenuBar()
     utilities = [
         'flexiplot', 'getmap', 'getmerra2', 'makeweatherfiles',
         'powerplot', 'sirenupd'
     ]
     utilicon = [
         'line.png', 'map.png', 'download.png', 'weather.png', 'line.png',
         'download.png'
     ]
     spawns = []
     icons = []
     if sys.platform == 'win32' or sys.platform == 'cygwin':
         for i in range(len(utilities)):
             if os.path.exists(utilities[i] + '.exe'):
                 spawns.append(utilities[i] + '.exe')
                 icons.append(utilicon[i])
             else:
                 if os.path.exists(utilities[i] + '.py'):
                     spawns.append(utilities[i] + '.py')
                     icons.append(utilicon[i])
     else:
         for i in range(len(utilities)):
             if os.path.exists(utilities[i] + '.py'):
                 spawns.append(utilities[i] + '.py')
                 icons.append(utilicon[i])
     if len(spawns) > 0:
         spawnitem = []
         spawnMenu = menubar.addMenu('&Tools')
         for i in range(len(spawns)):
             if type(spawns[i]) is list:
                 who = spawns[i][0][:spawns[i][0].find('.')]
             else:
                 who = spawns[i][:spawns[i].find('.')]
             spawnitem.append(
                 QtWidgets.QAction(QtGui.QIcon(icons[i]), who, self))
             spawnitem[-1].triggered.connect(partial(self.spawn, spawns[i]))
             spawnMenu.addAction(spawnitem[-1])
         layout.setMenuBar(menubar)
     self.model_tool = [
         'flexiplot', 'getmap', 'indexweather', 'makegrid', 'powermatch',
         'powerplot', 'sirenm', 'updateswis'
     ]
     self.model_icon = [
         'line.png', 'map.png', 'list.png', 'grid.png', 'power.png',
         'line.png', 'sen_icon32.png', 'list.png'
     ]
     help = QtWidgets.QAction(QtGui.QIcon('help.png'), 'Help', self)
     help.setShortcut('F1')
     help.setStatusTip('Help')
     help.triggered.connect(self.showHelp)
     about = QtWidgets.QAction(QtGui.QIcon('about.png'), 'About', self)
     about.setShortcut('Ctrl+I')
     about.setStatusTip('About')
     about.triggered.connect(self.showAbout)
     helpMenu = menubar.addMenu('&Help')
     helpMenu.addAction(help)
     helpMenu.addAction(about)
     self.setLayout(layout)
     size = QtCore.QSize(ln, ln2)
     self.resize(size)
示例#32
0
 def helpClicked(self):
     dialog = displayobject.AnObject(QtWidgets.QDialog(), self.help,
              title='Help for getting MERRA-2 data (' + fileVersion() + ')', section='getmerra2')
     dialog.exec_()
示例#33
0
    def doitClicked(self):
        def do_zipfile(zip_in, temp_dir):  # copy multiple files
            zf = zipfile.ZipFile(zip_in, 'r')
            ctr = 0
            for zi in zf.infolist():
                if zi.filename[:-4] == '.exe':
                    if temp_dir is None:
                        temp_dir = tempfile.gettempdir() + '/'
                    zf.extract(zi, temp_dir)
                    newver = credits.fileVersion(program=temp_dir +
                                                 zi.filename)
                    if newver != '?':
                        curver = credits.fileVersion(program=zi.filename)
                        if newver > curver or curver == '?':
                            if not self.debug:
                                if os.path.exists(zi.filename + '~'):
                                    os.remove(zi.filename + '~')
                                if cur_verson != '?':
                                    os.rename(zi.filename, zi_filename + '~')
                                os.rename(temp_dir + zi.filename, zi.filename)
                            ctr += 1
                else:
                    newtime = datetime.fromtimestamp(
                        time.mktime(zi.date_time + (0, 0, -1)))
                    try:
                        curtime = datetime.fromtimestamp(
                            int(os.path.getmtime(zi.filename)))
                    except:
                        curtime = 0
                    if curtime == 0 or newtime > curtime:
                        # print(zi.filename, newtime, curtime)
                        if not self.debug:
                            if os.path.exists(zi.filename + '~'):
                                os.remove(zi.filename + '~')
                            if curtime != 0:
                                os.rename(zi.filename, zi.filename + '~')
                            zf.extract(zi)
                            date_time = time.mktime(zi.date_time + (0, 0, -1))
                            os.utime(zi.filename, (date_time, date_time))
                        ctr += 1
            if ctr == 0:
                msg = 'Current is newer'
            else:
                msg = f'Updated {ctr} files'
            return msg

        default_suffix = sys.argv[0][sys.argv[0].rfind('.'):]
        temp_dir = None
        for p in range(len(self.newbox)):
            if self.newbox[p].checkState() == QtCore.Qt.Checked:
                self.newbox[p].setCheckState(QtCore.Qt.Unchecked)
                self.newbox[p].setFlags(self.newbox[p].flags()
                                        ^ QtCore.Qt.ItemIsUserCheckable)
                s = self.newprog[p].rfind('.')
                if s < 0:
                    newprog = self.newprog[p]
                    suffix = default_suffix
                else:
                    newprog = self.newprog[p][:s]
                    suffix = self.newprog[p][s:]
                if self.table.item(p, 2).text().find('(local)') > 0:
                    if suffix == '.zip':  # copy multiple files
                        msg = do_zipfile(self.local + newprog + suffix,
                                         temp_dir)
                        self.table.setItem(p, 3,
                                           QtWidgets.QTableWidgetItem(msg))
                        continue
                    else:
                        curver = credits.fileVersion(program=newprog + suffix)
                        #  print(newprog, suffix, curver, self.table.item(p, 2).text())
                        if curver != '?':
                            if self.table.item(p, 2).text() < curver:
                                self.table.setItem(
                                    p, 3,
                                    QtWidgets.QTableWidgetItem(
                                        'Current is newer'))
                                continue
                    if not self.debug:
                        if os.path.exists(newprog + suffix + '~'):
                            os.remove(newprog + suffix + '~')
                        os.rename(newprog + suffix, newprog + suffix + '~')
                        copy2(self.local + newprog + suffix, newprog + suffix)
                    self.table.setItem(p, 3,
                                       QtWidgets.QTableWidgetItem('Updated'))
                else:
                    command = '%s %snew%s %s%s%s' % (self.wget_cmd, newprog,
                                                     suffix, self.host,
                                                     newprog, suffix)
                    command = command.split()
                    if self.debug:
                        response = '200 OK'
                    else:
                        pid = subprocess.Popen(command, stderr=subprocess.PIPE)
                        response = get_response(pid.communicate()[1])
                        if response != '200 OK':
                            errmsg = 'Error ' + response
                            self.table.setItem(
                                p, 3, QtWidgets.QTableWidgetItem(errmsg))
                            continue
                    if suffix == '.zip':  # copy multiple files
                        msg = do_zipfile(newprog + 'new' + suffix, temp_dir)
                        self.table.setItem(p, 3,
                                           QtWidgets.QTableWidgetItem(msg))
                        continue
                    else:
                        if os.path.exists(newprog + 'new' + suffix):
                            newver = credits.fileVersion(program=newprog +
                                                         'new')
                            if newver != '?':
                                if newver < self.table.item(p, 3).text():
                                    if not self.debug:
                                        os.rename(
                                            newprog + 'new' + suffix,
                                            newprog + '.' + newver + suffix)
                                    self.table.setItem(
                                        p, 3,
                                        QtWidgets.QTableWidgetItem(
                                            'Current is newer'))
                                    continue
                    if not self.debug:
                        if os.path.exists(newprog + suffix + '~'):
                            os.remove(newprog + suffix + '~')
                        os.rename(newprog + suffix, newprog + suffix + '~')
                        os.rename(newprog + 'new' + suffix, newprog + suffix)
                    self.table.setItem(p, 3,
                                       QtWidgets.QTableWidgetItem('Updated'))
        self.table.resizeColumnsToContents()