Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial commit

This is the base for the Qt / QGraphicsScene rewrite of picmi. The
chaotic first phase of development should be over and therefore we can
finally get started on a decent version history.

Most old functionality has been reimplemented. Still missing are
highscore handling, layout and graphics improvements and generally lots
of polish and refactoring.
  • Loading branch information...
commit 04deaa94e2d86dfb13a77da5ce5b53e63fc8afa0 0 parents
@schuay authored
Showing with 4,726 additions and 0 deletions.
  1. +6 −0 .gitignore
  2. +1 −0  AUTHORS
  3. +280 −0 COPYING
  4. +76 −0 INSTALL
  5. +36 −0 README
  6. BIN  gfx/background.jpg
  7. BIN  gfx/icon.png
  8. +780 −0 gfx/picmi.svg
  9. +62 −0 picmi.pro
  10. +24 −0 src/config.h
  11. +34 −0 src/constants.h
  12. +128 −0 src/gui/cellitem.cpp
  13. +63 −0 src/gui/cellitem.h
  14. +65 −0 src/gui/dragmanager.cpp
  15. +55 −0 src/gui/dragmanager.h
  16. +50 −0 src/gui/graphicsitem.h
  17. +32 −0 src/gui/helpwindow.cpp
  18. +40 −0 src/gui/helpwindow.h
  19. +95 −0 src/gui/helpwindow.ui
  20. +32 −0 src/gui/highlightitem.cpp
  21. +31 −0 src/gui/highlightitem.h
  22. +111 −0 src/gui/mainwindow.cpp
  23. +58 −0 src/gui/mainwindow.h
  24. +141 −0 src/gui/mainwindow.ui
  25. +37 −0 src/gui/pausebanneritem.cpp
  26. +38 −0 src/gui/pausebanneritem.h
  27. +65 −0 src/gui/pixmapitem.cpp
  28. +50 −0 src/gui/pixmapitem.h
  29. +23 −0 src/gui/reloadableitem.cpp
  30. +38 −0 src/gui/reloadableitem.h
  31. +108 −0 src/gui/renderer.cpp
  32. +76 −0 src/gui/renderer.h
  33. +230 −0 src/gui/scene.cpp
  34. +86 −0 src/gui/scene.h
  35. +86 −0 src/gui/settingswindow.cpp
  36. +55 −0 src/gui/settingswindow.h
  37. +225 −0 src/gui/settingswindow.ui
  38. +128 −0 src/gui/streakitem.cpp
  39. +62 −0 src/gui/streakitem.h
  40. +47 −0 src/gui/view.cpp
  41. +43 −0 src/gui/view.h
  42. +97 −0 src/logic/board.cpp
  43. +71 −0 src/logic/board.h
  44. +73 −0 src/logic/boardmap.cpp
  45. +45 −0 src/logic/boardmap.h
  46. +111 −0 src/logic/boardstate.cpp
  47. +70 −0 src/logic/boardstate.h
  48. +61 −0 src/logic/elapsedtime.cpp
  49. +43 −0 src/logic/elapsedtime.h
  50. +191 −0 src/logic/picmi.cpp
  51. +74 −0 src/logic/picmi.h
  52. +29 −0 src/main.cpp
  53. +19 −0 src/outofboundsexception.cpp
  54. +32 −0 src/outofboundsexception.h
  55. +88 −0 src/settings.cpp
  56. +73 −0 src/settings.h
  57. +20 −0 src/systemexception.cpp
  58. +32 −0 src/systemexception.h
6 .gitignore
@@ -0,0 +1,6 @@
+*.o
+moc_*
+*.pro.user
+picmi
+Makefile
+ui_*.h
1  AUTHORS
@@ -0,0 +1 @@
+Jakob Gruber <jakob.gruber@gmail.com>
280 COPYING
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
76 INSTALL
@@ -0,0 +1,76 @@
+PICMI
+
+
+
+General Information
+-------------------
+
+Picmi has the following dependencies:
+
+At compile time:
+qt, boost, cmake
+
+At run time:
+qt
+
+
+The default installation directories are
+
+$prefix/share/picmi (gfx)
+$prefix/bin (executable)
+$prefix/share/applications (.desktop file)
+~/.config/picmi/ (user configurations and highscores, created at runtime)
+
+$prefix can be configured by setting the CMAKE_INSTALL_PREFIX variable when running cmake and defaults to /usr/local/ if not set.
+
+
+Installation from AUR (Archlinux)
+-------------------
+
+Install using your favorite AUR helper or manually with wget && makepkg && pacman -U.
+
+Package Name: picmi
+URL:
+
+
+
+Installation on Ubuntu
+-------------------
+
+Packages are now available from my personal package archive, located at
+
+ppa:jakob-gruber/picmi
+
+To install, open a terminal and enter:
+
+sudo add-apt-repository ppa:jakob-gruber/picmi
+sudo apt-get update
+sudo apt-get install picmi
+
+For more information on adding ppas to your source list,
+see https://launchpad.net/+help/soyuz/ppa-sources-list.html
+
+
+Manual Installation
+-------------------
+
+Check above for archlinux and ubuntu installation packages.
+
+In the picmi directory containing CMakeLists.txt, execute:
+
+cmake -DCMAKE_INSTALL_PREFIX="/usr" .
+make
+make install
+
+CMAKE_INSTALL_PREFIX can be set as required.
+This will install to the default directories as specified above. For packaging,
+
+make DESTDIR="/your/packaging/dir" install
+
+will install to /your/packaging/dir.
+
+All done, execute picmi to run the game.
+
+
+
+Enjoy!
36 README
@@ -0,0 +1,36 @@
+PICMI
+
+
+Project Information
+-------------------
+
+Picross is a number logic game in which cells in a grid have to be colored or left
+blank according to numbers given at the side of the grid to reveal a hidden picture.
+
+
+Controls
+-------------------
+
+The ingame help provides information about controls.
+
+
+License
+-------------------
+
+Picmi is licensed under the terms of the GNU General Public License version 2, or
+(at your option) any later version.
+
+
+Contact / More Information
+-------------------
+
+Email: jakob.gruber@gmail.com
+
+
+Sources
+-------------------
+
+Font:
+Default picross background: Atra Dot by Eugene Trounev (included in the KDE wallpapers collection)
+
+Enjoy!
BIN  gfx/background.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  gfx/icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
780 gfx/picmi.svg
@@ -0,0 +1,780 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="picmi.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#SVGID_2_"
+ id="linearGradient9136"
+ gradientUnits="userSpaceOnUse"
+ x1="387.12701"
+ y1="583.5293"
+ x2="340.10501"
+ y2="571.67981" />
+ <linearGradient
+ id="SVGID_2_"
+ gradientUnits="userSpaceOnUse"
+ x1="387.12701"
+ y1="583.5293"
+ x2="340.10501"
+ y2="571.67981">
+ <stop
+ offset="0"
+ style="stop-color:#FFFFFF"
+ id="stop1354" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop1356" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#SVGID_1_"
+ id="linearGradient9525"
+ gradientUnits="userSpaceOnUse"
+ x1="441.4834"
+ y1="588.05469"
+ x2="412.94711"
+ y2="564.46472" />
+ <linearGradient
+ y2="564.46472"
+ x2="412.94711"
+ y1="588.05469"
+ x1="441.4834"
+ gradientUnits="userSpaceOnUse"
+ id="SVGID_1_">
+ <stop
+ id="stop1334"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <stop
+ id="stop1336"
+ style="stop-color:#000000"
+ offset="1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.99999999"
+ inkscape:cx="129.49999"
+ inkscape:cy="516.36367"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1030"
+ inkscape:window-x="1918"
+ inkscape:window-y="-3"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:#008080;fill-opacity:0.97021274999999996"
+ id="rect3147"
+ width="417"
+ height="405"
+ x="186"
+ y="364.36218" />
+ <g
+ id="box"
+ transform="translate(355.54569,508.86726)"
+ inkscape:label="#g3989">
+ <image
+ style="opacity:0"
+ y="0"
+ x="0"
+ id="image3105"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAAA3NCSVQICAjb4U/gAAAEI0lEQVRY he2YzU7zOhCG7cR2nTTQQClULJAQYssWifvmOrgDfiokoFIJDSGJ48T+FqP65Gt+6vQszlkwi6pJ 3cmTd2acmeCyLNH/yZz/GmDbfoF22S/QLiM9v+V5niRJtbH+esQYY4wdx3Fd19kYxtgcUkoJIa7r 7gkURdFyuZRSxnGcJImUEoCqqjKf/XyO4yCEgIAQwjn3PG8ymYzH4yAIptMpxtgWSAixXC4Xi8Xj 42Oe50KIoiiUUmVZaq1BsPp6pVRVVXpjdSzXdV3X5ZwTQjzPC8Pw+vp6Pp8jhE5OTmyBVqvV6+vr /f3929tbFEV5npdlWZalCV+/PE0gCBzn/PT0dLVa3d7eUkptgbTWURQ9PT09Pz8/PDykaQooZgEk h0kayBu4JJysA219eX9/xxhfXFzMZjMpJaV0N1Ce519fX2maRlEkhIjj2FIPw+o4DmOMc97MEozx 5+dnHMfr9bosS1ugLMu+v7+zLBNCDKJhjDHGCCGQ0U3TWgshsizLsqy1bFuAyrIsimK9XkspLdOF Uur7fvN2W62qKimlEEIpZQUEFQ530PqfLRuNRgcHBzYoCCGttVJKCNFVHC1AVVUppYqisATqEoYQ EgQBQihN06Io6j9JKZVSrc5bIg07CtDUN5Uu69rBgyCAGgyCgJB/7hycg1RWQGbrs6HpAoJdwBxy zuu/ml3UFgghBPh7K7T1zDIKaa0xxoOBwCxDZuj/8vt32cP+VF8/AKjnMl3WdN26JaKNQnA4TCFL lC6gHg+AMjhk/U7tL1/naGINABok0iD0wSHbwwaFDPVmRTsQ3ETXA/LfAIFCW0W3GwhQtpqbQUBN MzULzdMAIIiuaYr3A+o6o7U28gzIIUDpEXYoopEHmtoe7dsVQruE7b98DxAo1KN9Z1JDp2xDg9r2 9C4gtHnuDlbIDHv7AW2ZlNKAwrjY5bwzhwaFrNn7waRmvtcbtH7nLUCAD5OvvUJNkdI0hV4sjuN6 BCmlZtBuumppYaEQPM/zPM++8oUQnufVz0gpoyhqrmSMUUq3OjhjLacgxr7vc87t8zrLMpt2RWs9 2lir8xYgxthoNJpMJqPRiDFmCaSUSpLEZqXruowxz/Nap4OWkHHOfd8/PDw8Pj4Ow1AIAQ1/fS8x i82jG/LUEigIgiAIbIHG4/F0Op3NZvP5/O7u7uXlJYoiGNbqnb9pJOqjvnFiZn74hLwZj8dHR0eT yeTy8hJeiVgBOY5zfn5eVZXv+4vF4ubmZr1eJ0lSFAUMa9Budw21ZryHXCSEwFwLSen7/tXV1dnZ WRiGrYrirqkqz/OPj4+fn580TWEUhwESRDI0XVimx4BSopQyxnzfh9QMw7DrhVUnEFhRFGamBm16 IOooqBZKEzjXdYGs7++/b/J32C/QLvsF2mV/ALqG9ckUDkJKAAAAAElFTkSuQmCC "
+ height="48"
+ width="48" />
+ <g
+ id="g3133">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3147"
+ d="M 9.2799175,41.017782 C 6.2076286,39.729131 5.7877351,37.165964 6.1684081,22.024113 6.5956756,5.0288939 5.7192447,5.7775962 24.702846,6.1908319 c 9.968392,0.2169923 14.589582,0.6967517 15.5,1.6091681 1.845459,1.8495078 1.845477,30.550465 2.1e-5,32.4 -1.572477,1.575953 -27.481807,2.261146 -30.9229495,0.817782 z"
+ style="fill:#cfcfcf" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3145"
+ d="M 10.279917,40.019521 C 7.233611,38.739381 6.7756485,36.091884 7.1641941,22.007419 7.598392,6.2680999 7.0021491,6.7718678 24.702875,7.1889217 c 9.142829,0.2154179 13.601756,0.7108442 14.5,1.6110783 1.83959,1.843667 1.839581,28.556345 -10e-6,30.4 -1.573174,1.576648 -25.507423,2.254816 -28.922948,0.819521 z"
+ style="fill:#a1a1a1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3143"
+ d="M 10.222506,38.443296 C 8.1228451,36.972636 8,36.179741 8,24.098284 8,7.504694 7.5129872,8 23.828741,8 40.435743,8 40.273905,7.8314723 39.829858,24.662553 39.539635,35.663058 39.266755,37.335693 37.55887,38.582695 34.676752,40.687057 13.270075,40.577896 10.222506,38.443296 z"
+ style="fill:#6d6d6d" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3141"
+ d="m 10.2,37.8 c -1.6626314,-1.662631 -1.6626314,-25.937369 0,-27.6 1.662631,-1.6626314 25.937369,-1.6626314 27.6,0 1.513455,1.513455 1.65194,24.087026 0.164816,26.865741 C 37.024359,38.823001 35.76156,39 24.164816,39 15.569959,39 11.007989,38.607989 10.2,37.8 z"
+ style="fill:#4a4a4a" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3139"
+ d="M 12.391947,38.088391 C 11.146371,37.545431 10.021251,35.856254 9.6419467,33.959734 8.6598589,29.049294 8.8784614,15.44987 9.9863207,12.535979 L 10.972641,9.9417592 24.236321,10.22088 37.5,10.5 37.781138,23.418862 c 0.154626,7.105374 -0.07037,13.26452 -0.5,13.686991 -1.201037,1.181035 -22.504564,2.022024 -24.889191,0.982538 z"
+ style="fill:#2b2b2b" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3137"
+ d="M 11.113789,36.212617 C 10.490039,35.047129 10,29.316713 10,23.188186 c 0,-8.605918 0.327007,-11.214688 1.531004,-12.213917 1.132674,-0.940036 4.380041,-1.1203215 12.481434,-0.692937 6.022736,0.317727 11.408784,0.860963 11.968996,1.207193 1.307083,0.807822 1.36148,24.181508 0.05815,24.98701 -0.528228,0.326462 -6.102023,0.869114 -12.386211,1.205892 -10.872088,0.58265 -11.479773,0.511469 -12.539586,-1.46881 z m 23.205756,-8.17663 c 1.394691,-7.052474 -1.005265,-14.720244 -3.416036,-10.914102 -1.005037,1.58676 -1.207106,11.92338 -0.280302,14.338592 1.049125,2.733976 2.799059,1.112741 3.696338,-3.42449 z"
+ style="fill:#171717" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3135"
+ d="m 11.434098,35.688857 c -0.276723,-0.721128 -0.3751,-6.458628 -0.218615,-12.75 L 11.5,11.5 17.388028,11.195978 c 7.824045,-0.403987 9.45594,0.213967 7.18673,2.721415 -1.714993,1.895046 -1.710972,4.62226 0.02777,18.832607 l 0.520019,4.25 -6.592658,0 c -4.515602,0 -6.751173,-0.413083 -7.09579,-1.311143 z"
+ style="fill:#040404" />
+ </g>
+ </g>
+ <g
+ transform="translate(414.4062,509.14378)"
+ id="cellframe"
+ inkscape:label="#g5305">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5319"
+ d="M 0,24 0,0 24,0 48,0 48,24 48,48 24,48 0,48 0,24 z M 42.5,23.35534 42.5,5.2106793 24.5,5.3553396 6.5,5.5 6.3087218,22.5 c -0.105203,9.35 -0.00283,17.572925 0.2275048,18.273166 0.3227758,0.981289 4.4931784,1.210542 18.1912784,1 L 42.5,41.5 l 0,-18.14466 z"
+ style="fill:#d0d0d0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5317"
+ d="M 0,24 0,0 24,0 48,0 48,24 48,48 24,48 0,48 0,24 z m 43.113135,17.709619 c 0.06222,-0.66529 0.174725,-9.360264 0.25,-19.322164 L 43.5,4.2749093 24.767505,4.2946224 C 7.6517288,4.3126341 5.9859483,4.4689124 5.4665546,6.1053771 4.8140477,8.1612444 4.9844464,38.628343 5.6629204,41.215371 c 0.4045357,1.542498 2.308596,1.714792 18.8934766,1.709619 13.693998,-0.0043 18.472738,-0.317253 18.556738,-1.215371 z"
+ style="fill:#ababab" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5315"
+ d="M 0,24 0,0 24,0 48,0 48,24 48,48 24,48 0,48 0,24 z M 43.930613,23.150431 43.98927,3.3008613 25.38809,3.5569754 C 13.059606,3.7267226 6.4013142,4.1995453 5.6434553,4.9590936 4.490126,6.1149936 4.4389776,40.28323 5.587794,42.142054 5.879426,42.613924 14.612666,43 24.994995,43 l 18.876961,0 0.05866,-19.849569 z"
+ style="fill:#8f8f8f" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5313"
+ d="M 0,24 0,0 24,0 48,0 48,24 48,48 24,48 0,48 0,24 z m 43.461748,19.031747 c 0.746579,-0.619606 1.020485,-7.115761 0.852658,-20.222297 L 44.067152,3.5 24.979887,3.4160598 C 7.4874771,3.3391333 5.8111381,3.4843747 4.9174146,5.1543123 3.7060787,7.417714 3.9034428,39.854234 5.1429842,42.226382 c 0.804143,1.538912 2.8739303,1.725937 19.0604768,1.722296 9.987106,-0.0022 18.653335,-0.414866 19.258287,-0.916931 z"
+ style="fill:#6c6c6c" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5311"
+ d="M 0,24 0,0 24,0 48,0 48,24 48,48 24,48 0,48 0,24 z M 44.432178,23.100342 44.364355,2.7006838 25.087951,2.7445682 C 12.381519,2.7734955 5.4341613,3.1658387 4.7042902,3.8957098 3.5681283,5.0318717 3.4636002,41.32307 4.5912346,43.147621 4.8951827,43.639419 13.998997,43.919895 24.821934,43.7709 L 44.5,43.5 44.432178,23.100342 z"
+ style="fill:#525252" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5309"
+ d="M 0,24 0,0 24,0 48,0 48,24 48,48 24,48 0,48 0,24 z m 44.210518,19.646625 c 1.196806,-1.196806 1.469009,-14.9715 0.806266,-40.8007567 -0.0092,-0.3597725 -9.033235,-0.5847725 -20.053341,-0.5 C 8.3588941,2.4735992 4.7644838,2.7569309 3.978756,4 2.5259464,6.298433 2.7262211,42.326221 4.2,43.8 c 1.8188535,1.818854 38.177666,1.679477 40.010518,-0.153375 z"
+ style="fill:#292929" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5307"
+ d="M 0.13618205,43.75 C 0.21108218,41.4125 0.46309771,40.479821 0.69621655,41.677379 1.5449892,46.037624 3.0269454,46.334956 22.674878,46.08707 32.89528,45.958125 42.324506,45.446922 43.628714,44.951063 L 46,44.049502 46,23.098075 C 46,4.4315726 45.820184,2.1113872 44.351191,1.8233242 43.444346,1.6454959 33.963597,1.6311368 23.28286,1.7914151 L 3.8633381,2.0828301 2.5410476,5.2914151 C 1.6693653,7.4065832 1.3254469,11.737396 1.5318339,18 1.7040261,23.225 1.4859459,29.975 1.0472112,33 0.47001427,36.979672 0.21502621,33.178853 0.12475581,19.25 L 0,0 24,0 48,0 48,24 48,48 24,48 0,48 0.13618205,43.75 z"
+ style="fill:#060606" />
+ </g>
+ <rect
+ style="fill:#ffffff;fill-opacity:0.51914894"
+ id="highlight"
+ width="48"
+ height="48"
+ x="295.54828"
+ y="445.32654"
+ inkscape:label="#rect3045-3" />
+ <rect
+ style="fill:#ffffff;fill-opacity:0"
+ id="transparent"
+ width="48"
+ height="48"
+ x="298.15744"
+ y="512.29865"
+ inkscape:label="#rect3045-3" />
+ <g
+ id="streak2"
+ inkscape:label="#g3918"
+ transform="translate(167,-20)">
+ <rect
+ y="694.50677"
+ x="68.132034"
+ height="48"
+ width="288"
+ id="rect3887-8"
+ style="fill:#ffffff;fill-opacity:0.35319148" />
+ <g
+ id="g3020-8-0"
+ transform="matrix(0.71910113,0,0,1,26.352939,70.205619)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3035-8-4"
+ d="m 58.599052,670.80115 c 0,-0.825 0.1125,-1.60969 0.25,-1.74375 0.1375,-0.13406 88.674998,-0.47156 196.749998,-0.75 l 196.5,-0.50625 0,-19.5 0,-19.5 -196.5,-0.50625 c -108.075,-0.27844 -196.612498,-0.61594 -196.749998,-0.75 -0.1375,-0.13406 -0.25,-0.91875 -0.25,-1.74375 0,-1.32833 22.888889,-1.5 199.999998,-1.5 l 200,0 0,24 0,24 -200,0 c -177.111109,0 -199.999998,-0.17167 -199.999998,-1.5 z"
+ style="fill:#c0c0c0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3033-6-1"
+ d="m 58.599052,670.80115 c 0,-1.32823 22.436508,-1.5 195.928568,-1.5 176.78355,0 196.08212,-0.15355 197.5,-1.57143 1.31124,-1.31124 1.57143,-4.52814 1.57143,-19.42857 0,-14.90043 -0.26019,-18.11733 -1.57143,-19.42857 -1.41788,-1.41788 -20.71645,-1.57143 -197.5,-1.57143 -173.49206,0 -195.928568,-0.17177 -195.928568,-1.5 0,-1.32833 22.888889,-1.5 199.999998,-1.5 l 200,0 0,24 0,24 -200,0 c -177.111109,0 -199.999998,-0.17167 -199.999998,-1.5 z"
+ style="fill:#b3b3b3" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3031-8-0"
+ d="m 58.599052,671.40814 c 0,-0.49116 0.711804,-1.16616 1.581787,-1.5 0.869984,-0.33385 89.204981,-0.60699 196.300001,-0.60699 150.11416,0 194.99309,-0.27488 195.91821,-1.2 1.69158,-1.69158 1.69158,-37.90842 0,-39.6 -0.92512,-0.92512 -45.80405,-1.2 -195.91821,-1.2 -107.09502,0 -195.430017,-0.27315 -196.300001,-0.60699 -0.869983,-0.33384 -1.581787,-1.00884 -1.581787,-1.5 0,-0.52104 83.307568,-0.89301 199.999998,-0.89301 l 200,0 0,24 0,24 -200,0 c -116.69243,0 -199.999998,-0.37197 -199.999998,-0.89301 z"
+ style="fill:#8d8d8d" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3029-3-4"
+ d="m 58.599052,671.30115 c 0,-0.66327 66.115008,-1 196.345008,-1 188.94587,0 196.40738,-0.0689 198,-1.82874 1.41456,-1.56306 1.65499,-4.51875 1.65499,-20.34501 0,-16.66827 -0.18252,-18.68145 -1.82874,-20.17126 -1.68858,-1.52815 -16.8639,-1.65499 -198,-1.65499 -130.11417,0 -196.171258,-0.33673 -196.171258,-1 0,-0.66333 67.333328,-1 199.999998,-1 l 200,0 0,24 0,24 -200,0 c -132.66667,0 -199.999998,-0.33667 -199.999998,-1 z"
+ style="fill:#505050" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3027-8-8"
+ d="m 58.599052,671.30115 c 0,-0.66329 66.488268,-1 197.464818,-1 194.20422,0 197.48191,-0.0319 198.5,-1.93426 0.60439,-1.12932 1.03518,-9.4796 1.03518,-20.06574 0,-10.58614 -0.43079,-18.93642 -1.03518,-20.06574 -1.01809,-1.90232 -4.29578,-1.93426 -198.5,-1.93426 -130.97655,0 -197.464818,-0.33671 -197.464818,-1 0,-0.66333 67.333328,-1 199.999998,-1 l 200,0 0,24 0,24 -200,0 c -132.66667,0 -199.999998,-0.33667 -199.999998,-1 z"
+ style="fill:#2c2c2c" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3025-3-7"
+ d="m 255.19542,671.30611 c 165.0384,-0.42283 197.36534,-0.72819 198.75,-1.8774 1.43605,-1.19187 1.65363,-3.97173 1.65363,-21.12756 0,-17.15583 -0.21758,-19.93569 -1.65363,-21.12756 -1.38466,-1.14921 -33.7116,-1.45457 -198.75,-1.8774 l -197.096368,-0.50496 200.249998,-0.24504 200.25,-0.24504 0,24 0,24 -200.25,-0.24504 -200.249998,-0.24504 197.096368,-0.50496 z"
+ style="fill:#1b1b1b" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3023-3-0"
+ d="m 255.69542,671.3061 c 165.46222,-0.42283 197.86529,-0.72814 199.25,-1.87739 1.43605,-1.19187 1.65363,-3.97173 1.65363,-21.12756 0,-17.15583 -0.21758,-19.93569 -1.65363,-21.12756 -1.38471,-1.14925 -33.78778,-1.45456 -199.25,-1.87739 l -197.596368,-0.50494 200.249998,-0.24506 200.25,-0.24505 0,24 0,24 -200.25,-0.24505 -200.249998,-0.24506 197.596368,-0.50494 z"
+ style="fill:#000000" />
+ </g>
+ </g>
+ <g
+ id="cross"
+ inkscape:label="#g3081"
+ transform="translate(72,16)">
+ <rect
+ y="429.09805"
+ x="282.84271"
+ height="48"
+ width="48"
+ id="rect3079"
+ style="fill:none" />
+ <g
+ transform="translate(6.0609152,-57.578695)"
+ id="g3071">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3077"
+ d="m 285.20516,524.72041 c -1.94896,-1.94896 -1.44282,-3.14527 3.3,-7.8 2.475,-2.42903 4.5,-5.09477 4.5,-5.92386 0,-0.82909 -2.12949,-3.66944 -4.73221,-6.31189 -3.91163,-3.97135 -4.54418,-5.10442 -3.64787,-6.53435 2.12317,-3.38722 5.28766,-2.67702 9.75553,2.18941 2.31304,2.51938 4.67738,4.58069 5.2541,4.58069 0.57672,0 3.11776,-2.28095 5.64676,-5.06877 4.03374,-4.44656 4.85139,-4.93325 6.66094,-3.96481 2.91189,1.55839 2.66751,5.59122 -0.46312,7.64249 -1.38923,0.91025 -3.47323,2.98546 -4.63112,4.61155 l -2.10524,2.95655 5.70551,5.76567 c 5.29624,5.35209 5.58745,5.88373 4.05969,7.4115 -2.75262,2.75262 -5.30653,1.88502 -10.39104,-3.52997 l -4.8599,-5.1758 -5.47264,5.1758 c -5.79525,5.48091 -6.66925,5.88593 -8.57939,3.97579 z"
+ style="fill:#a3a3a3" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3075"
+ d="m 286.03593,523.45748 c -0.99855,-1.20317 -0.28432,-2.44605 4.02261,-7 l 5.23673,-5.53707 -5.13907,-5.43381 c -3.35835,-3.55096 -4.93082,-5.97651 -4.53807,-7 1.05544,-2.75043 3.62375,-1.70206 8.67909,3.54277 l 4.92438,5.10896 5.3124,-5.24641 c 3.53348,-3.48958 5.84128,-5.04346 6.89178,-4.64034 2.59538,0.99594 1.8295,3.00694 -2.92062,7.66883 -2.475,2.42903 -4.5,5.05785 -4.5,5.84182 0,0.78398 2.25,3.6402 5,6.34717 2.75,2.70696 5,5.31651 5,5.79899 0,0.48249 -0.9731,1.18609 -2.16244,1.56358 -1.73348,0.55018 -3.14131,-0.32912 -7.09699,-4.43262 -2.714,-2.81542 -5.24532,-5.11894 -5.62515,-5.11894 -0.37983,0 -2.90677,2.25 -5.61542,5 -2.70865,2.75 -5.22413,5 -5.58996,5 -0.36583,0 -1.21151,-0.65832 -1.87927,-1.46293 z"
+ style="fill:#616161" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3073"
+ d="m 286.50611,522.92195 c -0.3394,-0.54916 1.65142,-3.39707 4.42403,-6.3287 l 5.04111,-5.33024 -2.32009,-3.14471 c -1.27606,-1.7296 -3.5114,-4.33602 -4.96744,-5.79206 -2.53994,-2.53994 -2.74933,-4.40583 -0.49441,-4.40583 0.58637,0 3.10723,2.25 5.60192,5 2.49469,2.75 4.95738,5 5.47264,5 0.51527,0 3.12035,-2.3625 5.78908,-5.24999 3.89464,-4.2139 5.10015,-5.00207 6.10847,-3.99375 1.00832,1.00832 0.32746,2.1992 -3.45001,6.03434 -2.58844,2.62795 -4.70625,5.45645 -4.70625,6.28554 0,0.82909 2.025,3.49483 4.5,5.92386 2.475,2.42903 4.5,4.99772 4.5,5.70821 0,2.59239 -2.59869,1.17621 -6.80548,-3.7087 -2.36802,-2.74973 -4.85993,-4.99951 -5.53759,-4.99951 -0.67766,0 -3.44828,2.25 -6.15693,5 -5.11151,5.18955 -5.9637,5.67676 -6.99905,4.00154 z"
+ style="fill:#222222" />
+ </g>
+ </g>
+ <path
+ style="fill:#000000;fill-opacity:1"
+ d=""
+ id="path3067"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1"
+ d=""
+ id="path3144"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1"
+ d=""
+ id="path3172"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1"
+ d=""
+ id="path3174"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1"
+ d=""
+ id="path3176"
+ inkscape:connector-curvature="0" />
+ <g
+ id="streak1"
+ inkscape:label="#g3196"
+ transform="translate(188,-7.0000001)">
+ <g
+ inkscape:label="#g3907"
+ id="streak1asfasf">
+ <rect
+ style="fill:#1a1a1a;fill-opacity:0.35319148"
+ id="rect3887"
+ width="288"
+ height="48"
+ x="48.48732"
+ y="617.99658" />
+ <g
+ transform="matrix(0.71910113,0,0,1,6.4684318,-5.556094)"
+ id="g3020-8">
+ <path
+ style="fill:#c0c0c0"
+ d="m 58.599052,670.80115 c 0,-0.825 0.1125,-1.60969 0.25,-1.74375 0.1375,-0.13406 88.674998,-0.47156 196.749998,-0.75 l 196.5,-0.50625 0,-19.5 0,-19.5 -196.5,-0.50625 c -108.075,-0.27844 -196.612498,-0.61594 -196.749998,-0.75 -0.1375,-0.13406 -0.25,-0.91875 -0.25,-1.74375 0,-1.32833 22.888889,-1.5 199.999998,-1.5 l 200,0 0,24 0,24 -200,0 c -177.111109,0 -199.999998,-0.17167 -199.999998,-1.5 z"
+ id="path3035-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b3b3b3"
+ d="m 58.599052,670.80115 c 0,-1.32823 22.436508,-1.5 195.928568,-1.5 176.78355,0 196.08212,-0.15355 197.5,-1.57143 1.31124,-1.31124 1.57143,-4.52814 1.57143,-19.42857 0,-14.90043 -0.26019,-18.11733 -1.57143,-19.42857 -1.41788,-1.41788 -20.71645,-1.57143 -197.5,-1.57143 -173.49206,0 -195.928568,-0.17177 -195.928568,-1.5 0,-1.32833 22.888889,-1.5 199.999998,-1.5 l 200,0 0,24 0,24 -200,0 c -177.111109,0 -199.999998,-0.17167 -199.999998,-1.5 z"
+ id="path3033-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#8d8d8d"
+ d="m 58.599052,671.40814 c 0,-0.49116 0.711804,-1.16616 1.581787,-1.5 0.869984,-0.33385 89.204981,-0.60699 196.300001,-0.60699 150.11416,0 194.99309,-0.27488 195.91821,-1.2 1.69158,-1.69158 1.69158,-37.90842 0,-39.6 -0.92512,-0.92512 -45.80405,-1.2 -195.91821,-1.2 -107.09502,0 -195.430017,-0.27315 -196.300001,-0.60699 -0.869983,-0.33384 -1.581787,-1.00884 -1.581787,-1.5 0,-0.52104 83.307568,-0.89301 199.999998,-0.89301 l 200,0 0,24 0,24 -200,0 c -116.69243,0 -199.999998,-0.37197 -199.999998,-0.89301 z"
+ id="path3031-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#505050"
+ d="m 58.599052,671.30115 c 0,-0.66327 66.115008,-1 196.345008,-1 188.94587,0 196.40738,-0.0689 198,-1.82874 1.41456,-1.56306 1.65499,-4.51875 1.65499,-20.34501 0,-16.66827 -0.18252,-18.68145 -1.82874,-20.17126 -1.68858,-1.52815 -16.8639,-1.65499 -198,-1.65499 -130.11417,0 -196.171258,-0.33673 -196.171258,-1 0,-0.66333 67.333328,-1 199.999998,-1 l 200,0 0,24 0,24 -200,0 c -132.66667,0 -199.999998,-0.33667 -199.999998,-1 z"
+ id="path3029-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#2c2c2c"
+ d="m 58.599052,671.30115 c 0,-0.66329 66.488268,-1 197.464818,-1 194.20422,0 197.48191,-0.0319 198.5,-1.93426 0.60439,-1.12932 1.03518,-9.4796 1.03518,-20.06574 0,-10.58614 -0.43079,-18.93642 -1.03518,-20.06574 -1.01809,-1.90232 -4.29578,-1.93426 -198.5,-1.93426 -130.97655,0 -197.464818,-0.33671 -197.464818,-1 0,-0.66333 67.333328,-1 199.999998,-1 l 200,0 0,24 0,24 -200,0 c -132.66667,0 -199.999998,-0.33667 -199.999998,-1 z"
+ id="path3027-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#1b1b1b"
+ d="m 255.19542,671.30611 c 165.0384,-0.42283 197.36534,-0.72819 198.75,-1.8774 1.43605,-1.19187 1.65363,-3.97173 1.65363,-21.12756 0,-17.15583 -0.21758,-19.93569 -1.65363,-21.12756 -1.38466,-1.14921 -33.7116,-1.45457 -198.75,-1.8774 l -197.096368,-0.50496 200.249998,-0.24504 200.25,-0.24504 0,24 0,24 -200.25,-0.24504 -200.249998,-0.24504 197.096368,-0.50496 z"
+ id="path3025-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000"
+ d="m 255.69542,671.3061 c 165.46222,-0.42283 197.86529,-0.72814 199.25,-1.87739 1.43605,-1.19187 1.65363,-3.97173 1.65363,-21.12756 0,-17.15583 -0.21758,-19.93569 -1.65363,-21.12756 -1.38471,-1.14925 -33.78778,-1.45456 -199.25,-1.87739 l -197.596368,-0.50494 200.249998,-0.24506 200.25,-0.24505 0,24 0,24 -200.25,-0.24505 -200.249998,-0.24506 197.596368,-0.50494 z"
+ id="path3023-3"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path3037"
+ d="m 135.77868,618.95853 0,-0.12303 0.27621,-0.0191 c 0.15192,-0.0105 19.60603,-0.0286 43.23137,-0.0402 l 42.95516,-0.0211 0,0.0797 0,0.0797 -8.02598,0.0206 c -4.41429,0.0113 -21.22977,0.0409 -37.36775,0.0657 -16.13798,0.0248 -31.9804,0.0532 -35.20539,0.0629 l -5.86362,0.0178 0,-0.12302 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3039"
+ d="m 136.57575,618.77429 -0.79707,-0.0109 0,-0.37827 0,-0.37826 43.23137,0 43.23137,0 0,0.36302 0,0.36302 -32.56953,-0.002 c -29.57979,-0.002 -51.50418,0.0166 -52.0781,0.0439 -0.12153,0.006 -0.57965,0.006 -1.01804,-3.9e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3041"
+ d="m 194.61469,618.74078 c 1.79401,-0.005 4.72029,-0.005 6.50285,0 1.78256,0.005 0.31474,0.008 -3.26183,0.008 -3.57658,0 -5.03503,-0.004 -3.24102,-0.008 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3043"
+ d="m 190.42702,618.70921 c 1.34853,-0.005 3.56455,-0.005 4.9245,0 1.35994,0.005 0.2566,0.008 -2.45187,0.008 -2.70848,0 -3.82116,-0.004 -2.47263,-0.008 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3045"
+ d="m 135.80235,618.74664 c -0.013,-0.0133 -0.0237,-0.18527 -0.0237,-0.38204 l 0,-0.35776 43.23137,0 43.23137,0 0,0.35513 -1e-5,0.35513 -38.81984,0.007 c -21.35091,0.004 -40.79438,0.0158 -43.20769,0.0269 -2.41332,0.0111 -4.39851,0.009 -4.41153,-0.004 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3047"
+ d="m 135.80235,618.74695 c -0.013,-0.0135 -0.0237,-0.18558 -0.0237,-0.38235 l 0,-0.35776 43.23137,0 43.23137,0 0,0.35513 0,0.35513 -39.00925,0.006 c -21.45509,0.004 -40.89855,0.0158 -43.2077,0.0272 -2.30914,0.0114 -4.2091,0.01 -4.22212,-0.004 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3049"
+ d="m 192.19727,618.7408 c 0.46444,-0.005 1.22442,-0.005 1.68885,0 0.46444,0.005 0.0844,0.009 -0.84442,0.009 -0.92887,0 -1.30886,-0.004 -0.84443,-0.009 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3051"
+ d="m 135.80235,618.74773 c -0.013,-0.014 -0.0237,-0.18636 -0.0237,-0.38313 l 0,-0.35776 43.23137,0 43.23137,0 0,0.36302 0,0.36302 -39.84845,0 c -21.91664,0 -41.36011,0.009 -43.20769,0.0201 -1.84759,0.0111 -3.36991,0.009 -3.38293,-0.005 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3053"
+ d="m 190.65048,618.77236 c 0.63805,-0.005 1.68214,-0.005 2.32019,0 0.63806,0.005 0.11601,0.009 -1.1601,0.009 -1.2761,0 -1.79815,-0.004 -1.16009,-0.009 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3055"
+ d="m 135.80235,618.74773 c -0.013,-0.014 -0.0237,-0.18636 -0.0237,-0.38313 l 0,-0.35776 43.23137,0 43.23137,0 0,0.36302 0,0.36302 -39.54589,2e-5 c -21.75025,10e-6 -41.19371,0.009 -43.2077,0.0201 -2.01399,0.011 -3.67246,0.009 -3.68548,-0.005 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3057"
+ d="m 168.40187,618.7459 c -0.12371,-0.002 4.34918,-0.004 9.93974,-0.004 5.59056,8e-5 9.7243,10e-4 9.18608,0.002 -2.0371,0.004 -18.91099,0.006 -19.12582,0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3059"
+ d="m 181.88701,618.77173 c 0.14866,-0.001 0.39193,-0.001 0.54059,0 0.14866,10e-4 0.027,0.002 -0.2703,0.002 -0.29732,0 -0.41895,-9.8e-4 -0.27029,-0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3061"
+ d="m 182.04129,618.7402 c 0.0382,-10e-4 0.0986,-10e-4 0.13416,2e-5 0.0356,10e-4 0.004,0.003 -0.0694,0.003 -0.0738,-10e-6 -0.10291,-10e-4 -0.0647,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3063"
+ d="m 168.1809,618.76713 c 0,-0.0123 0.57346,-0.0132 8.51724,-0.0132 4.68448,0 9.54801,-0.002 10.80784,-0.005 2.13442,-0.005 2.2906,-0.004 2.2906,0.008 0,0.0122 -0.26029,0.0131 -3.81766,0.0131 -2.09972,0 -6.96325,0.002 -10.80785,0.005 -6.52069,0.005 -6.99017,0.004 -6.99017,-0.008 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3065"
+ d="m 168.74911,618.76976 c -0.2626,-0.002 2.02237,-0.007 5.07772,-0.01 3.05535,-0.003 7.89225,-0.005 10.74866,-0.005 4.52634,10e-4 4.92888,0.002 3.13371,0.008 -2.32264,0.007 -18.22347,0.0129 -18.96009,0.007 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3069"
+ d="m 182.00736,618.73782 c -0.059,-0.003 -0.002,-0.004 0.14205,-0.004 0.23181,-8e-5 0.25037,0.002 0.0513,0.007 -0.0521,10e-4 -0.13909,1.1e-4 -0.19335,-0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3071"
+ d="m 181.9462,618.74806 c 0.10309,-10e-4 0.27177,-10e-4 0.37486,0 0.10309,10e-4 0.0187,0.002 -0.18743,0.002 -0.20617,0 -0.29052,-10e-4 -0.18743,-0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3074"
+ d="m 180.43492,619.00851 c 0.0488,-10e-4 0.12873,-10e-4 0.17756,0 0.0488,10e-4 0.009,0.003 -0.0888,0.003 -0.0977,0 -0.13762,-0.001 -0.0888,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3076"
+ d="m 168.35846,619.02245 c 0.19568,-0.007 14.31727,-0.0289 14.32358,-0.0226 0.002,0.002 -2.9766,0.008 -6.6193,0.0131 -3.64271,0.005 -6.9072,0.0107 -7.25444,0.0125 -0.38704,0.002 -0.56111,7.8e-4 -0.44984,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3078"
+ d="m 180.19619,618.99862 c 0.0299,-0.008 0.31318,-0.008 0.3867,-2.6e-4 0.0337,0.003 -0.0353,0.006 -0.17757,0.006 -0.12804,1.7e-4 -0.22215,-0.002 -0.20913,-0.006 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3080"
+ d="m 182.48718,618.99593 c 0.14069,-0.004 0.27202,-0.004 0.3354,-3e-5 0.0852,0.006 0.0431,0.007 -0.23123,0.007 l -0.3354,3e-5 0.23123,-0.007 0,0 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3082"
+ d="m 178.92955,619.69657 c -5.02413,-0.0186 -9.4979,-0.0341 -9.94171,-0.0345 l -0.80694,-5.8e-4 0,-0.31083 0,-0.31084 0.19927,-0.005 c 0.10959,-0.002 3.97254,-0.0101 8.58432,-0.0169 4.61178,-0.007 9.38564,-0.0147 10.60857,-0.0174 l 2.22352,-0.005 0,0.36827 0,0.36828 -0.86612,-10e-4 c -0.47637,-5.8e-4 -4.97678,-0.0163 -10.00091,-0.0349 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3084"
+ d="m 182.32155,619.00112 c 0.006,-0.002 0.0125,-0.002 0.0151,6.2e-4 0.003,0.003 -0.002,0.004 -0.0104,0.004 -0.009,-3.8e-4 -0.0111,-0.002 -0.005,-0.005 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3086"
+ d="m 181.84127,618.73322 c 0.0278,-6.8e-4 0.0722,-6.8e-4 0.0986,0 0.0265,6.9e-4 0.004,0.001 -0.0505,0.001 -0.0543,0 -0.0759,-5.6e-4 -0.0481,-0.001 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3088"
+ d="m 181.89606,618.74112 c 0.0232,-7e-4 0.0623,-7e-4 0.0868,-10e-6 0.0245,7e-4 0.006,10e-4 -0.0422,10e-4 -0.0477,0 -0.0678,-5.6e-4 -0.0446,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3090"
+ d="m 181.64276,618.74797 -0.27819,-0.002 0.35711,-0.001 c 0.51863,-0.002 1.05084,-9.1e-4 1.053,0.001 0.001,10e-4 -0.0948,0.002 -0.21285,0.002 -0.1181,2e-5 -0.31061,4.7e-4 -0.42781,9.9e-4 -0.11719,5.2e-4 -0.33826,5e-5 -0.49126,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3092"
+ d="m 173.58127,618.89256 0,-0.11298 2.3077,0 c 1.26923,0 3.701,-10e-4 5.40392,-0.003 l 3.09622,-0.003 0,0.1046 0,0.1046 -0.0681,0.003 c -0.0374,10e-4 -0.43133,0.003 -0.87533,0.003 -1.034,10e-6 -3.03464,0.005 -3.03224,0.007 0.001,10e-4 0.14618,0.003 0.32258,0.005 0.26602,0.002 0.20663,0.003 -0.34809,0.003 -0.53585,0 -0.60742,-5.3e-4 -0.35999,-0.003 0.16987,-10e-4 0.31014,-0.004 0.31173,-0.006 0.002,-0.002 -0.39753,-0.002 -0.88692,-5.8e-4 -0.48939,10e-4 -1.52993,0.003 -2.3123,0.004 -0.78238,10e-4 -1.90326,0.003 -2.49086,0.004 l -1.06835,0.002 0,-0.11299 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3094"
+ d="m 175.68148,618.73716 c 1.1562,-5.5e-4 3.04816,-5.5e-4 4.20436,0 1.1562,5.4e-4 0.21022,9.9e-4 -2.10218,9.9e-4 -2.3124,0 -3.25838,-4.5e-4 -2.10218,-9.9e-4 l 0,0 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3096"
+ d="m 181.6615,618.74111 c 0.044,-6.4e-4 0.11586,-6.4e-4 0.15981,0 0.0439,6.3e-4 0.008,10e-4 -0.0799,10e-4 -0.0879,0 -0.12386,-5.2e-4 -0.0799,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3098"
+ d="m 181.74614,618.74902 c 0.0189,-7.2e-4 0.0508,-7.3e-4 0.071,-10e-6 0.0202,7.2e-4 0.005,10e-4 -0.0343,10e-4 -0.0391,10e-6 -0.0556,-5.8e-4 -0.0367,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3100"
+ d="m 249.20618,618.6612 c 14.80978,-0.0177 39.04397,-0.0177 53.85376,0 14.80978,0.0177 2.69268,0.0322 -26.92688,0.0322 -29.61957,0 -41.73666,-0.0145 -26.92688,-0.0322 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3102"
+ d="m 336.3634,642.30508 0,-23.67545 -57.01048,0 -57.01048,0 0,-0.31567 0,-0.31567 57.07361,0 57.07362,0 0,23.99112 c 0,13.19512 -0.0284,23.99112 -0.0631,23.99112 -0.0347,0 -0.0631,-10.65395 -0.0631,-23.67545 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3104"
+ d="m 48.517352,618.71046 0,-0.56424 43.571429,0 c 38.611109,0 43.571429,0.0305 43.571429,0.26786 0,0.2342 -1.0377,0.26813 -8.25893,0.27008 -22.75859,0.006 -52.692892,0.20595 -70.892856,0.4732 l -7.991072,0.11734 0,-0.56424 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3106"
+ d="m 88.797054,618.86581 c 0,-0.0457 15.567296,-0.12559 30.412816,-0.15608 11.31128,-0.0232 13.95484,-0.0337 14.76341,-0.0583 1.03264,-0.0315 1.45577,-0.0693 1.6138,-0.14429 0.0772,-0.0366 0.10423,-0.098 0.0548,-0.12448 -0.20089,-0.10751 -1.73853,-0.15419 -6.43568,-0.19538 -2.07563,-0.0182 -24.20373,-0.0523 -35.810658,-0.0552 l -4.598518,-10e-4 0,-0.0674 0,-0.0674 23.488556,0 23.48855,0 0,0.38522 0,0.38521 -6.73646,10e-4 c -3.70506,7.5e-4 -6.94016,0.005 -7.1891,0.008 -0.24895,0.004 -4.10592,0.012 -8.57106,0.018 -4.46514,0.006 -8.84216,0.0151 -9.72671,0.0204 -1.51445,0.009 -3.13572,0.0147 -10.959397,0.0388 -1.774402,0.005 -3.354029,0.0145 -3.510282,0.02 -0.166602,0.006 -0.284097,0.003 -0.284097,-0.008 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3108"
+ d="m 88.797054,618.92352 0,-0.0415 0.967855,-10e-4 c 0.532321,-6.2e-4 1.39689,-0.005 1.921266,-0.009 1.018822,-0.008 4.795441,-0.0219 10.660855,-0.0385 1.99157,-0.006 4.61345,-0.0141 5.8264,-0.0187 1.21295,-0.005 6.91607,-0.0124 12.67361,-0.0171 8.12597,-0.007 9.29388,-0.005 5.21968,0.007 -15.94138,0.0481 -30.181847,0.1071 -35.531378,0.14713 l -1.738288,0.013 0,-0.0415 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3110"
+ d="m 88.797054,619.06819 0,-0.0835 1.401224,-0.0128 c 0.770673,-0.007 1.897941,-0.0128 2.505041,-0.0128 0.6071,-10e-6 1.099793,-0.007 1.094874,-0.0145 -0.0049,-0.008 0.300093,-0.0116 0.677806,-0.008 0.377714,0.004 2.571903,-0.003 4.875977,-0.0146 12.711844,-0.0635 36.877874,-0.13154 36.513674,-0.10282 l -0.0915,0.007 0,0.12414 c 0,0.0683 -0.002,0.12433 -0.005,0.12457 -0.0312,0.003 -42.777114,0.0759 -44.55025,0.0762 l -2.422046,3.8e-4 0,-0.0835 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3112"
+ d="m 222.25175,618.37131 0,-0.37342 0.0451,0 0.0451,0 0,0.32192 0,0.32191 11.29275,0 c 7.51992,0 11.29276,0.004 11.29276,0.0129 0,0.008 -0.34614,0.0137 -1.0076,0.0154 l -1.00759,0.003 0.67602,0.008 c 0.37181,0.005 0.82523,0.009 1.00759,0.0104 0.32237,0.002 0.33158,0.003 0.33158,0.0276 0,0.0257 -0.009,0.0258 -11.33782,0.0258 l -11.33782,0 0,-0.37343 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3114"
+ d="m 220.11207,618.92823 2.14179,-0.003 -0.004,-0.09 -0.004,-0.09 10.63605,-0.003 c 5.84982,-0.002 10.95329,-0.002 11.34103,1.4e-4 l 0.705,0.003 0,0.077 0,0.077 -2.01841,3e-4 c -1.11012,1.7e-4 -6.56415,0.009 -12.12007,0.019 -5.55591,0.0103 -10.71298,0.0174 -11.46014,0.0158 -0.94678,-0.002 -0.70939,-0.004 0.7833,-0.006 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3116"
+ d="m 209.65846,618.85612 0,-0.0856 1.87676,0 c 1.03222,-1e-5 3.86281,-0.004 6.29021,-0.009 l 4.41344,-0.009 0,0.0775 0,0.0775 -3.46058,0.008 c -1.90331,0.005 -4.73391,0.0122 -6.2902,0.0168 l -2.82963,0.008 0,-0.0856 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3118"
+ d="m 221.63126,618.7351 c 0.11554,-0.002 0.30096,-0.002 0.41205,10e-6 0.1111,0.002 0.0166,0.004 -0.21005,0.004 -0.22663,0 -0.31753,-0.002 -0.202,-0.004 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3120"
+ d="m 221.71474,618.74803 c 0.0552,-0.002 0.14213,-0.002 0.19315,3e-5 0.051,0.002 0.006,0.004 -0.10038,0.004 -0.10624,-2e-5 -0.14798,-0.002 -0.0928,-0.004 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3122"
+ d="m 222.35476,618.31981 0,-0.30904 11.28631,0 11.28632,0 0,0.30904 0,0.30904 -11.28632,0 -11.28631,0 0,-0.30904 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3124"
+ d="m 222.26041,618.89812 c -0.005,-0.0171 -0.008,-0.22662 -0.008,-0.46564 l -1.7e-4,-0.43459 0.0451,0 0.0451,0 0,0.32192 0,0.32191 5.20536,0.002 c 2.86294,10e-4 7.80127,0.006 10.97405,0.0103 3.17279,0.005 5.4587,0.0106 5.07981,0.0134 -0.65431,0.005 -0.67112,0.005 -0.33479,0.0138 0.19476,0.005 0.5714,0.01 0.83697,0.0105 0.49205,0.002 0.81765,0.0124 0.80387,0.0262 -0.004,0.004 -2.44809,0.0106 -5.43085,0.0142 l -5.42318,0.007 5.37739,0.003 c 2.95757,0.002 5.40428,0.007 5.43713,0.0113 l 0.0598,0.008 0,0.067 0,0.067 -7.88368,0.009 c -4.33603,0.005 -9.43423,0.0124 -11.32934,0.0171 l -3.44565,0.009 -0.008,-0.0311 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3126"
+ d="m 244.75946,618.73612 c 0.0796,-0.003 0.15069,-0.006 0.15802,-0.006 0.0154,-0.001 0.0178,-0.02 0.004,-0.0291 -0.005,-0.003 -0.0986,-0.008 -0.20751,-0.01 -0.23545,-0.005 6.59435,-0.002 13.06194,0.005 l 4.6167,0.005 0,0.0219 0,0.0219 -8.88882,-10e-4 c -4.88885,-7.6e-4 -8.82371,-0.004 -8.74413,-0.007 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3128"
+ d="m 248.28733,618.66245 c 0.0137,-0.002 0.0343,-0.002 0.0457,8e-5 0.0114,0.002 2.5e-4,0.003 -0.0249,0.003 -0.0251,-4e-5 -0.0345,-10e-4 -0.0208,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3130"
+ d="m 244.79373,618.65267 c -0.0775,-0.003 -0.67375,-0.007 -1.32504,-0.008 -0.65129,-10e-4 -1.35379,-0.004 -1.56111,-0.007 -0.20733,-0.003 4.31695,-0.006 10.05394,-0.007 5.9658,-8.4e-4 10.43089,10e-4 10.43089,0.005 0,0.004 -1.00604,0.009 -2.33214,0.0113 -3.70047,0.007 -15.11128,0.011 -15.26654,0.005 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3132"
+ d="m 244.9308,618.82408 0,-0.0723 8.52396,0 c 4.68818,0 8.61704,-0.002 8.73081,-0.005 l 0.20684,-0.005 0,0.0621 c 0,0.0342 -8.5e-4,0.0623 -0.002,0.0624 -0.005,5.9e-4 -16.57015,0.0299 -16.98185,0.0301 l -0.47786,1.8e-4 0,-0.0724 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3134"
+ d="m 246.84221,618.74427 c 1.05337,-0.002 3.20028,-0.002 4.77091,0 2.33327,0.003 1.9829,0.004 -1.91521,0.004 -2.69109,0 -3.936,-0.002 -2.8557,-0.004 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3136"
+ d="m 251.00264,618.68342 c -3.41001,-0.002 -6.20217,-0.006 -6.20479,-0.009 -0.003,-0.003 2.47213,-0.007 5.49943,-0.009 3.02731,-0.003 6.98716,-0.007 8.79966,-0.009 l 3.29547,-0.004 0,0.0194 0,0.0194 -2.59487,-0.002 c -1.42718,-9.2e-4 -5.38488,-0.003 -8.7949,-0.006 l 0,0 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3138"
+ d="m 244.1769,618.64544 c -0.33716,-0.002 3.24873,-0.005 7.96865,-0.006 4.71992,-0.001 8.58024,-4e-4 8.57849,10e-4 -0.005,0.005 -15.85788,0.01 -16.54714,0.005 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3140"
+ d="m 248.1728,618.66248 c 0.0135,-0.002 0.0375,-0.002 0.0533,-6e-5 0.0158,0.002 0.005,0.003 -0.0246,0.003 -0.0293,4e-5 -0.0422,-0.001 -0.0287,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3142"
+ d="m 248.12736,618.66259 c 0.009,-0.002 0.0232,-0.002 0.0305,1.5e-4 0.007,0.002 -4.6e-4,0.003 -0.0172,0.003 -0.0168,-8e-5 -0.0227,-0.002 -0.0132,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3146"
+ d="m 250.9303,618.68343 c -3.37023,-0.002 -6.12983,-0.006 -6.13245,-0.009 -0.003,-0.003 2.45499,-0.007 5.46136,-0.009 3.00636,-0.003 6.96621,-0.007 8.79966,-0.009 l 3.33354,-0.004 0,0.0195 0,0.0195 -2.66721,-0.002 c -1.46697,-9.3e-4 -5.42468,-0.003 -8.7949,-0.006 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3148"
+ d="m 244.1769,618.64544 c -0.33716,-0.002 3.24873,-0.005 7.96865,-0.006 4.71992,-0.001 8.58024,-4e-4 8.57849,10e-4 -0.005,0.005 -15.85788,0.01 -16.54714,0.005 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3150"
+ d="m 250.78561,618.68343 c -3.29065,-0.002 -5.98514,-0.006 -5.98776,-0.009 -0.003,-0.003 2.42072,-0.007 5.3852,-0.009 2.96449,-0.003 6.92433,-0.007 8.79967,-0.009 l 3.40969,-0.005 0,0.0196 0,0.0197 -2.8119,-0.002 c -1.54655,-9.2e-4 -5.50425,-0.003 -8.7949,-0.006 l 0,0 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3152"
+ d="m 249.06269,618.6623 c 0.007,-8.7e-4 0.0176,-8.6e-4 0.0234,4e-5 0.006,8.9e-4 1.3e-4,0.002 -0.0128,0.002 -0.0129,-2e-5 -0.0177,-7.5e-4 -0.0107,-0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3154"
+ d="m 248.54309,618.65829 c 0.1273,-5.7e-4 0.3356,-5.7e-4 0.46289,0 0.1273,5.7e-4 0.0232,0.001 -0.23144,0.001 -0.25459,0 -0.35874,-4.7e-4 -0.23145,-0.001 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3156"
+ d="m 246.61048,618.64364 0,-0.01 5.34961,0 c 5.1851,0 5.3496,2.2e-4 5.3496,0.007 0,0.007 -0.10294,0.007 -3.28418,0.01 -1.80629,0.001 -4.21362,0.003 -5.3496,0.003 l -2.06543,0 0,-0.01 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3158"
+ d="m 249.06653,618.65439 c 0.0392,-6.4e-4 0.10337,-6.4e-4 0.14258,0 0.0392,6.4e-4 0.007,10e-4 -0.0713,10e-4 -0.0784,0 -0.1105,-5.2e-4 -0.0713,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3160"
+ d="m 249.05701,618.6583 c 0.034,-6.5e-4 0.0885,-6.5e-4 0.12109,0 0.0326,6.5e-4 0.005,10e-4 -0.0618,10e-4 -0.0666,0 -0.0933,-5.3e-4 -0.0593,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3162"
+ d="m 249.03338,618.66232 c 0.006,-8.9e-4 0.0147,-8.7e-4 0.0195,6e-5 0.005,9.2e-4 -5e-5,0.002 -0.0108,0.002 -0.0108,-3e-5 -0.0147,-7.9e-4 -0.009,-0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3164"
+ d="m 249.03723,618.66243 c 0.004,-9.8e-4 0.01,-9.8e-4 0.0137,0 0.004,9.9e-4 6.8e-4,0.002 -0.007,0.002 -0.008,0 -0.0106,-8e-4 -0.007,-0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3166"
+ d="m 249.40149,618.68458 c -1.53398,-10e-4 -2.7895,-0.003 -2.79004,-0.003 -5.3e-4,-4.6e-4 -9.7e-4,-0.004 -9.7e-4,-0.009 0,-0.008 0.003,-0.008 0.7666,-0.008 0.42163,1.2e-4 1.16914,-7.4e-4 1.66113,-0.002 0.49199,-0.001 2.55435,-0.003 4.58301,-0.005 l 3.68847,-0.003 0,0.0162 0,0.0162 -2.55957,-9e-4 c -1.40776,-4.9e-4 -3.81464,-0.002 -5.34863,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3168"
+ d="m 249.40149,618.68459 c -1.53398,-10e-4 -2.7895,-0.003 -2.79004,-0.003 -5.3e-4,-4.6e-4 -9.7e-4,-0.004 -9.7e-4,-0.009 0,-0.008 0.003,-0.008 0.7666,-0.008 0.42163,10e-5 1.13486,-7.4e-4 1.58496,-0.002 0.4501,-10e-4 2.51245,-0.003 4.58301,-0.005 l 3.76464,-0.003 0,0.0162 0,0.0162 -2.55957,-9e-4 c -1.40776,-5e-4 -3.81464,-0.002 -5.34863,-0.003 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3170"
+ d="m 249.01184,618.65836 c 0.009,-8.2e-4 0.0241,-8.2e-4 0.0332,0 0.009,8.2e-4 0.002,10e-4 -0.0166,10e-4 -0.0183,0 -0.0257,-6.8e-4 -0.0166,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3178"
+ d="m 248.93198,618.6544 c 0.0232,-6.9e-4 0.0601,-6.9e-4 0.082,0 0.0219,7e-4 0.003,10e-4 -0.0422,10e-4 -0.0451,0 -0.063,-5.7e-4 -0.0398,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3180"
+ d="m 249.297,618.74032 -2.68652,-9.8e-4 0,-0.0234 0,-0.0234 2.29394,0 c 1.26167,0 3.669,10e-4 5.34961,0.003 l 3.05566,0.003 0,0.0228 0,0.0228 -2.66308,-9.7e-4 -5.34961,-0.002 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3182"
+ d="m 248.63684,618.74423 c 0.2605,-5.6e-4 0.68677,-5.6e-4 0.94727,0 0.2605,5.5e-4 0.0474,10e-4 -0.47363,10e-4 -0.521,0 -0.73414,-4.6e-4 -0.47364,-10e-4 z"
+ style="fill:#000000;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3184"
+ d="m 246.61048,618.82333 0,-0.0684 4.47949,0 c 2.46372,0 4.87104,-10e-4 5.34961,-0.003 l 0.87011,-0.003 0,0.0612 c 0,0.0337 -4.3e-4,0.0613 -9.7e-4,0.0615 -0.002,6.2e-4 -9.82,0.0188 -10.25977,0.019 l -0.43847,2e-4 0,-0.0684 z"
+ style="fill:#000000;fill-opacity:1" />
+ <rect
+ y="618.39752"
+ x="236.96916"
+ height="1.0606601"
+ width="33.543377"
+ id="rect3186"
+ style="fill:#000000;fill-opacity:1" />
+ <rect
+ y="618.64056"
+ x="332.20761"
+ height="2.0771263"
+ width="4.1984463"
+ id="rect3188"
+ style="fill:#000000;fill-opacity:1" />
+ <rect
+ y="618.508"
+ x="270.11478"
+ height="1.016466"
+ width="62.932503"
+ id="rect3190"
+ style="fill:#000000;fill-opacity:1" />
+ <rect
+ y="618.46381"
+ x="332.29599"
+ height="1.8119612"
+ width="3.9774756"
+ id="rect3192"
+ style="fill:#000000;fill-opacity:1" />
+ <rect
+ y="617.98718"
+ x="48.5"
+ height="1.5"
+ width="87.75"
+ id="rect3194"
+ style="fill:#000000;fill-opacity:1" />
+ </g>
+ <g
+ transform="translate(185.09515,-18.027045)"
+ id="divider"
+ inkscape:label="#g5898">
+ <rect
+ y="456.37219"
+ x="229.80971"
+ height="48"
+ width="48"
+ id="rect3045"
+ style="fill:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="dividerPart"
+ d="m 277,456.40625 0,48 1,0 0,-48 -1,0 z"
+ style="fill:#ffffff;fill-opacity:1" />
+ </g>
+ </g>
+</svg>
62 picmi.pro
@@ -0,0 +1,62 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2012-02-06T14:36:06
+#
+#-------------------------------------------------
+
+QT += core gui svg
+
+TARGET = picmi
+TEMPLATE = app
+
+SOURCES += src/systemexception.cpp \
+ src/settings.cpp \
+ src/outofboundsexception.cpp \
+ src/main.cpp \
+ src/logic/picmi.cpp \
+ src/logic/boardstate.cpp \
+ src/logic/boardmap.cpp \
+ src/logic/board.cpp \
+ src/gui/view.cpp \
+ src/gui/streakitem.cpp \
+ src/gui/scene.cpp \
+ src/gui/renderer.cpp \
+ src/gui/reloadableitem.cpp \
+ src/gui/pixmapitem.cpp \
+ src/gui/mainwindow.cpp \
+ src/gui/dragmanager.cpp \
+ src/gui/cellitem.cpp \
+ src/gui/highlightitem.cpp \
+ src/gui/helpwindow.cpp \
+ src/gui/settingswindow.cpp \
+ src/logic/elapsedtime.cpp \
+ src/gui/pausebanneritem.cpp
+
+HEADERS += src/settings.h \
+ src/outofboundsexception.h \
+ src/systemexception.h \
+ src/logic/picmi.h \
+ src/logic/boardstate.h \
+ src/logic/boardmap.h \
+ src/logic/board.h \
+ src/gui/view.h \
+ src/gui/streakitem.h \
+ src/gui/scene.h \
+ src/gui/renderer.h \
+ src/gui/reloadableitem.h \
+ src/gui/pixmapitem.h \
+ src/gui/mainwindow.h \
+ src/gui/graphicsitem.h \
+ src/gui/dragmanager.h \
+ src/gui/cellitem.h \
+ src/gui/highlightitem.h \
+ src/config.h \
+ src/gui/helpwindow.h \
+ src/gui/settingswindow.h \
+ src/logic/elapsedtime.h \
+ src/gui/pausebanneritem.h \
+ src/constants.h
+
+FORMS += src/gui/mainwindow.ui \
+ src/gui/helpwindow.ui \
+ src/gui/settingswindow.ui
24 src/config.h
@@ -0,0 +1,24 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define FILEPATH "/home/jakob/src/picmi-rewrite/gfx/"
+
+#endif // CONFIG_H
34 src/constants.h
@@ -0,0 +1,34 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+
+/* TODO: either ship this or choose another font */
+const QString FONT_NAME = "Ubuntu Mono";
+const int ZVALUE_BACKGROUND = -7;
+const int ZVALUE_HIGHLIGHT = -3;
+const int ZVALUE_CELLFRAME = 0;
+const int ZVALUE_STREAKFRAME = 0;
+const int ZVALUE_DIVIDER = 3;
+const int ZVALUE_CELLITEM = 7;
+const int ZVALUE_PAUSEBANNER = 7;
+const int ZVALUE_STREAKTEXT = 7;
+const int SECTION_SIZE = 5;
+
+#endif // CONSTANTS_H
128 src/gui/cellitem.cpp
@@ -0,0 +1,128 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#include "cellitem.h"
+
+#include <QKeyEvent>
+#include <QGraphicsSceneMouseEvent>
+
+#include "renderer.h"
+#include "src/constants.h"
+
+CellItem::CellItem(int x, int y, boost::shared_ptr<Picmi> game, Scene *scene, QGraphicsItem *parent) :
+ QGraphicsPixmapItem(parent), ReloadableItem(x, y), m_game(game), m_scene(scene)
+{
+ setZValue(ZVALUE_CELLITEM);
+ setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
+ setFlag(QGraphicsItem::ItemIsFocusable);
+ setAcceptHoverEvents(true);
+
+ reload(QSize());
+}
+
+void CellItem::refresh() {
+ switch(m_game->stateAt(m_x, m_y)) {
+ case Board::Nothing: setPixmap(m_transparent); break;
+ case Board::Box: setPixmap(m_box); break;
+ case Board::Cross: setPixmap(m_cross); break;
+ default: assert(0);
+ }
+}
+
+void CellItem::reload(const QSize &size) {
+ Q_UNUSED(size);
+ const int tilesize = Renderer::instance()->getTilesize();
+ setPos(m_x * tilesize, m_y * tilesize);
+
+ m_cross = Renderer::instance()->getPixmap(Renderer::Cross);
+ m_box = Renderer::instance()->getPixmap(Renderer::Box);
+ m_transparent = Renderer::instance()->getPixmap(Renderer::Transparent);
+
+ refresh();
+}
+
+void CellItem::mousePressEvent(QGraphicsSceneMouseEvent *event) {
+ if (m_dragmanager) {
+ /* a second button was clicked during a drag; ignored */
+ return;
+ }
+
+ m_dragmanager.reset(new DragManager(m_game, m_scene, QPoint(m_x, m_y)));
+ m_dragbutton = event->button();
+ switch (event->button()) {
+ case Qt::LeftButton:
+ m_dragmanager->init(Board::Box);
+ break;
+ case Qt::RightButton:
+ m_dragmanager->init(Board::Cross);
+ break;
+ default:
+ break;
+ }
+}
+
+void CellItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
+ Q_UNUSED(event);
+ m_scene->hover(m_x, m_y);
+}
+
+int CellItem::drag_offset(int pos) const {
+ const int tilesize = Renderer::instance()->getTilesize();
+ int offset = pos / tilesize;
+ if (pos < 0) {
+ offset--;
+ }
+ return offset;
+}
+
+void CellItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
+ int dx = drag_offset(event->pos().x());
+ int dy = drag_offset(event->pos().y());
+
+ if (m_game->outOfBounds(m_x + dx, m_y + dy)) {
+ return;
+ }
+
+ m_dragmanager->move(m_x + dx, m_y + dy);
+}
+
+void CellItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
+ if (event->button() == m_dragbutton) {
+ m_dragmanager.reset();
+ }
+}
+
+void CellItem::keyPressEvent(QKeyEvent *event) {
+ switch (event->key()) {
+ case Qt::Key_H:
+ case Qt::Key_Left: m_scene->move(-1, 0); break;
+ case Qt::Key_L:
+ case Qt::Key_Right: m_scene->move(1, 0); break;
+ case Qt::Key_K:
+ case Qt::Key_Up: m_scene->move(0, -1); break;
+ case Qt::Key_J:
+ case Qt::Key_Down: m_scene->move(0, 1); break;
+ case Qt::Key_Y: m_scene->move(-1, -1); break;
+ case Qt::Key_U: m_scene->move(1, -1); break;
+ case Qt::Key_B: m_scene->move(-1, 1); break;
+ case Qt::Key_N: m_scene->move(1, 1); break;
+ case Qt::Key_Space: m_scene->press(m_x, m_y, Board::Box); break;
+ case Qt::Key_X: m_scene->press(m_x, m_y, Board::Cross); break;
+ default: break;
+ }
+}
63 src/gui/cellitem.h
@@ -0,0 +1,63 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef CELLITEM_H
+#define CELLITEM_H
+
+#include <QGraphicsPixmapItem>
+#include <boost/shared_ptr.hpp>
+
+#include "scene.h"
+#include "src/logic/picmi.h"
+#include "dragmanager.h"
+#include "reloadableitem.h"
+
+class Scene;
+class DragManager;
+
+class CellItem : public QGraphicsPixmapItem, public ReloadableItem
+{
+public:
+ CellItem(int x, int y, boost::shared_ptr<Picmi> game, Scene *scene, QGraphicsItem *parent = 0);
+
+ void refresh();
+ void reload(const QSize &size);
+
+protected:
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ void keyPressEvent(QKeyEvent *event);
+
+private:
+
+ int drag_offset(int pos) const;
+
+private:
+
+ const boost::shared_ptr<Picmi> m_game;
+ Scene *m_scene;
+ boost::shared_ptr<DragManager> m_dragmanager;
+ Qt::MouseButton m_dragbutton;
+ QPixmap m_cross;
+ QPixmap m_box;
+ QPixmap m_transparent;
+};
+
+#endif // CELLITEM_H
65 src/gui/dragmanager.cpp
@@ -0,0 +1,65 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#include "dragmanager.h"
+
+DragManager::DragManager(boost::shared_ptr<Picmi> game, Scene *scene, QPoint start) :
+ m_game(game), m_start(start), m_scene(scene)
+{
+ m_direction = Undefined;
+}
+
+void DragManager::init(Board::State state) {
+ m_before = m_game->stateAt(m_start.x(), m_start.y());
+ m_request = state;
+ m_scene->press(m_start.x(), m_start.y(), state);
+ m_after = m_game->stateAt(m_start.x(), m_start.y());
+}
+
+void DragManager::move(int x, int y) {
+ QPoint normed = normCoordinates(x, y);
+ Board::State current = m_game->stateAt(normed.x(), normed.y());
+ if (current == m_before && current != m_after) {
+ m_scene->press(normed.x(), normed.y(), m_request);
+ } else {
+ m_scene->hover(normed.x(), normed.y());
+ }
+}
+
+QPoint DragManager::normCoordinates(int x, int y) {
+ if (m_direction == Undefined) {
+ int abs_dx = abs(m_start.x() - x);
+ int abs_dy = abs(m_start.y() - y);
+
+ if (abs_dx == 0 && abs_dy == 0) {
+ return m_start;
+ }
+
+ if (abs_dx > abs_dy) {
+ m_direction = Horizontal;
+ } else {
+ m_direction = Vertical;
+ }
+ }
+
+ switch (m_direction) {
+ case Horizontal: return QPoint(x, m_start.y());
+ case Vertical: return QPoint(m_start.x(), y);
+ default: assert(0);
+ }
+}
55 src/gui/dragmanager.h
@@ -0,0 +1,55 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef DRAGMANAGER_H
+#define DRAGMANAGER_H
+
+#include <QPoint>
+
+#include "scene.h"
+#include "src/logic/picmi.h"
+
+class Scene;
+
+class DragManager
+{
+public:
+ DragManager(boost::shared_ptr<Picmi> game, Scene *scene, QPoint start);
+
+ void init(Board::State state);
+ void move(int x, int y);
+
+private:
+ QPoint normCoordinates(int x, int y);
+
+private:
+
+ enum DragDirection {
+ Horizontal,
+ Vertical,
+ Undefined
+ };
+
+ const boost::shared_ptr<Picmi> m_game;
+ const QPoint m_start;
+ Scene *m_scene;
+ Board::State m_before, m_after, m_request;
+ DragManager::DragDirection m_direction;
+};
+
+#endif // DRAGMANAGER_H
50 src/gui/graphicsitem.h
@@ -0,0 +1,50 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef GRAPHICSITEM_H
+#define GRAPHICSITEM_H
+
+#include <QGraphicsItem>
+
+#include "renderer.h"
+
+class GraphicsItem : public QGraphicsPixmapItem
+{
+public:
+ GraphicsItem(QGraphicsItem *parent = 0) : QGraphicsPixmapItem(parent) { }
+ virtual void reload() = 0;
+};
+
+class BackgroundGraphicsItem : public GraphicsItem
+{
+public:
+ BackgroundGraphicsItem(QGraphicsItem *parent = 0) : QGraphicsPixmapItem(parent) { }
+ void reload();
+};
+
+class SimpleCellGraphicsItem : public GraphicsItem
+{
+public:
+ SimpleCellGraphicsItem(int x, int y, Renderer::Resource resource, QGraphicsItem *parent = 0);
+ void reload();
+private:
+ const Renderer::Resource m_resource;
+ const int m_x, m_y;
+};
+
+#endif // GRAPHICSITEM_H
32 src/gui/helpwindow.cpp
@@ -0,0 +1,32 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#include "helpwindow.h"
+#include "ui_helpwindow.h"
+
+HelpWindow::HelpWindow(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::HelpWindow)
+{
+ ui->setupUi(this);
+}
+
+HelpWindow::~HelpWindow()
+{
+ delete ui;
+}
40 src/gui/helpwindow.h
@@ -0,0 +1,40 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef HELPWINDOW_H
+#define HELPWINDOW_H
+
+#include <QDialog>
+
+namespace Ui {
+class HelpWindow;
+}
+
+class HelpWindow : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit HelpWindow(QWidget *parent = 0);
+ ~HelpWindow();
+
+private:
+ Ui::HelpWindow *ui;
+};
+
+#endif // HELPWINDOW_H
95 src/gui/helpwindow.ui
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>HelpWindow</class>
+ <widget class="QDialog" name="HelpWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>592</width>
+ <height>450</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Help</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTextBrowser" name="textBrowser">
+ <property name="html">
+ <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:14pt;&quot;&gt;Don't panic.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="textInteractionFlags">
+ <set>Qt::NoTextInteraction</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>HelpWindow</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>HelpWindow</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
32 src/gui/highlightitem.cpp
@@ -0,0 +1,32 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#include "highlightitem.h"
+
+#include "src/constants.h"
+
+HighlightItem::HighlightItem(Renderer::Resource resource, int x, int y, QGraphicsItem *parent) :
+ PixmapItem(resource, x, y, parent)
+{
+ setZValue(ZVALUE_HIGHLIGHT);
+}
+
+void HighlightItem::highlight(const QPoint &p) {
+ bool highlighted = (p.x() == m_x || p.y() == m_y);
+ setVisible(highlighted);
+}
31 src/gui/highlightitem.h
@@ -0,0 +1,31 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef HIGHLIGHTITEM_H
+#define HIGHLIGHTITEM_H
+
+#include "pixmapitem.h"
+
+class HighlightItem : public PixmapItem
+{
+public:
+ HighlightItem(Renderer::Resource resource, int x, int y, QGraphicsItem *parent = 0);
+ void highlight(const QPoint &p);
+};
+
+#endif // HIGHLIGHTITEM_H
111 src/gui/mainwindow.cpp
@@ -0,0 +1,111 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+#include <QHBoxLayout>
+#include <QGraphicsSimpleTextItem>
+
+#include "helpwindow.h"
+#include "settingswindow.h"
+#include "src/config.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+
+ QCoreApplication::setOrganizationName("picmi");
+ QCoreApplication::setApplicationName("picmi");
+
+ setWindowIcon(QIcon(QString(FILEPATH) + "icon.png"));
+
+ connect(ui->actionNew, SIGNAL(triggered()), this, SLOT(startGame()));
+ connect(ui->actionHelp, SIGNAL(triggered()), this, SLOT(help()));
+ connect(ui->actionSettings, SIGNAL(triggered()), this, SLOT(settings()));
+ connect(ui->actionPause, SIGNAL(triggered(bool)), this, SLOT(togglePaused(bool)));
+ connect(ui->actionUndo, SIGNAL(triggered()), this, SLOT(undo()));
+
+ m_timer.setInterval(1000);
+ connect(&m_timer, SIGNAL(timeout()), this, SLOT(updateStatusbar()));
+ m_timer.start();
+
+ startGame();
+}
+
+void MainWindow::updateStatusbar() {
+ QTime elapsed = m_game->elapsedTime();
+ ui->statusBar->showMessage(elapsed.toString());
+}
+
+void MainWindow::undo() {
+ m_game->undo();
+ m_scene->refresh();
+}
+
+void MainWindow::startGame() {
+
+ if (m_scene) {
+ disconnect(m_scene.get(), SIGNAL(gameWon()), this, SLOT(gameWon()));
+ }
+
+ ui->actionPause->setEnabled(true);
+ ui->actionPause->setChecked(false);
+
+ boost::shared_ptr<Settings> settings(new Settings());
+ m_game.reset(new Picmi(settings));
+ m_scene = ui->graphicsView->createScene(m_game);
+
+ ui->graphicsView->setEnabled(true);
+ ui->statusBar->clearMessage();
+
+ connect(m_scene.get(), SIGNAL(gameWon()), this, SLOT(gameWon()));
+}
+
+void MainWindow::gameWon() {
+ m_game->endGame();
+ ui->graphicsView->setEnabled(false);
+ ui->actionPause->setEnabled(false);
+}
+
+void MainWindow::togglePaused(bool paused) {
+ ui->graphicsView->setPaused(paused);
+
+ if (paused) {
+ m_timer.stop();
+ } else {
+ m_timer.start();
+ }
+}
+
+void MainWindow::help() {
+ HelpWindow w(this);
+ w.exec();
+}
+
+void MainWindow::settings() {
+ SettingsWindow w(this);
+ w.exec();
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
58 src/gui/mainwindow.h
@@ -0,0 +1,58 @@
+/* *************************************************************************
+ * Copyright 2012 Jakob Gruber *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ ************************************************************************* */
+
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+#include <QTimer>
+#include <boost/shared_ptr.hpp>
+
+#include "src/logic/picmi.h"
+#include "scene.h"
+#include "view.h"
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+public:
+ explicit MainWindow(QWidget *parent = 0);
+ ~MainWindow();
+
+private slots:
+ void startGame();
+ void togglePaused(bool paused);
+ void updateStatusbar();
+ void help();
+ void settings();
+ void gameWon();
+ void undo();
+
+private:
+ Ui::MainWindow *ui;
+
+ boost::shared_ptr<Picmi> m_game;
+ boost::shared_ptr<Scene> m_scene;
+ QTimer m_timer;
+};
+
+#endif // MAINWINDOW_H
141 src/gui/mainwindow.ui
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1020</width>
+ <height>820</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Picmi</string>
+ </property>
+ <widget class="QWidget" name="centralWidget">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="View" name="graphicsView">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menuBar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1020</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menuFile">
+ <property name="title">
+ <string>Game</string>
+ </property>
+ <addaction name="actionNew"/>
+ <addaction name="actionPause"/>
+ <addaction name="actionUndo"/>
+ <addaction name="separator"/>
+ <addaction name="actionSettings"/>
+ <addaction name="separator"/>
+ <addaction name="actionQuit"/>
+ </widget>
+ <widget class="QMenu" name="menuHelp">
+ <property name="title">
+ <string>Help</string>
+ </property>
+ <addaction name="actionHelp"/>
+ <addaction name="actionAbout"/>
+ </widget>
+ <addaction name="menuFile"/>
+ <addaction name="menuHelp"/>
+ </widget>
+ <widget class="QStatusBar" name="statusBar"/>
+ <action name="actionQuit">
+ <property name="text">
+ <string>Quit</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Q</string>
+ </property>
+ </action>
+ <action name="actionAbout">
+ <property name="text">
+ <string>About</string>
+ </property>
+ </action>
+ <action name="actionHelp">
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </action>
+ <action name="actionSettings">
+ <property name="text">
+ <string>Settings</string>
+ </property>
+ </action>