def load_file(self, fn=None): if not fn: try: dialog = QFileDialog.getOpenFileNameAndFilter except AttributeError: dialog = QFileDialog.getOpenFileName fn, _ = dialog(self, "Open", self.last_used_folder, "Hexcells/SixCells Level (*.hexcells *sixcells *.sixcellz)") if not fn: return if not self.close_file(): return self.status = "Loading a level..." if fn.endswith('.hexcells'): try: load_hexcells(fn, self.scene, Cell=Cell, Column=Column) except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return else: load_file(fn, self.scene, gz=fn.endswith('.sixcellz'), Cell=Cell, Column=Column) for it in self.scene.all(Column): it.cell = min(it.members, key=lambda m: (m.pos()-it.pos()).manhattanLength()) self.view.fitInView(self.scene.itemsBoundingRect().adjusted(-0.5, -0.5, 0.5, 0.5), qt.KeepAspectRatio) if isinstance(fn, basestring): self.current_file = fn self.last_used_folder = os.path.dirname(fn) self.no_changes() self.status = "Done", 1 return True
def save_file(self, fn=None): if not fn: try: dialog = QFileDialog.getSaveFileNameAndFilter except AttributeError: dialog = QFileDialog.getSaveFileName fn, _ = dialog(self, "Save", self.last_used_folder, "Hexcells level (*.hexcells)") if not fn: return self.status = "Saving..." try: level, status = save(self.scene) with open(fn, 'wb') as f: f.write(level.encode('utf-8')) if isinstance(status, basestring): QMessageBox.warning(None, "Warning", status + '\n' + "Saved anyway.") self.no_changes() self.current_file = fn self.last_used_folder = os.path.dirname(fn) self.status = "Done", 1 self.center_on(*common.level_center) return True except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1
def open_from_web_page(self): import webpage dialog = webpage.Dialog(self) if dialog.exec_() == QDialog.Rejected: return if not self.close_file(): return self.status = "Loading a level from web page..." try: load_hexcells(dialog.selected_level_file, self.scene, Cell=Cell, Column=Column) except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return for it in self.scene.all(Column): it.cell = min(it.members, key=lambda m: (m.pos() - it.pos()).manhattanLength()) self.view.fitInView( self.scene.itemsBoundingRect().adjusted(-0.5, -0.5, 0.5, 0.5), qt.KeepAspectRatio) self.no_changes() self.status = "Done", 1 return True
def show_exception(): from traceback import format_exc from qt.widgets import QMessageBox lines = format_exc().replace(' ', ' ').splitlines() try: index = next(i for i in range(len(lines)) if '"settings/config.py"' in lines[i]) lines = lines[index:] except StopIteration: pass QMessageBox.critical(None, "Steam Notifier", "Error traceback:\n"+'\n'.join(lines))
def load(self, level): if not self.close_file(): return self.status = "Loading a level..." try: load(level, self.scene, Cell=self.Cell, Column=self.Column) except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return self.prepare() self.status = "Done", 1 return True
def copy(self, padded=True, **kwargs): self.status = "Copying to clipboard..." try: level, status = save(self.scene, **kwargs) except Exception as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return if status: QMessageBox.warning(None, "Warning", status + '\n' + "Copied anyway.") if padded: level = '\t' + level.replace('\n', '\n\t') app.clipboard().setText(level) self.status = "Done", 1 return True
def copy(self): self.status = "Copying to clipboard..." f = io.BytesIO() try: r = save_hexcells(f, self.scene) if isinstance(r, basestring): QMessageBox.warning(None, "Warning", r+'\n'+"Copied anyway.") except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return f.seek(0) s = f.read().decode('utf-8') s = '\t'+s.replace('\n', '\n\t') app.clipboard().setText(s) self.status = "Done", 1 return True
def open_from_web_page(self): import webpage dialog = webpage.Dialog(self) if dialog.exec_() == QDialog.Rejected: return if not self.close_file(): return self.status = "Loading a level from web page..." try: load_hexcells(dialog.selected_level_file, self.scene, Cell=Cell, Column=Column) except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return for it in self.scene.all(Column): it.cell = min(it.members, key=lambda m: (m.pos()-it.pos()).manhattanLength()) self.view.fitInView(self.scene.itemsBoundingRect().adjusted(-0.5, -0.5, 0.5, 0.5), qt.KeepAspectRatio) self.no_changes() self.status = "Done", 1 return True
def save_file(self, fn=None): if not fn: try: dialog = QFileDialog.getSaveFileNameAndFilter except AttributeError: dialog = QFileDialog.getSaveFileName fn, _ = dialog( self, "Save", self.last_used_folder, "Hexcells level (*.hexcells);;SixCells format (JSON) (*.sixcells);;SixCells format (JSON, gzipped) (*.sixcellz)" ) if not fn: return self.status = "Saving..." if fn.endswith('.hexcells'): try: r = save_hexcells(fn, self.scene) if isinstance(r, basestring): QMessageBox.warning(None, "Warning", r + '\n' + "Saved anyway.") self.no_changes() self.current_file = fn self.last_used_folder = os.path.dirname(fn) self.status = "Done", 1 return True except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return try: gz = fn.endswith('.sixcellz') except AttributeError: gz = False save_file(fn, self.scene, pretty=True, gz=gz) self.no_changes() self.current_file = fn self.last_used_folder = os.path.dirname(fn) self.status = "Done", 1 return True
def save_file(self, fn=None): if not fn: try: dialog = QFileDialog.getSaveFileNameAndFilter except AttributeError: dialog = QFileDialog.getSaveFileName fn, _ = dialog(self, "Save", self.last_used_folder, "Hexcells level (*.hexcells);;SixCells format (JSON) (*.sixcells);;SixCells format (JSON, gzipped) (*.sixcellz)" ) if not fn: return self.status = "Saving..." if fn.endswith('.hexcells'): try: r = save_hexcells(fn, self.scene) if isinstance(r, basestring): QMessageBox.warning(None, "Warning", r+'\n'+"Saved anyway.") self.no_changes() self.current_file = fn self.last_used_folder = os.path.dirname(fn) self.status = "Done", 1 return True except ValueError as e: QMessageBox.critical(None, "Error", str(e)) self.status = "Failed", 1 return try: gz = fn.endswith('.sixcellz') except AttributeError: gz = False save_file(fn, self.scene, pretty=True, gz=gz) self.no_changes() self.current_file = fn self.last_used_folder = os.path.dirname(fn) self.status = "Done", 1 return True
def fetch_error(self): self.fetch_in_progress.reset() QMessageBox.critical(self, "Error", "Cannot fetch web page")