Example #1
0
 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
Example #2
0
 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
Example #3
0
def about(title):
    try:
        import pulp
    except ImportError:
        pulp_version = "(missing!)"
    else:
        pulp_version = pulp.VERSION
    
    QMessageBox.information(None, "About", """
        <h1>{}</h1>
        <h3>Version {}</h3>

        <p>&copy; 2014 Oleh Prypin &lt;<a href="mailto:[email protected]">[email protected]</a>&gt;<br/>
           &copy; 2014 Stefan Walzer &lt;<a href="mailto:[email protected]">[email protected]</a>&gt;</p>

        <p>License: <a href="http://www.gnu.org/licenses/gpl.txt">GNU General Public License Version 3</a></p>

        Using:
        <ul>
        <li>Python {}
        <li>Qt {}
        <li>{} {}
        <li>PuLP {}
        </ul>
    """.format(
        title, __version__,
        sys.version.split(' ', 1)[0],
        qt.version_str,
        qt.module, qt.module_version_str,
        pulp_version
    ))
Example #4
0
def about():
    import lxml
    import cssselect
    
    QMessageBox.information(None, "About", u"""
        <h1>Steam Notifier</h1>
        <h3>Version {}</h3>

        <p>(C) 2014-2015 Oleh Prypin &lt;<a href="mailto:[email protected]">[email protected]</a>&gt;</p>

        <p>License: <a href="http://www.gnu.org/licenses/gpl.txt">GNU General Public License Version 3</a></p>

        Using:
        <ul>
        <li>Python {}
        <li>Qt {}, {} {}
        <li>lxml {} (cssselect {})
        </ul>
    """.format(
        __version__,
        sys.version.split(' ', 1)[0],
        qt.version_str,
        qt.module, qt.module_version_str,
        lxml.etree.__version__, cssselect.__version__
    ))
Example #5
0
 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
Example #6
0
def about(title):
    try:
        import pulp
    except ImportError:
        pulp_version = "(missing!)"
    else:
        pulp_version = pulp.VERSION

    QMessageBox.information(
        None, "About", """
        <h1>{}</h1>
        <h3>Version {}</h3>

        <p>&copy; 2014 Oleh Prypin &lt;<a href="mailto:[email protected]">[email protected]</a>&gt;<br/>
           &copy; 2014 Stefan Walzer &lt;<a href="mailto:[email protected]">[email protected]</a>&gt;</p>

        <p>License: <a href="http://www.gnu.org/licenses/gpl.txt">GNU General Public License Version 3</a></p>

        Using:
        <ul>
        <li>Python {}
        <li>Qt {}
        <li>{} {}
        <li>PuLP {}
        </ul>
    """.format(title, __version__,
               sys.version.split(' ', 1)[0], qt.version_str, qt.module,
               qt.module_version_str, pulp_version))
Example #7
0
 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
Example #8
0
def information():
    with open('README.md') as f:
        s = f.read()
    s = s.split('\n\n\n')[2].split('\n\n', 1)[1]
    s = re.sub(r'<(.+?)>', r'<a href="\1">\1</a>', s)
    s = re.sub(r'\[(.+?)\]\((.+?)\)', r'<a href="\2">\1</a>', s)
    s = re.sub(r'\*(.+?)\*', r'<i>\1</i>', s)
    s = s.replace('\n\n', '<p>')
    QMessageBox.information(None, "Information", "<p>Welcome to <i>Steam Notifier</i>.<p>"+s)
Example #9
0
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))
Example #10
0
 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
Example #11
0
 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
Example #12
0
def load_file(file, scene, Cell=Cell, Column=Column, gz=False):
    if isinstance(file, basestring):
        file = (gzip.open if gz else io.open)(file, 'rb')
    jj = file.read()
    if not isinstance(jj, unicode):
        jj = jj.decode('utf-8')
    try:
        jj = json.loads(jj)
    except Exception as e:
        QMessageBox.warning(None, "Error", "Error while parsing JSON:\n{}".format(e))
        return False
    load(jj, scene, Cell=Cell, Column=Column)
    return True
Example #13
0
def load_file(file, scene, Cell=Cell, Column=Column, gz=False):
    if isinstance(file, basestring):
        file = (gzip.open if gz else io.open)(file, 'rb')
    jj = file.read()
    if not isinstance(jj, unicode):
        jj = jj.decode('utf-8')
    try:
        jj = json.loads(jj)
    except Exception as e:
        QMessageBox.warning(None, "Error",
                            "Error while parsing JSON:\n{}".format(e))
        return False
    load(jj, scene, Cell=Cell, Column=Column)
    return True
Example #14
0
 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
Example #15
0
 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
Example #16
0
 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
Example #17
0
 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
Example #18
0
 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
Example #19
0
 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
Example #20
0
 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
Example #21
0
 def close_file(self):
     result = False
     if not self.any_changes:
         result = True
     else:
         if self.current_file:
             msg = "The level \"{}\" has been modified. Do you want to save it?".format(self.current_file)
         else:
             msg = "Do you want to save this level?"
         btn = QMessageBox.warning(self, "Unsaved changes", msg, QMessageBox.Save|QMessageBox.Discard|QMessageBox.Cancel, QMessageBox.Save)
         if btn==QMessageBox.Save:
             if self.save_file(self.current_file):
                 result = True
         elif btn==QMessageBox.Discard:
             result = True
     if result:
         self.current_file = None
         self.scene.reset()
         self.no_changes()
     return result
Example #22
0
 def close_file(self):
     result = False
     if not self.any_changes:
         result = True
     else:
         if self.current_file:
             msg = "The level \"{}\" has been modified. Do you want to save it?".format(self.current_file)
         else:
             msg = "Do you want to save this level?"
         btn = QMessageBox.warning(self, "Unsaved changes", msg, QMessageBox.Save|QMessageBox.Discard|QMessageBox.Cancel, QMessageBox.Save)
         if btn==QMessageBox.Save:
             if self.save_file(self.current_file):
                 result = True
         elif btn==QMessageBox.Discard:
             result = True
     if result:
         self.current_file = None
         self.scene.reset()
         self.no_changes()
     return result
Example #23
0
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................</code>""".replace(
                "\n", "\r")
            self.find_levels_in_content()

        fill_levels_button = QPushButton("Simulate Fill Levels")
        fill_levels_button.clicked.connect(fill_levels)
        self.layout().addWidget(fill_levels_button)

    def fetch_ok(self):
        super(TestDialog, self).fetch_ok()
        self.plaintext_content.setPlainText(self.webpage_content)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = TestDialog()
    if dialog.exec_() == QDialog.Accepted:
        QMessageBox.information(None, "Selected level",
                                dialog.selected_level_file.read())
    else:
        QMessageBox.information(None, "Selected level", "NONE")
Example #24
0
 def fetch_error(self):
     self.fetch_in_progress.reset()
     QMessageBox.critical(self, "Error", "Cannot fetch web page")
Example #25
0
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................
	..................................................................</code>""".replace("\n","\r")
        self.find_levels_in_content()
      
      fill_levels_button = QPushButton("Simulate Fill Levels")
      fill_levels_button.clicked.connect(fill_levels)
      self.layout().addWidget(fill_levels_button)
      
    def fetch_ok(self):
      super(TestDialog,self).fetch_ok()
      self.plaintext_content.setPlainText(self.webpage_content)

if __name__=='__main__':
  app = QApplication(sys.argv)
  dialog = TestDialog()
  if dialog.exec_() == QDialog.Accepted:
    QMessageBox.information(None, "Selected level", dialog.selected_level_file.read())
  else:
    QMessageBox.information(None, "Selected level", "NONE")
  

Example #26
0
 def fetch_error(self):
   self.fetch_in_progress.reset()
   QMessageBox.critical(self, "Error", "Cannot fetch web page")