From 925b072e5c7bc38949995902cf7af6e4644c2c55 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Wed, 17 May 2006 21:53:53 +0000 Subject: [PATCH 1/1] Initial checkin of first CMake based version. --- CMakeLists.txt | 54 ++ COPYING | 340 ++++++++++++ Doxyfile | 275 ++++++++++ gui/CMakeLists.txt | 9 + gui/channelwidget.cpp | 40 ++ gui/channelwidget.h | 37 ++ gui/channelwidget.ui | 112 ++++ gui/identitiesdlg.ui | 700 +++++++++++++++++++++++++ gui/identitieseditdlg.ui | 167 ++++++ gui/mainwin.cpp | 87 +++ gui/mainwin.h | 55 ++ gui/networkeditdlg.ui | 327 ++++++++++++ gui/nickeditdlg.ui | 144 +++++ gui/serverlist.cpp | 556 ++++++++++++++++++++ gui/serverlist.h | 178 +++++++ gui/serverlistdlg.ui | 248 +++++++++ images/default/1downarrow.png | Bin 0 -> 630 bytes images/default/1leftarrow.png | Bin 0 -> 694 bytes images/default/1rightarrow.png | Bin 0 -> 693 bytes images/default/1uparrow.png | Bin 0 -> 584 bytes images/default/2dowarrow.png | Bin 0 -> 753 bytes images/default/2downarrow.png | Bin 0 -> 1148 bytes images/default/2leftarrow.png | Bin 0 -> 535 bytes images/default/2rightarrow.png | Bin 0 -> 611 bytes images/default/2uparrow.png | Bin 0 -> 753 bytes images/default/3downarrow.png | Bin 0 -> 1141 bytes images/default/3uparrow.png | Bin 0 -> 1145 bytes images/default/add_user.png | Bin 0 -> 1285 bytes images/default/apply.png | Bin 0 -> 643 bytes images/default/back.png | Bin 0 -> 809 bytes images/default/bell.png | Bin 0 -> 778 bytes images/default/bookmark.png | Bin 0 -> 661 bytes images/default/bookmark_add.png | Bin 0 -> 978 bytes images/default/bookmark_folder.png | Bin 0 -> 3334 bytes images/default/bookmark_toolbar.png | Bin 0 -> 3369 bytes images/default/bookmarks_list_add.png | Bin 0 -> 708 bytes images/default/bottom.png | Bin 0 -> 1119 bytes images/default/button_cancel.png | Bin 0 -> 842 bytes images/default/button_ok.png | Bin 0 -> 643 bytes images/default/cancel.png | Bin 0 -> 842 bytes images/default/configure.png | Bin 0 -> 759 bytes images/default/configure_shortcuts.png | Bin 0 -> 1009 bytes images/default/configure_toolbars.png | Bin 0 -> 1160 bytes images/default/connect_creating.png | Bin 0 -> 3195 bytes images/default/connect_established.png | Bin 0 -> 671 bytes images/default/connect_no.png | Bin 0 -> 3195 bytes images/default/edit.png | Bin 0 -> 590 bytes images/default/edit_add.png | Bin 0 -> 502 bytes images/default/edit_remove.png | Bin 0 -> 237 bytes images/default/edit_user.png | Bin 0 -> 955 bytes images/default/editcopy.png | Bin 0 -> 389 bytes images/default/edittrash.png | Bin 0 -> 760 bytes images/default/exit.png | Bin 0 -> 1136 bytes images/default/fileclose.png | Bin 0 -> 1027 bytes images/default/filenew.png | Bin 0 -> 357 bytes images/default/fileopen.png | Bin 0 -> 1080 bytes images/default/fileprint.png | Bin 0 -> 697 bytes images/default/filesave.png | Bin 0 -> 641 bytes images/default/filesaveas.png | Bin 0 -> 841 bytes images/default/finish.png | Bin 0 -> 1183 bytes images/default/folder.png | Bin 0 -> 623 bytes images/default/folder_new.png | Bin 0 -> 649 bytes images/default/fonts.png | Bin 0 -> 621 bytes images/default/fontsizedown.png | Bin 0 -> 392 bytes images/default/fontsizeup.png | Bin 0 -> 384 bytes images/default/forward.png | Bin 0 -> 806 bytes images/default/help.png | Bin 0 -> 997 bytes images/default/identity.png | Bin 0 -> 897 bytes images/default/next.png | Bin 0 -> 1188 bytes images/default/no.png | Bin 0 -> 821 bytes images/default/ok.png | Bin 0 -> 661 bytes images/default/remove.png | Bin 0 -> 313 bytes images/default/server.png | Bin 0 -> 458 bytes images/default/start.png | Bin 0 -> 1184 bytes images/default/status_unknown.png | Bin 0 -> 571 bytes images/default/stop.png | Bin 0 -> 836 bytes images/default/tab.png | Bin 0 -> 372 bytes images/default/tab_breakoff.png | Bin 0 -> 376 bytes images/default/tab_duplicate.png | Bin 0 -> 622 bytes images/default/tab_first.png | Bin 0 -> 321 bytes images/default/tab_last.png | Bin 0 -> 333 bytes images/default/tab_left.png | Bin 0 -> 299 bytes images/default/tab_new.png | Bin 0 -> 500 bytes images/default/tab_new_bg.png | Bin 0 -> 479 bytes images/default/tab_new_raised.png | Bin 0 -> 555 bytes images/default/tab_remove.png | Bin 0 -> 393 bytes images/default/tab_right.png | Bin 0 -> 313 bytes images/default/top.png | Bin 0 -> 1130 bytes images/default/trash.png | Bin 0 -> 3238 bytes images/default/tux.png | Bin 0 -> 713 bytes images/default/up.png | Bin 0 -> 1171 bytes images/default/view_bottom.png | Bin 0 -> 511 bytes images/default/view_choose.png | Bin 0 -> 475 bytes images/default/view_detailed.png | Bin 0 -> 464 bytes images/default/view_icon.png | Bin 0 -> 544 bytes images/default/view_left_right.png | Bin 0 -> 407 bytes images/default/view_multicolumn.png | Bin 0 -> 501 bytes images/default/view_orientation.png | Bin 0 -> 500 bytes images/default/view_remove 2.png | Bin 0 -> 371 bytes images/default/view_remove.png | Bin 0 -> 371 bytes images/default/view_right.png | Bin 0 -> 547 bytes images/default/view_sidetree.png | Bin 0 -> 635 bytes images/default/view_split.png | Bin 0 -> 379 bytes images/default/view_top_bottom.png | Bin 0 -> 388 bytes images/default/wizard.png | Bin 0 -> 313 bytes images/iconmap.xml | 8 + images/icons.qrc | 93 ++++ main/CMakeLists.txt | 6 + main/logger.cpp | 51 ++ main/logger.h | 41 ++ main/main.cpp | 45 ++ main/quassel.cpp | 65 +++ main/quassel.h | 53 ++ 113 files changed, 3691 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 COPYING create mode 100644 Doxyfile create mode 100644 gui/CMakeLists.txt create mode 100644 gui/channelwidget.cpp create mode 100644 gui/channelwidget.h create mode 100644 gui/channelwidget.ui create mode 100644 gui/identitiesdlg.ui create mode 100644 gui/identitieseditdlg.ui create mode 100644 gui/mainwin.cpp create mode 100644 gui/mainwin.h create mode 100644 gui/networkeditdlg.ui create mode 100644 gui/nickeditdlg.ui create mode 100644 gui/serverlist.cpp create mode 100644 gui/serverlist.h create mode 100644 gui/serverlistdlg.ui create mode 100644 images/default/1downarrow.png create mode 100644 images/default/1leftarrow.png create mode 100644 images/default/1rightarrow.png create mode 100644 images/default/1uparrow.png create mode 100644 images/default/2dowarrow.png create mode 100644 images/default/2downarrow.png create mode 100644 images/default/2leftarrow.png create mode 100644 images/default/2rightarrow.png create mode 100644 images/default/2uparrow.png create mode 100644 images/default/3downarrow.png create mode 100644 images/default/3uparrow.png create mode 100644 images/default/add_user.png create mode 100644 images/default/apply.png create mode 100644 images/default/back.png create mode 100644 images/default/bell.png create mode 100644 images/default/bookmark.png create mode 100644 images/default/bookmark_add.png create mode 100644 images/default/bookmark_folder.png create mode 100644 images/default/bookmark_toolbar.png create mode 100644 images/default/bookmarks_list_add.png create mode 100644 images/default/bottom.png create mode 100644 images/default/button_cancel.png create mode 100644 images/default/button_ok.png create mode 100644 images/default/cancel.png create mode 100644 images/default/configure.png create mode 100644 images/default/configure_shortcuts.png create mode 100644 images/default/configure_toolbars.png create mode 100644 images/default/connect_creating.png create mode 100644 images/default/connect_established.png create mode 100644 images/default/connect_no.png create mode 100644 images/default/edit.png create mode 100644 images/default/edit_add.png create mode 100644 images/default/edit_remove.png create mode 100644 images/default/edit_user.png create mode 100644 images/default/editcopy.png create mode 100644 images/default/edittrash.png create mode 100644 images/default/exit.png create mode 100644 images/default/fileclose.png create mode 100644 images/default/filenew.png create mode 100644 images/default/fileopen.png create mode 100644 images/default/fileprint.png create mode 100644 images/default/filesave.png create mode 100644 images/default/filesaveas.png create mode 100644 images/default/finish.png create mode 100644 images/default/folder.png create mode 100644 images/default/folder_new.png create mode 100644 images/default/fonts.png create mode 100644 images/default/fontsizedown.png create mode 100644 images/default/fontsizeup.png create mode 100644 images/default/forward.png create mode 100644 images/default/help.png create mode 100644 images/default/identity.png create mode 100644 images/default/next.png create mode 100644 images/default/no.png create mode 100644 images/default/ok.png create mode 100644 images/default/remove.png create mode 100644 images/default/server.png create mode 100644 images/default/start.png create mode 100644 images/default/status_unknown.png create mode 100644 images/default/stop.png create mode 100644 images/default/tab.png create mode 100644 images/default/tab_breakoff.png create mode 100644 images/default/tab_duplicate.png create mode 100644 images/default/tab_first.png create mode 100644 images/default/tab_last.png create mode 100644 images/default/tab_left.png create mode 100644 images/default/tab_new.png create mode 100644 images/default/tab_new_bg.png create mode 100644 images/default/tab_new_raised.png create mode 100644 images/default/tab_remove.png create mode 100644 images/default/tab_right.png create mode 100644 images/default/top.png create mode 100644 images/default/trash.png create mode 100644 images/default/tux.png create mode 100644 images/default/up.png create mode 100644 images/default/view_bottom.png create mode 100644 images/default/view_choose.png create mode 100644 images/default/view_detailed.png create mode 100644 images/default/view_icon.png create mode 100644 images/default/view_left_right.png create mode 100644 images/default/view_multicolumn.png create mode 100644 images/default/view_orientation.png create mode 100644 images/default/view_remove 2.png create mode 100644 images/default/view_remove.png create mode 100644 images/default/view_right.png create mode 100644 images/default/view_sidetree.png create mode 100644 images/default/view_split.png create mode 100644 images/default/view_top_bottom.png create mode 100644 images/default/wizard.png create mode 100644 images/iconmap.xml create mode 100644 images/icons.qrc create mode 100644 main/CMakeLists.txt create mode 100644 main/logger.cpp create mode 100644 main/logger.h create mode 100644 main/main.cpp create mode 100644 main/quassel.cpp create mode 100644 main/quassel.h diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..255d5fd8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,54 @@ +PROJECT(Quassel) + +# Select if Quassel should be built in client, server or monolithic mode +SET(BUILD "mono" CACHE STRING "Defines which Quassel parts are to be built. Can contain 'server', 'client' and/or 'monolithic' (which is the default).") +SET(BUILD_SERVER ) +SET(BUILD_CLIENT ) +SET(BUILD_MONO ) +IF(BUILD MATCHES "server") + SET(BUILD_SERVER true) + MESSAGE(STATUS "Building Quassel server.") +ENDIF(BUILD MATCHES "server") +IF(BUILD MATCHES "client") + SET(BUILD_CLIENT true) + MESSAGE(STATUS "Building Quassel client.") +ENDIF(BUILD MATCHES "client") +IF(BUILD MATCHES "mono") + SET(BUILD_MONO true) + MESSAGE(STATUS "Building monolithic Quassel.") +ENDIF(BUILD MATCHES "mono") +IF(NOT BUILD_MONO AND NOT BUILD_SERVER AND NOT BUILD_CLIENT) + MESSAGE(FATAL_ERROR "You have not selected which parts of Quassel I should build. Aborting.\nRun 'cmake -DBUILD=', where contains one or more of 'server', 'client' or 'monolithic'.") +ENDIF(NOT BUILD_MONO AND NOT BUILD_SERVER AND NOT BUILD_CLIENT) + +# We need Qt4 support. +FIND_PACKAGE(Qt4 REQUIRED) + +# Set needed libraries +SET(QT_USE_QTXML true) +IF(NOT BUILD_CLIENT AND NOT BUILD_MONO) + SET(QT_DONT_USE_QTGUI true) + MESSAGE(STATUS "Disabling GUI support.") +ENDIF(NOT BUILD_CLIENT AND NOT BUILD_MONO) +INCLUDE(${QT_USE_FILE}) +ADD_DEFINITIONS(${QT_DEFINITIONS}) + +# Define files +SET(quassel_SRCS main/main.cpp) +SET(quassel_RCCS images/icons.qrc) +SET(quassel_DIRS gui main) + +# Build correct absolute paths for subdirs to include +SET(SDIRS "") +FOREACH(dir ${quassel_DIRS}) + SET(SDIRS ${SDIRS} "${CMAKE_CURRENT_SOURCE_DIR}/${dir}") +ENDFOREACH(dir) +INCLUDE_DIRECTORIES(${SDIRS} ${QT_INCLUDES}) + +ADD_SUBDIRECTORY(gui) +ADD_SUBDIRECTORY(main) + +QT4_ADD_RESOURCES(_RCCS ${quassel_RCCS}) + +ADD_EXECUTABLE(quasselbin ${quassel_SRCS} ${_RCCS}) +TARGET_LINK_LIBRARIES(quasselbin main gui ${QT_LIBRARIES}) diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..5b6e7c66 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 00000000..e5598415 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = quassel.kdevelop +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = YES +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = / +STRIP_FROM_INC_PATH = +SHORT_NAMES = YES +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = NO +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = YES +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/sputnick/devel/quassel +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = YES +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = quassel.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt new file mode 100644 index 00000000..1177e965 --- /dev/null +++ b/gui/CMakeLists.txt @@ -0,0 +1,9 @@ +SET(gui_SRCS channelwidget.cpp mainwin.cpp serverlist.cpp) +SET(gui_HDRS ) +SET(gui_MOCS channelwidget.h mainwin.h serverlist.h) +SET(gui_UICS channelwidget.ui identitiesdlg.ui identitieseditdlg.ui networkeditdlg.ui nickeditdlg.ui serverlistdlg.ui) + +QT4_WRAP_UI(_UIC ${gui_UICS}) +QT4_WRAP_CPP(_MOC ${gui_MOCS}) + +ADD_LIBRARY(gui ${_UIC} ${_MOC} ${gui_HDRS} ${gui_SRCS}) diff --git a/gui/channelwidget.cpp b/gui/channelwidget.cpp new file mode 100644 index 00000000..d9851cd2 --- /dev/null +++ b/gui/channelwidget.cpp @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "channelwidget.h" + +#include +#include + +ChannelWidget::ChannelWidget(QWidget *parent) : QWidget(parent) { + ui.setupUi(this); + ui.lineEdit->setText("foobar"); + + //ui.splitter-> + ui.textBrowser->setHtml("[17:21] --> Dante has joined #quassel (~hurz@p1af2242.dip.t-dialin.net)
" + "[17:21] --> Sput has joined #quassel (~Sput42@vincent.mindpool.net)
" + "[17:23] <Dante> Das sieht ja soweit schonmal Klasse aus!
" + "[17:23] <Sput> Find ich auch... schade dass es noch nix tut :p
" + "[17:24] <Dante> Das wird sich ja gottseidank bald ändern.
" + "[17:24] <Sput> Wollen wir's hoffen :D" + ); + ui.listWidget->addItem("@Dante"); + ui.listWidget->addItem("@Sput"); +} diff --git a/gui/channelwidget.h b/gui/channelwidget.h new file mode 100644 index 00000000..3d36cf85 --- /dev/null +++ b/gui/channelwidget.h @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _CHANNELWIDGET_H_ +#define _CHANNELWIDGET_H_ + +#include "ui_channelwidget.h" + +class ChannelWidget : public QWidget { + Q_OBJECT + + public: + ChannelWidget(QWidget *parent = 0); + + private: + Ui::ChannelWidget ui; +}; + + +#endif diff --git a/gui/channelwidget.ui b/gui/channelwidget.ui new file mode 100644 index 00000000..3905977b --- /dev/null +++ b/gui/channelwidget.ui @@ -0,0 +1,112 @@ + + + + + ChannelWidget + + + + 0 + 0 + 550 + 243 + + + + + 16 + 16 + + + + #quassel + + + + 8 + + + 6 + + + + + Qt::Horizontal + + + + 8 + + + 6 + + + + + + 7 + 7 + 4 + 0 + + + + + + + 7 + 7 + 1 + 0 + + + + + 75 + 0 + + + + + 4000 + 4000 + + + + + + + + + + + + + -10 + 20 + 530 + 192 + + + + Qt::Horizontal + + + + + + 10 + 10 + 518 + 52 + + + + Qt::Horizontal + + + + + + + diff --git a/gui/identitiesdlg.ui b/gui/identitiesdlg.ui new file mode 100644 index 00000000..d994b8ac --- /dev/null +++ b/gui/identitiesdlg.ui @@ -0,0 +1,700 @@ + + + + + IdentitiesDlg + + + + 0 + 0 + 383 + 390 + + + + + 5 + 5 + 0 + 0 + + + + Edit Identity + + + :/default/identity.png + + + true + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + + 3 + 0 + 0 + 0 + + + + QComboBox::NoInsert + + + + + + + Edit... + + + :/default/edit_user.png + + + + + + + + + + &General + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + Real Name + + + + + + + + + + + + + Ident + + + + + + + + + Nicknames + + + + 8 + + + 6 + + + + + + 7 + 7 + 1 + 0 + + + + + + + + 0 + + + 6 + + + + + + 5 + 0 + 0 + 0 + + + + &Add... + + + :/default/edit_add.png + + + + 16 + 16 + + + + + + + + + 5 + 0 + 0 + 0 + + + + &Edit... + + + :/default/edit.png + + + + + + + + 5 + 0 + 0 + 0 + + + + De&lete + + + :/default/edit_remove.png + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + ... + + + :/default/1uparrow.png + + + + + + + ... + + + :/default/1downarrow.png + + + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + + + + + + 10 + 0 + 395 + 83 + + + + + + + &Away + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + + + + Away Reason + + + + + + + + + + Return Message + + + + + + + + + + Away Nick + + + + + + + + + Auto Away + + + + 8 + + + 6 + + + + + Enable Auto Away + + + + + + + 0 + + + 6 + + + + + Auto away after + + + + + + + + + + minutes + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 0 + + + 6 + + + + + Return Message + + + + + + + Away Reason + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + &Messages + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + Part Reason + + + + + + + + + + + + + Quit Reason + + + + + + + + + + Kick Reason + + + + + + + + + Qt::Vertical + + + + 20 + 141 + + + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + :/default/button_ok.png + + + + + + + Cancel + + + :/default/button_cancel.png + + + + + + + + + + + + + + okButton + clicked() + IdentitiesDlg + accept() + + + 356 + 372 + + + 96 + 254 + + + + + cancelButton + clicked() + IdentitiesDlg + reject() + + + 447 + 372 + + + 179 + 282 + + + + + enableAwayNick + clicked(bool) + awayNickEdit + setEnabled(bool) + + + 71 + 84 + + + 212 + 84 + + + + + enableAwayReason + clicked(bool) + awayReasonEdit + setEnabled(bool) + + + 111 + 117 + + + 153 + 116 + + + + + enableReturnMessage + clicked(bool) + returnMessageEdit + setEnabled(bool) + + + 120 + 145 + + + 166 + 145 + + + + + enableAutoAway + clicked(bool) + autoAwayTime + setEnabled(bool) + + + 79 + 202 + + + 144 + 230 + + + + + enableAutoAwayReturn + clicked(bool) + autoAwayReturnEdit + setEnabled(bool) + + + 121 + 284 + + + 202 + 291 + + + + + enableAutoAwayReason + clicked(bool) + autoAwayReasonEdit + setEnabled(bool) + + + 140 + 261 + + + 169 + 261 + + + + + diff --git a/gui/identitieseditdlg.ui b/gui/identitieseditdlg.ui new file mode 100644 index 00000000..9835e43c --- /dev/null +++ b/gui/identitieseditdlg.ui @@ -0,0 +1,167 @@ + + + + + IdentitiesEditDlg + + + + 0 + 0 + 382 + 235 + + + + Edit Identities + + + true + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + + + + 0 + + + 6 + + + + + &Add... + + + + + + + &Duplicate... + + + + + + + &Rename... + + + + + + + De&lete + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + &OK + + + + + + + &Cancel + + + + + + + + + + + + okButton + clicked() + IdentitiesEditDlg + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + IdentitiesEditDlg + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/gui/mainwin.cpp b/gui/mainwin.cpp new file mode 100644 index 00000000..4dd5d280 --- /dev/null +++ b/gui/mainwin.cpp @@ -0,0 +1,87 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include + +#include "mainwin.h" +#include "channelwidget.h" +#include "serverlist.h" + +MainWin::MainWin() : QMainWindow() { + + setWindowTitle("Quassel IRC"); + setWindowIcon(QIcon(":/default/tux.png")); + setWindowIconText("Quassel IRC"); + workspace = new QWorkspace(this); + setCentralWidget(workspace); + ChannelWidget *cw = new ChannelWidget(this); + workspace->addWindow(cw); + //setCentralWidget(cw); + serverListDlg = new ServerListDlg(this); + serverListDlg->setVisible(serverListDlg->showOnStartup()); + //showServerList(); + + setupMenus(); + statusBar()->showMessage(tr("Ready")); + +} + +void MainWin::setupMenus() { + fileMenu = menuBar()->addMenu(tr("&File")); + serverListAct = fileMenu->addAction(QIcon(":/default/server.png"), tr("&Server List..."), this, SLOT(showServerList()), tr("F7")); + fileMenu->addSeparator(); + quitAct = fileMenu->addAction(QIcon(":/default/exit.png"), tr("&Quit"), qApp, SLOT(quit()), tr("CTRL+Q")); + + editMenu = menuBar()->addMenu(tr("&Edit")); + editMenu->setEnabled(0); + + ircMenu = menuBar()->addMenu(tr("&IRC")); + ircMenu->setEnabled(0); + + serverMenu = menuBar()->addMenu(tr("Ser&ver")); + serverMenu->setEnabled(0); + + windowMenu = menuBar()->addMenu(tr("&Window")); + windowMenu->setEnabled(0); + + settingsMenu = menuBar()->addMenu(tr("&Settings")); + identitiesAct = settingsMenu->addAction(QIcon(":/default/identity.png"), tr("&Identities..."), serverListDlg, SLOT(editIdentities())); + settingsMenu->addSeparator(); + configAct = settingsMenu->addAction(QIcon(":/default/configure.png"), tr("&Configure Quassel...")); + configAct->setEnabled(0); + + helpMenu = menuBar()->addMenu(tr("&Help")); + aboutAct = helpMenu->addAction(tr("&About")); + aboutAct->setEnabled(0); + aboutQtAct = helpMenu->addAction(tr("About &Qt"), qApp, SLOT(aboutQt())); + + + //toolBar = new QToolBar("Test", this); + //toolBar->addAction(identitiesAct); + //addToolBar(Qt::TopToolBarArea, toolBar); +} + +void MainWin::showServerList() { +// if(!serverListDlg) { +// serverListDlg = new ServerListDlg(this); +// } + serverListDlg->show(); +} + diff --git a/gui/mainwin.h b/gui/mainwin.h new file mode 100644 index 00000000..6ca7f248 --- /dev/null +++ b/gui/mainwin.h @@ -0,0 +1,55 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _MAINWIN_H_ +#define _MAINWIN_H_ + +#include + +class QMenu; +class QWorkspace; + +class ServerListDlg; + +class MainWin : public QMainWindow { + Q_OBJECT + + public: + MainWin(); + + protected: + + private slots: + void showServerList(); + + private: + void setupMenus(); + + QWorkspace *workspace; + QToolBar *toolBar; + QMenu *fileMenu, *editMenu, *ircMenu, *serverMenu, *windowMenu, *helpMenu, *settingsMenu; + QAction *quitAct, *serverListAct; + QAction *aboutAct, *aboutQtAct; + QAction *identitiesAct, *configAct; + + ServerListDlg *serverListDlg; +}; + +#endif diff --git a/gui/networkeditdlg.ui b/gui/networkeditdlg.ui new file mode 100644 index 00000000..3b1b5be2 --- /dev/null +++ b/gui/networkeditdlg.ui @@ -0,0 +1,327 @@ + + + + + NetworkEditDlg + + + + 0 + 0 + 434 + 458 + + + + Edit Network Settings + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + Identity: + + + + + + + Network: + + + + + + + + + + 0 + + + 6 + + + + + + + + + 4 + 0 + 0 + 0 + + + + Edit... + + + + + + + + + QComboBox::NoInsert + + + + + + + Group: + + + + + + + + + Auto-connect at startup + + + + + + + + Servers + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + + + + 0 + + + 6 + + + + + &Add... + + + + + + + &Edit... + + + + + + + De&lete + + + + + + + Move &Up + + + + + + + Move &Down + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 230 + 20 + 87 + 151 + + + + + + + Perform + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + + + + These commands are executed after connect. + + + + + + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 275 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + 10 + 110 + 461 + 331 + + + + + + + 11 + 407 + 459 + 33 + + + + + + + + + okButton + clicked() + NetworkEditDlg + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + NetworkEditDlg + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/gui/nickeditdlg.ui b/gui/nickeditdlg.ui new file mode 100644 index 00000000..01deb7f5 --- /dev/null +++ b/gui/nickeditdlg.ui @@ -0,0 +1,144 @@ + + + + + NickEditDlg + + + + 0 + 0 + 307 + 96 + + + + + 3 + 3 + 0 + 0 + + + + Edit Nick + + + true + + + + 8 + + + 6 + + + + + Nickname: + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 0 + + + 6 + + + + + Qt::Horizontal + + + + 131 + 31 + + + + + + + + OK + + + + + + + Cancel + + + + + + + + + + 9 + 32 + 325 + 25 + + + + + + + + + okButton + clicked() + NickEditDlg + accept() + + + 278 + 253 + + + 96 + 254 + + + + + cancelButton + clicked() + NickEditDlg + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/gui/serverlist.cpp b/gui/serverlist.cpp new file mode 100644 index 00000000..221eb2a5 --- /dev/null +++ b/gui/serverlist.cpp @@ -0,0 +1,556 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "serverlist.h" + +/* NOTE: This dialog holds not only the server list, but also the identities. + * This makes perfect sense given the fact that connections are initiated from + * this dialog, and that the dialog exists during the lifetime of the program. + * This data is also only used from within the GUI, which means it shouldn't be + * part of the global Quassel class (me thinks). + */ + +ServerListDlg::ServerListDlg(QWidget *parent) : QDialog(parent) { + ui.setupUi(this); + + QSettings settings; + settings.beginGroup("Network"); + ui.showOnStartup->setChecked(settings.value("ShowServerListOnStartup", true).toBool()); + // create some default entries + VarMap s1, s2, s3, s4; + + s1["group"] = "Private Servers"; + networks["mindNet"] = s1; + s2["group"] = "Private Servers"; + networks["fooBar"] = s2; + s3["group"] = ""; + networks["Single"] = s3; + s4["group"] = "Public Servers"; + networks["public"] = s4; + + // load networks from QSettings here instead + // [...] + + // Construct tree widget (and its items) from networks + QStringList headers; + headers << "Network" << "Autoconnect"; + ui.networkTree->setHeaderLabels(headers); + QHash groups; + foreach(QString net, networks.keys()) { + VarMap s = networks[net].toMap(); + QString gr = s["group"].toString(); + QTreeWidgetItem *item = 0; + if(gr == "") { + item = new QTreeWidgetItem(ui.networkTree); + } else { + if(groups.contains(gr)) { + item = new QTreeWidgetItem(groups[gr]); + } else { + QTreeWidgetItem *newgr = new QTreeWidgetItem(ui.networkTree); + newgr->setText(0, gr); + newgr->setFlags(newgr->flags() & ~Qt::ItemIsSelectable); + ui.networkTree->expandItem(newgr); + groups[gr] = newgr; + item = new QTreeWidgetItem(newgr); + } + } + item->setText(0, net); + //item->setFlags(item->flags() | Qt::ItemIsUserCheckable); + item->setCheckState(1, Qt::Unchecked); + } + connect(ui.networkTree, SIGNAL(itemSelectionChanged()), this, SLOT(updateButtons())); + + loadIdentities(); + settings.endGroup(); +} + +ServerListDlg::~ServerListDlg() { + +} + +void ServerListDlg::updateButtons() { + QList selected = ui.networkTree->selectedItems(); + ui.editButton->setEnabled(selected.size() == 1); + ui.deleteButton->setEnabled(selected.size() >= 1); + ui.connectButton->setEnabled(selected.size() >= 1); + +} + +bool ServerListDlg::showOnStartup() { + return ui.showOnStartup->isChecked(); +} + +void ServerListDlg::on_addButton_clicked() { + NetworkEditDlg dlg(this, VarMap(), identities); + if(dlg.exec() == QDialog::Accepted) { + + } +} + +void ServerListDlg::loadNetworks() { + +} + +void ServerListDlg::storeNetworks() { + +} + +void ServerListDlg::loadIdentities() { + QSettings s; + //s.beginGroup("Identities"); + identities = s.value("Network/Identities").toMap(); + while(!identities.contains("Default")) { + identities = VarMap(); + editIdentities(); + } +} + +void ServerListDlg::storeIdentities() { + QSettings s; + s.setValue("Network/Identities", identities); +} + +void ServerListDlg::editIdentities() { + IdentitiesDlg dlg(this, identities); + if(dlg.exec() == QDialog::Accepted) { + identities = dlg.getIdentities(); + QMap mapping = dlg.getNameMapping(); + // add mapping here + + // + storeIdentities(); + storeNetworks(); // ? how to treat mapping and NOT save changes not yet applied to the server list? + } +} + +void ServerListDlg::on_showOnStartup_stateChanged(int) { + QSettings s; + s.setValue("Network/ShowServerListOnStartup", ui.showOnStartup->isChecked()); +} + +/***************************************************************************/ + +NetworkEditDlg::NetworkEditDlg(QWidget *parent, VarMap _network, VarMap _identities) : QDialog(parent) { + ui.setupUi(this); + network = _network; + identities = _identities; + + ui.identityList->addItem(tr("Default Identity")); + + foreach(QString id, identities.keys()) { + if(id != "Default") ui.identityList->addItem(id); + } + +} + +VarMap NetworkEditDlg::createDefaultNetwork() { + VarMap net; + + net["group"] = ""; + + return net; +} + +/***************************************************************************/ + +IdentitiesDlg::IdentitiesDlg(QWidget *parent, VarMap _identities) : QDialog(parent) { + ui.setupUi(this); + connect(ui.enableAutoAway, SIGNAL(stateChanged(int)), this, SLOT(autoAwayChecked())); + + identities = _identities; + foreach(QString name, identities.keys()) { + nameMapping[name] = name; + } + if(identities.size() == 0) { + VarMap id = createDefaultIdentity(); + id["IdName"] = "Default"; + identities["Default"] = id; + } + ui.identityList->addItem(tr("Default Identity")); + + foreach(QString id, identities.keys()) { + if(id != "Default") ui.identityList->addItem(id); + } + updateWidgets(); + lastIdentity = getCurIdentity(); + connect(ui.identityList, SIGNAL(activated(QString)), this, SLOT(identityChanged(QString))); + connect(ui.editIdentitiesButton, SIGNAL(clicked()), this, SLOT(editIdentities())); + connect(ui.nickList, SIGNAL(itemSelectionChanged()), this, SLOT(nickSelectionChanged())); + connect(ui.addNickButton, SIGNAL(clicked()), this, SLOT(addNick())); + connect(ui.editNickButton, SIGNAL(clicked()), this, SLOT(editNick())); + connect(ui.delNickButton, SIGNAL(clicked()), this, SLOT(delNick())); + connect(ui.upNickButton, SIGNAL(clicked()), this, SLOT(upNick())); + connect(ui.downNickButton, SIGNAL(clicked()), this, SLOT(downNick())); +} + +VarMap IdentitiesDlg::createDefaultIdentity() { + VarMap id; + id["RealName"] = "foo"; + id["Ident"] = ""; + id["NickList"] = QStringList(); + id["enableAwayNick"] = false; + id["AwayNick"] = ""; + id["enableAwayReason"] = false; + id["AwayReason"] = ""; + id["enableReturnMessage"] = false; + id["ReturnMessage"] = ""; + id["enableAutoAway"] = false; + id["AutoAwayTime"] = 10; + id["enableAutoAwayReason"] = false; + id["AutoAwayReason"] = ""; + id["enableAutoAwayReturn"] = false; + id["AutoAwayReturn"] = ""; + id["PartReason"] = "Quasseling elsewhere."; + id["QuitReason"] = "Every Quassel comes to its end."; + id["KickReason"] = "No more quasseling for you!"; + + return id; +} + +QString IdentitiesDlg::getCurIdentity() { + if(ui.identityList->currentIndex() == 0) return "Default"; + return ui.identityList->currentText(); +} + +void IdentitiesDlg::updateWidgets() { + VarMap id = identities[getCurIdentity()].toMap(); + ui.realNameEdit->setText(id["RealName"].toString()); + ui.identEdit->setText(id["Ident"].toString()); + ui.nickList->clear(); + ui.nickList->addItems(id["NickList"].toStringList()); + if(ui.nickList->count()>0) ui.nickList->setCurrentRow(0); + ui.enableAwayNick->setChecked(id["enableAwayNick"].toBool()); + ui.awayNickEdit->setText(id["AwayNick"].toString()); + ui.awayNickEdit->setEnabled(ui.enableAwayNick->isChecked()); + ui.enableAwayReason->setChecked(id["enableAwayReason"].toBool()); + ui.awayReasonEdit->setText(id["AwayReason"].toString()); + ui.awayReasonEdit->setEnabled(ui.enableAwayReason->isChecked()); + ui.enableReturnMessage->setChecked(id["enableReturnMessage"].toBool()); + ui.returnMessageEdit->setText(id["ReturnMessage"].toString()); + ui.returnMessageEdit->setEnabled(ui.enableReturnMessage->isChecked()); + ui.enableAutoAway->setChecked(id["enableAutoAway"].toBool()); + ui.autoAwayTime->setValue(id["AutoAwayTime"].toInt()); + ui.enableAutoAwayReason->setChecked(id["enableAutoAwayReason"].toBool()); + ui.autoAwayReasonEdit->setText(id["AutoAwayReason"].toString()); + ui.enableAutoAwayReturn->setChecked(id["enableAutoAwayReturn"].toBool()); + ui.autoAwayReturnEdit->setText(id["AutoAwayReturn"].toString()); + ui.partReasonEdit->setText(id["PartReason"].toString()); + ui.kickReasonEdit->setText(id["KickReason"].toString()); + ui.quitReasonEdit->setText(id["QuitReason"].toString()); + // set enabled states correctly + autoAwayChecked(); + nickSelectionChanged(); +} + +void IdentitiesDlg::updateIdentity(QString idName) { + VarMap id; + id["RealName"] = ui.realNameEdit->text(); + id["Ident"] = ui.identEdit->text(); + QStringList nicks; + for(int i = 0; i < ui.nickList->count(); i++) nicks << ui.nickList->item(i)->text(); + id["NickList"] = nicks; + id["enableAwayNick"] = ui.enableAwayNick->isChecked(); + id["AwayNick"] = ui.awayNickEdit->text(); + id["enableAwayReason"] = ui.enableAwayReason->isChecked(); + id["AwayReason"] = ui.awayReasonEdit->text(); + id["enableReturnMessage"] = ui.enableReturnMessage->isChecked(); + id["ReturnMessage"] = ui.returnMessageEdit->text(); + id["enableAutoAway"] = ui.enableAutoAway->isChecked(); + id["AutoAwayTime"] = ui.autoAwayTime->value(); + id["enableAutoAwayReason"] = ui.enableAutoAwayReason->isChecked(); + id["AutoAwayReason"] = ui.autoAwayReasonEdit->text(); + id["enableAutoAwayReturn"] = ui.enableAutoAwayReturn->isChecked(); + id["AutoAwayReturn"] = ui.autoAwayReturnEdit->text(); + id["PartReason"] = ui.partReasonEdit->text(); + id["KickReason"] = ui.kickReasonEdit->text(); + id["QuitReason"] = ui.quitReasonEdit->text(); + + id["IdName"] = idName; + identities[idName] = id; +} + +void IdentitiesDlg::identityChanged(QString) { + updateIdentity(lastIdentity); + lastIdentity = getCurIdentity(); + updateWidgets(); +} + +void IdentitiesDlg::autoAwayChecked() { + if(ui.enableAutoAway->isChecked()) { + ui.autoAwayLabel_1->setEnabled(1); + ui.autoAwayLabel_2->setEnabled(1); + ui.autoAwayTime->setEnabled(1); + ui.enableAutoAwayReason->setEnabled(1); + ui.enableAutoAwayReturn->setEnabled(1); + ui.autoAwayReasonEdit->setEnabled(ui.enableAutoAwayReason->isChecked()); + ui.autoAwayReturnEdit->setEnabled(ui.enableAutoAwayReturn->isChecked()); + } else { + ui.autoAwayLabel_1->setEnabled(0); + ui.autoAwayLabel_2->setEnabled(0); + ui.autoAwayTime->setEnabled(0); + ui.enableAutoAwayReason->setEnabled(0); + ui.enableAutoAwayReturn->setEnabled(0); + ui.autoAwayReasonEdit->setEnabled(0); + ui.autoAwayReturnEdit->setEnabled(0); + } +} + +void IdentitiesDlg::nickSelectionChanged() { + int curidx = ui.nickList->currentRow(); + ui.editNickButton->setEnabled(curidx >= 0); + ui.delNickButton->setEnabled(curidx >= 0); + ui.upNickButton->setEnabled(curidx > 0); + ui.downNickButton->setEnabled(curidx >= 0 && curidx < ui.nickList->count() - 1); +} + +void IdentitiesDlg::addNick() { + NickEditDlg dlg(this); + if(dlg.exec() == QDialog::Accepted) { + QListWidgetItem *item = new QListWidgetItem(ui.nickList); + item->setText(dlg.getNick()); + item->setFlags(item->flags() | Qt::ItemIsEditable); + ui.nickList->setCurrentItem(item); + nickSelectionChanged(); + } +} + +void IdentitiesDlg::editNick() { + NickEditDlg dlg(this, ui.nickList->currentItem()->text()); + if(dlg.exec() == QDialog::Accepted) { + ui.nickList->currentItem()->setText(dlg.getNick()); + } +} + +void IdentitiesDlg::delNick() { + int row = ui.nickList->currentRow(); + delete ui.nickList->takeItem(row); + if(row <= ui.nickList->count() - 1) ui.nickList->setCurrentRow(row); + else if(row > 0) ui.nickList->setCurrentRow(ui.nickList->count()-1); + nickSelectionChanged(); +} + +void IdentitiesDlg::upNick() { + int row = ui.nickList->currentRow(); + QListWidgetItem *item = ui.nickList->takeItem(row); + ui.nickList->insertItem(row-1, item); + ui.nickList->setCurrentRow(row-1); + nickSelectionChanged(); +} + +void IdentitiesDlg::downNick() { + int row = ui.nickList->currentRow(); + QListWidgetItem *item = ui.nickList->takeItem(row); + ui.nickList->insertItem(row+1, item); + ui.nickList->setCurrentRow(row+1); + nickSelectionChanged(); +} + +void IdentitiesDlg::accept() { + updateIdentity(getCurIdentity()); + QString result = checkValidity(); + if(result.length() == 0) QDialog::accept(); + else { + QMessageBox::warning(this, tr("Invalid Identity!"), + tr("One or more of your identities do not contain all necessary information:\n\n%1\n" + "Please fill in any missing information.").arg(result)); + } +} + +QString IdentitiesDlg::checkValidity() { + QString reason; + foreach(QString name, identities.keys()) { + QString r; + VarMap id = identities[name].toMap(); + if(name == "Default") name = tr("Default Identity"); + if(id["RealName"].toString().length() == 0) { + r += tr(" You have not set a real name."); + } + if(id["Ident"].toString().length() == 0) { + r += tr(" You have to specify an Ident."); + } + if(id["NickList"].toStringList().size() == 0) { + r += tr(" You haven't entered any nicknames."); + } + if(r.length()>0) { + reason += tr("[%1]%2\n").arg(name).arg(r); + } + } + return reason; +} + +void IdentitiesDlg::editIdentities() { + updateIdentity(getCurIdentity()); + IdentitiesEditDlg dlg(this, identities, nameMapping, createDefaultIdentity()); + if(dlg.exec() == QDialog::Accepted) { + identities = dlg.getIdentities(); + nameMapping = dlg.getMapping(); + ui.identityList->clear(); + ui.identityList->addItem(tr("Default Identity")); + foreach(QString id, identities.keys()) { + if(id != "Default") ui.identityList->addItem(id); + } + lastIdentity = getCurIdentity(); + updateWidgets(); + } +} + +/******************************************************************************/ + +IdentitiesEditDlg::IdentitiesEditDlg(QWidget *parent, VarMap _identities, QMap _mapping, VarMap templ) + : QDialog(parent) { + ui.setupUi(this); + identities = _identities; + mapping = _mapping; + identTemplate = templ; + + foreach(QString name, identities.keys()) { + if(name == "Default") continue; + ui.identList->addItem(name); + } + ui.identList->sortItems(); + ui.identList->insertItem(0, tr("Default Identity")); + ui.identList->setCurrentRow(0); + selectionChanged(); + connect(ui.identList, SIGNAL(itemSelectionChanged()), this, SLOT(selectionChanged())); + connect(ui.addButton, SIGNAL(clicked()), this, SLOT(addIdentity())); + connect(ui.duplicateButton, SIGNAL(clicked()), this, SLOT(duplicateIdentity())); + connect(ui.renameButton, SIGNAL(clicked()), this, SLOT(renameIdentity())); + connect(ui.deleteButton, SIGNAL(clicked()), this, SLOT(deleteIdentity())); +} + +void IdentitiesEditDlg::selectionChanged() { + int idx = ui.identList->currentRow(); + ui.duplicateButton->setEnabled(idx >= 0); + ui.renameButton->setEnabled(idx > 0); + ui.deleteButton->setEnabled(idx > 0); + +} + +void IdentitiesEditDlg::addIdentity() { + RenameIdentityDlg dlg(this, identities.keys()); + if(dlg.exec() == QDialog::Accepted) { + VarMap id = identTemplate; + identities[dlg.getName()] = id; + QListWidgetItem *item = new QListWidgetItem(dlg.getName(), ui.identList); + sortList(); + ui.identList->setCurrentItem(item); + selectionChanged(); + } +} + +void IdentitiesEditDlg::duplicateIdentity() { + RenameIdentityDlg dlg(this, identities.keys()); + if(dlg.exec() == QDialog::Accepted) { + QString curname = ui.identList->currentRow() == 0 ? "Default" : ui.identList->currentItem()->text(); + QVariant id = identities[curname]; + identities[dlg.getName()] = id; + QListWidgetItem *item = new QListWidgetItem(dlg.getName(), ui.identList); + sortList(); + ui.identList->setCurrentItem(item); + selectionChanged(); + } +} + +void IdentitiesEditDlg::renameIdentity() { + QList names; + QString curname = ui.identList->currentItem()->text(); + foreach(QString n, identities.keys()) { + if(n != curname) names.append(n); + } + RenameIdentityDlg dlg(this, names, curname); + if(dlg.exec() == QDialog::Accepted) { + QString newname = dlg.getName(); + foreach(QString key, mapping.keys()) { + if(mapping[key] == curname) { + mapping[key] = newname; + break; + } + } + QVariant id = identities.take(curname); + identities[newname] = id; + QListWidgetItem *item = ui.identList->currentItem(); + item->setText(newname); + sortList(); + ui.identList->setCurrentItem(item); + selectionChanged(); + } +} + +void IdentitiesEditDlg::deleteIdentity() { + QString curname = ui.identList->currentItem()->text(); + if(QMessageBox::question(this, tr("Delete Identity?"), + tr("Do you really want to delete identity \"%1\"?\nNetworks using this identity " + "will be reset to use the default identity.").arg(curname), + tr("&Delete"), tr("&Cancel"), QString(), 1, 1) == 0) { + delete ui.identList->takeItem(ui.identList->currentRow()); + foreach(QString key, mapping.keys()) { + if(mapping[key] == curname) { + mapping.remove(key); break; + } + } + identities.remove(curname); + selectionChanged(); + } +} + +void IdentitiesEditDlg::sortList() { + QListWidgetItem *def = ui.identList->takeItem(0); + ui.identList->sortItems(); + ui.identList->insertItem(0, def); +} + +/******************************************************************************/ + +NickEditDlg::NickEditDlg(QWidget *parent, QString nick) : QDialog(parent) { + ui.setupUi(this); + ui.lineEdit->setText(nick); + connect(ui.lineEdit, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString))); + textChanged(nick); +} + +void NickEditDlg::textChanged(QString text) { + ui.okButton->setDisabled(text.isEmpty() || text == ""); +} + +QString NickEditDlg::getNick() { + return ui.lineEdit->text(); +} + +/*******************************************************************************/ + +RenameIdentityDlg::RenameIdentityDlg(QWidget *parent, QList _reserved, QString name) : QDialog(parent) { + ui.setupUi(this); + reserved = _reserved; + //ui.NickEditDlg->setWindowTitle(tr("Edit Identity Name")); // why does this not work? + ui.label->setText(tr("Identity:")); + ui.lineEdit->setText(name); + connect(ui.lineEdit, SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString))); + textChanged(name); +} + +void RenameIdentityDlg::textChanged(QString text) { + if(text.length() == 0) { ui.okButton->setEnabled(0); return; } + ui.okButton->setDisabled(reserved.contains(text)); +} + +QString RenameIdentityDlg::getName() { + return ui.lineEdit->text(); +} + diff --git a/gui/serverlist.h b/gui/serverlist.h new file mode 100644 index 00000000..854b2403 --- /dev/null +++ b/gui/serverlist.h @@ -0,0 +1,178 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _SERVERLIST_H_ +#define _SERVERLIST_H_ + +#include +#include +#include +#include + +#include "ui_serverlistdlg.h" +#include "ui_identitiesdlg.h" +#include "ui_identitieseditdlg.h" +#include "ui_nickeditdlg.h" +#include "ui_networkeditdlg.h" + +typedef QMap VarMap; + +class ServerListDlg : public QDialog { + Q_OBJECT + + public: + ServerListDlg(QWidget *parent); + virtual ~ServerListDlg(); + + bool showOnStartup(); + + public slots: + void editIdentities(); + + private slots: + void updateButtons(); + void on_showOnStartup_stateChanged(int); + void on_addButton_clicked(); + + private: + Ui::ServerListDlg ui; + + void loadNetworks(); + void storeNetworks(); + void loadIdentities(); + void storeIdentities(); + + VarMap networks; + VarMap identities; +}; + +class NetworkEditDlg : public QDialog { + Q_OBJECT + + public: + NetworkEditDlg(QWidget *parent, VarMap network, VarMap identities); + + private: + Ui::NetworkEditDlg ui; + + VarMap network; + VarMap identities; + + VarMap createDefaultNetwork(); +}; + +class IdentitiesDlg : public QDialog { + Q_OBJECT + + public: + IdentitiesDlg(QWidget *parent, VarMap identities); + + VarMap getIdentities() { return identities; } + QMap getNameMapping() { return nameMapping; } + + public slots: + virtual void accept(); + + private slots: + void autoAwayChecked(); + void identityChanged(QString); + void nickSelectionChanged(); + + void addNick(); + void editNick(); + void delNick(); + void upNick(); + void downNick(); + + void editIdentities(); + + private: + Ui::IdentitiesDlg ui; + VarMap identities; + QMap nameMapping; + QString lastIdentity; + + QString checkValidity(); + VarMap createDefaultIdentity(); + QString getCurIdentity(); + void updateWidgets(); + void updateIdentity(QString); +}; + +class NickEditDlg : public QDialog { + Q_OBJECT + + public: + NickEditDlg(QWidget *parent, QString nick = QString()); + + QString getNick(); + + private slots: + void textChanged(QString); + + private: + Ui::NickEditDlg ui; + +}; + +class IdentitiesEditDlg : public QDialog { + Q_OBJECT + + public: + IdentitiesEditDlg(QWidget *parent, VarMap identities, QMap mapping, VarMap templ); + + VarMap getIdentities() { return identities; } + QMap getMapping() { return mapping; } + + private slots: + void selectionChanged(); + + void addIdentity(); + void duplicateIdentity(); + void renameIdentity(); + void deleteIdentity(); + + private: + Ui::IdentitiesEditDlg ui; + + VarMap identities; + VarMap identTemplate; + QMap mapping; + + void sortList(); +}; + +class RenameIdentityDlg : public QDialog { + Q_OBJECT + + public: + RenameIdentityDlg(QWidget *parent, QList reserved, QString name = QString()); + + QString getName(); + + private slots: + void textChanged(QString); + + private: + Ui::NickEditDlg ui; + QList reserved; +}; + +#endif diff --git a/gui/serverlistdlg.ui b/gui/serverlistdlg.ui new file mode 100644 index 00000000..98793b5d --- /dev/null +++ b/gui/serverlistdlg.ui @@ -0,0 +1,248 @@ + + + + + ServerListDlg + + + + 0 + 0 + 757 + 444 + + + + Server List + + + :/default/server.png + + + false + + + false + + + + 8 + + + 6 + + + + + 0 + + + 6 + + + + + false + + + true + + + QAbstractItemView::ExtendedSelection + + + true + + + + + + + 0 + + + 6 + + + + + &Add... + + + :/default/edit_add.png + + + + + + + false + + + &Edit... + + + :/default/edit.png + + + + + + + false + + + &Delete + + + :/default/edit_remove.png + + + + + + + Qt::Vertical + + + + 85 + 296 + + + + + + + + + + + + 0 + + + 6 + + + + + &Show this dialog on startup + + + + + + + Qt::Horizontal + + + + 291 + 25 + + + + + + + + false + + + &Connect + + + :/default/connect_creating.png + + + false + + + + + + + C&lose + + + :/default/button_cancel.png + + + true + + + + + + + + + + 9 + 9 + 739 + 393 + + + + + + + 9 + 408 + 739 + 27 + + + + + + + 660 + 10 + 87 + 391 + + + + + + + + + + + connectButton + clicked() + ServerListDlg + accept() + + + 278 + 253 + + + 96 + 254 + + + + + closeButton + clicked() + ServerListDlg + reject() + + + 369 + 253 + + + 179 + 282 + + + + + diff --git a/images/default/1downarrow.png b/images/default/1downarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd28e91b41b5570afa2de596880f078b9f94fdb GIT binary patch literal 630 zcmV-+0*U>JP)1O$En86TCkcyaL`-#B^1l$M9v z_H}NmEGf(&T7%K3kOPiFDV6(11hInH0J0Vx1k5gIUOX&sF}_xIc+uddGEks#3JfZg zn_!h6tRPt*NeiR{;wgu~HJHq|xl~KNOI4XcltO8>YQg*~D+P^M7e|E2S;0?yUsO=j z-f-gnlgRFtA_7nbBBh`-YbFp2i6n>*62QW}f!LR;-CY{u(+kt{%4yx(5f6v(1hQf9 zGU!@PywTelfW+|YKsK}%ZQIe1bzxU6REHrNhG1vJ{&VJ>xv0Z9IH@zHV#Z)9UhVo1(bTW@Ap2d z_k;gL?D;YluL$|{UdP(_&YQvWU3=~+b-gX+7l!U%>7UygdADiZy!T-d{CPj}zqU>f zNLPB}SaEQFceK8ut*$gndL1TPCin{X`Rt{&bvsi-Lw^c--fKRuax##uU#>26M#}PZ z+)A4Dlu6PO=(@n}b&_8hIXeAKAOO65OWD$r9b~MYK#p1y&?RMlfk>rM1ZbK>(UUxT1#|V+|onLJo=BW-*Yk7=5wHtXsn+RLnJju_P!i0L=m;4Y@^5#Z%GT zusR!$E2;HG^T9kgNfD41M-(`BCY$L^!JXF@h67eJFp;n*DHIqPu)Dx}sNwMHFv#@k zwq~vrgtr%5o|!}rFDE6h(l!zXoUIZ>O9XRkfP};*EF@ti2{_!2PmlWgzYobTb3;vf zZLHnZ+;LpwR~MyhD!O0blyI?L;8kEJ15c(b0KTNm)L2(@?m1j?%@BNv6qF{HIYsEFq#^>qr cf9U_pS4bAkf;HYmF#rGn07*qoM6N<$f>fY74gdfE literal 0 HcmV?d00001 diff --git a/images/default/1rightarrow.png b/images/default/1rightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..70cfd5f20012f781ef0ec3d80a1c39cfe4ae424d GIT binary patch literal 693 zcmV;m0!safP)d zpQ!726PJFndiLAY1oHIc->ID0dG$|bm9AmKynb&%&#is%!kSu9xnarX7sTdNR#(;3 zoCzB;u6Ubee|}C{T1nLfCGl9PM-~))u73>BHx*=5T)kF&I5*3y8LWiDEP4FI#Y&`S z?n+K6sXA-Ps;u;fBL!t*bQEM|gCN0Gc;&{e)SWSoHO)d0D~d&AemTf$K*1g@;z~|( z`F59|*7K{+BiT*;i+cdj1ORJB`Kj9a#^$sn5nl*Y9TYW;cPW4>YbaWnDItmp)rJ%) z5+4Q5#j(%5H!ocl0k-ZdIkY8FWJ!k*paHUA!E3XzqF7lpED%sQmt!F>*-C^Y(7KkM z{jspDR0MDp94S_%^<*Iv{9*9>WDwwBmV?X~5X}e%XEg4#c$n2CNR7sjbwMP`mEhQu zS1@lv&;+{;4#Y!BY9yu!!>iCR4l@CPpe$jEPPFk+U47a4DdcW^D@J4%?PI%hn;l8#kJUk9k+D|8DK_%9)Muq$g-!s$sKSvwJJkh zZNT{No(Mq1stbw={&$n!mFG>}t8I^()j@X$XhS~=`6FW5)KGKF(c?|Z$on32?*Quw b{vY1~6W9``k8mD$00000NkvXXu0mjfhM7BV literal 0 HcmV?d00001 diff --git a/images/default/1uparrow.png b/images/default/1uparrow.png new file mode 100644 index 0000000000000000000000000000000000000000..c6bd1fb295b0837feeceb53ba0cf553af3fe9a3b GIT binary patch literal 584 zcmV-O0=NB%P)>|#l#7`Mj9#Me< ze>Q8$&<9%@qea=!SCTuQYPAG` zABY&!B9GD{Cr3YjBoJ&^nn57s-_aAj6=_}_T(F>b2Bs`1uK<@D(m4Rfn%e5r@V zuu|1|?$F`O*J3^mUKAkX1(yRf4HWg~hL#N_6MQ*na=~QAGzX6D*{wT0)j?$e;suyU z33?JdYZO#{>5;{Rd|G&$5u{$FOwsl7=8ny}nM|s$1w!KWApnbS{`M8I&M2q9L^IWmG~^mxO3UERaTA zx++^5twbekNLZ-YX(UKQEL1Esf>;zIAqXu&TP-8gX-(VdoO3>l78RHDS^w|*=lh;d z0Yn$q94OngtIF`&8N4RS)F?xPQUD-=%9(r)-&;_~t4#+q{`KxAU1c*W`| z(+mbsJ`+4cB@E{g5Zgs^HVoRN(hwV8n%~?ACP4CCYy0#`CZ;bq^ja&>{En*;*Fa%$ zxjDzPhj+iguRro5TQ6OoSh>B}@Pal$nV^PC#09azvBB^bW416_)3wrur z+-{Qayw$;_1yM5$Mi5j0R32zQ;DwwEofj`Qry43N!1>6Z_$N&`boI`{Hj$NSkEFEECd$kZpXG z?7z~`5SUrv56`J7`j&i?A^V|Q0nA=^^1{KY%H4*gQOb3DT$fwXkhW$j2C@)(>#(M~ z*EN+#DN$;mUvsSbz|l{S>uXJbta$X?!XR35h-qj;D;5D~-$TTOeKC!SjnU!?*bcUM zaJ?2Vtg$0;^TCOxii&XI7{nQ}U>e{Xl1hD-!f`-s1xk~A+9j!%_a6P+fs=WgXnENc z_&R@m$>*^K9SYhtbZY2O&?eCCz()sOxAc)XzNgMyYo9xbXFcM$8ER?UY zLf{R8F95zg@K}&->vg*7_MXT+zj73C|Dq8>WmR=Wts<)iMAl_R%CaKyK9RXk`W$O< z`JoZV_fPb=ozpzUA=9aYu{g jFI-aYojQBN|H9t^!2TMF^0Xes00000NkvXXu0mjfvv*{~ literal 0 HcmV?d00001 diff --git a/images/default/2downarrow.png b/images/default/2downarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..f1185964f035c163027d57f41a0244770149c8d6 GIT binary patch literal 1148 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 jGKiKLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$00088NklGeGjLU-vnvpoDpePD6f(kwfg191#h!3NpBB;2apa>xb z*VbrHf@#y~d++ZA(VrVuSXy+Kv@s^JW^ed7+O~b z-~x2Ex4j%)>f#o}a%pS8GI#|R1rCM?CvInXc=PHzHr8MyVT>t@FFt;*WNl-m69(&o zalzyv3P2wC9(ZYZbLhzR)S2dmlHT{<^WwwF=EmgNe;z3YHV)1Zu=(u_0b2}y1m2uF zb~|EpCQ)P+2s|H8A%bv(fev2XyKrOo<))^>iX!CaEVvF7$+oYHzXt#a4PV{* z*RLt5?#X|Bv6|nu0?z+K-vaKLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$0008CNkljeT}c%`|3TyZ0Q{>O+FFkc zNQ1Z2T75F9ns!$sQ_@HMQt_U~!+^06z$km;^zrwuN>?VO4IR?bFQrGmlD2&>{T!Cw z9F`v4^WnR90}M$RhG7O?|NOwN`WN>;;DO*cj3&Y7WbVaXDDlDOJQ#~Z^E>-ryLR;L z_x}SduG{;{O9u`$nJ)YkgOCNjEHLc3OE8m!0zq{){1YMd+3w9-1jlU>= z{u&EcK2g_l}JiQ|Qo2MlY@EXaju0=kkA z@EUl`MR~xih1`NN^TB27u+5a^u`n$bR5~St88@9A=|3k;|NZX(BEoGd*c8VF00000 LNkvXXu0mjfw-^^7 literal 0 HcmV?d00001 diff --git a/images/default/add_user.png b/images/default/add_user.png new file mode 100644 index 0000000000000000000000000000000000000000..cec9f51f8096d9b65aa1f93615a1e2db88003577 GIT binary patch literal 1285 zcmV+g1^W7lP)KLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$0009(Nkl%WGU^7{-6!`MxtVXU@!IW-^&% z5*wwlrcEHJB-K=12vwv77e)|Dtp&R%qJMyYfVi@5L^tBfg^C-&x(Ed^8ZQmDLVAl< zZJU^cOfvV(%*nZYpNm~u1f^QB6z z*umXb{lL2uhCV_F0L1?cG^CQoK0XnBT4`GI9k0vCP?iG+$Eh|lw{Bj)akACgUb8F( zfF*$coPe}j_&``<{?zF=cyQt*t9NSr_Um1g@+Y)$-tIAbP)X~b^a$_)Aw6Rd5}4Yb_YRY=(r%IHytP1j;AWf9phY7EVGb(q6(22mYsmqH4n z$o?ba=+%xqO8n3n?6^RtCmo~#X~4o_Rd-0_G7Jpmud2HL{OC|RL%7HHi@$7iLiw7V zo!!!-XYn;yO3|wl1Hu57lT@+HXIr;S+D&km!{DL?(Ga8o?8Vzl}ymY(XsI}Lfqj7KkCat}FY&%9Gu9S)Cgcv^WDz6q_ zFpd*WW_iV}LU+zj%VH4fP#A46M&tVt#_*$(T7=1Ta3b&o zfo~QHu4Lc=&9_#&(qHPI>i#@V6pQeqkVr=uV=x%P&=7{Yw*w=9mM0wGMsnpFjV@ z5B_sPa>bIHmZMAW0_v!Ba*6p$kGETS;_6i5OU+jS?O)@R1F>~?CR!CwU_$ZEdz5Bp zgQD3bT>SY){C<@~(8}V}HEMsyX=R2BXR1y*GGf*+>K`H~OT2J*BO8^iY5>zt?eW9M zO6z3xcUtG$r0I6*BRKtt?p#IX!P8c~o$KUR&Ox{OhD0SL8 z8=OHUhDnS`A~8oOBKvF3j^ZulDLNazpqDAh!@%4#-hFtF>pBh601iMF5y-S`lnSP` zF5ICZe2NQ=K~Y(=Oslnm25)GD(coL$;X%B^GdLTh+J%0q02x4B{LIVnJZUR)b=g8( zh;M?Qu-cDNh(#}|QK@7MIyDOu0)3Z!muLH^j$i;02nB}e3NFgFth|KvdXtJI?K12! zS)?26EH`E_;|kDm*4a4KBUk>4BL@INekWZ)Nm`X#U|*YRvSHP&V4W$K@h@XEoqE{f zc`Tg(!hhOJ+=g=f{bu)G<&Atp>F}Oc?8VyX76+IM9mdWU*B)h4nc)_oj|N9dvgA_% d#QqD8svmTf-+uGGFAe|z002ovPDHLkV1h1LEeiku literal 0 HcmV?d00001 diff --git a/images/default/back.png b/images/default/back.png new file mode 100644 index 0000000000000000000000000000000000000000..b04d9220eb5ef14ae614cdeccfa3bd6f0c20caf9 GIT binary patch literal 809 zcmV+^1J?YBP)Gifj)q=;@55wx2u zBn1~;bR&X0kwV=Hf}$YZ2!bxug*%O+wYEsL3O1&7T202LlXhC0nMr2m&fooaA&AcO z><+x=;hgvI3Lab!DWl4iwB!ha$ank__qYL6dxheEU5fefr}n*kbYbS{gX7~PNh^sL zy6iM|*esTcS1;v1zxPe$9X!_i0OqXr$}=xL`PSoyj|o%igrQFq2h5EwFl6sx%O| zmBV9M9yu}jHZUSHk69eW?yCh;6#sGK0<90iY8ImBzH8Mv1ipq zHS@4FqbMG}aLJ~pSUPeBLrwO*MMxhd(IS!&ek4ff0qFzAoGKHZR%)%X+pw{zcqa1VbrU_1@t7t#^rgAc_)WTVR_K+Y}^JLAw(ECGTH#&vl)M0b8PLg0yY2;eEoj z#s~a&6-`>0y1>u`1GdB|hiqSW&&kFg!N>XYt-R|R>`Gb~a)7ipNiEpmR{J}m*e8ym z+`Wk*C4)&5r>Ss#x%stQ=351Dch=n%b-!|aD6`iZwI<1!Su)xobR|X2FHr1UpcbqV zbWPSv4wsj=3cr5XSR$mN00dp`+_~KT($!mY!JgV!Cw7Tq6(fXSH~P zOCOcK`1x#Ok&t44n7|m$%IC9B*vB(dTFy+#UBtxA?XbF)_pYp6?0n{w!mog+FHF54 nG{#he-9Q{Pr~;cn&@22KuGlgYAJ9VE00000NkvXXu0mjfW%Pss literal 0 HcmV?d00001 diff --git a/images/default/bell.png b/images/default/bell.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7b6ae106d4ff1acbb0a3cd1e11e1290c408455 GIT binary patch literal 778 zcmV+l1NHogP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;fJsC_RCwBA`2YVu0}P{sQVYflr4~&8Ed&^Rfm{wC zW<*y5(gzSgObj?ck_LmLoe_h+odp{M2Ma?nP)H1jS+S`F2q2t>eEq@Tq@e_Hod6G$ z9FP(QVs>n50Rjl8A)mf8FmZCi6@gsAiOVGb0ff_#&p#P1-Fg6FfBVDm5UQ3Dn_7SX z!fD9c-wX$~9AxP|j-48NZ+FudH2FaSvZ24WQ+1_l#Bh8RP327PGq02>4lKq!W& z+cV^Ad+PHsd^*m+@bC=W01(Xz3>Q5v1_m1|23=7maIWTur89s4LJ8QtI~ihLyqR5R z;H0D`sqDZYt?+_@f%`MVqdPAc&RqD#aPd9E>*Eg@PM!F{umPGG!Hxh3AoO$s%4Fgo zti!>e&%wyR_vb$Y6G+9~pA2`u{0F=32h@EpKp_Rx{}&*@0Ll{R<9RjOoB#j-07*qo IM6N<$f&$|}-2eap literal 0 HcmV?d00001 diff --git a/images/default/bookmark.png b/images/default/bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..50e9551adec43246108c8edf91edf6beea51aae5 GIT binary patch literal 661 zcmV;G0&4w3xGu?J}Ij5J55-0e5{CzL{eqVlY z3R>$7-nKe}_cYCE5T;&s%}u@V&H=)i-8FV?qr5S#$Sb2tjh)79Ix!p3(|)a2Uvfdv z7ncb=t<}9}UBDjlzlx~ximL8>QbXhI5x{Ud}w$0Bj#9^P_M4erGyRf63!?3i38Y{P6QLL<5jW zK+1@sD`n_QYQa13t#eaS-vMZj%1FZc`MNvEyi7?hrdh`b&fAaJ4#k+d7ubZ<*+`1iPD!KEQPX@9J(g v`X>7FgMj6v0CS#}mg8p~gZM{dJ{tT6<&oSc>y?YL00000NkvXXu0mjf4_`Rw literal 0 HcmV?d00001 diff --git a/images/default/bookmark_add.png b/images/default/bookmark_add.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f4090cc1b6583e2a003a23f1dc2a77b308d4dd GIT binary patch literal 978 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 QssI2007*qoM6N<$f)-3Q5r00009a7bBm000XU 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 literal 0 HcmV?d00001 diff --git a/images/default/bookmarks_list_add.png b/images/default/bookmarks_list_add.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d093ae4eea3bf631ac5f02dfad4d6e2670f834 GIT binary patch literal 708 zcmV;#0z3VQP)5r00009a7bBm000XU z000XU0RWnu7ytkO1ZP1_K>z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;I!Q!9RCwBAV88=DRWZzeU(PTepBjJwV#Fo!p^`y> ziJ$%c@81jzzux>*l$^-$0h>C20Aj*r!2kaY1+2RA0&IF(0)PK76yQ<^5I{H$U|?g4 zXLHbF;Br!C_{Yi=k4qUq0AV%YZ5cxXv#PWLBj;lVM()Q99O?=RPntv<{{7o6fUXuG zfEfREG0gw_k3r!t(64_v*&P0H^D}_h+!2-x%pxzrivGNmV|YH}0K?zE3=H32d}Lr? z=lJmP{-+B-uRQ<=AjZF)4Dd@IVyo0LpL+7Jk_K2ABxGV`7l4 zP|Xi+Jb)Vu5I`&_Au6pZ!20zS1H;Fk5P^R{ryo|t8Pkf6jQ;@w2qhYSJ$+=)!U{@; zzZe)E{AT!d`4__q=^G69Z(L-kZ%0i_{uT0I8X$mBlJfIb(f`7nZy6ZBFfu%U@{i%| z+y58-0Hahuh|wVA!+(Z^3HD%hATMm}cnA(efB=GP1|^b*Sxo<5WitG~7RB)XQYb?L zBuW2gIO@TWaMX?Ay?y}0|NI^D{}miS!vDc?009Iy;C3Q|!p(TF=7uW~3<8Ke0a3Wm qfk9xm4MPJ+^AKLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$0007-Nkl1v7&i(P;nevh;Mq(04 zgoPuas}>V&S_M+HDV)S0S_?s&7A@MgD%w~H5kZkeQPd(th@>B8tgt^5O{|nrkMpC> zyUE+N*utO$XQid@lX~ z>*8j-r+r5%ajfPrvB*LRg%lDY6~2O-V|Tdp{&FT4Y0kVopDDBzngm^(I9Pq)+7YJ#Whh*?lB0Xi@-IDncZKk05rN{4eo6Q6 z&3409cB;9onv&2MLg5ID|4Qa4kw+{l^4T;%O2&*>(hW5}OEn#Q;nla>>)1CF510u? z@X-uTJ;t1W50I3u;SvgsFEzf>1X7dE-XiZ$tiXj}k~hHN(#o*cGC1x4s%ls3jqCqSdENAHhjhvsOC~e|~0&}%Km+q6vH4sE| zye?j$5Ka=>0!s=)1BxPAG6&RYqbTa`%g!O}5{qVz+N#RG;NSAfJT`kCmJ7CH(4PgM`}ZcMTef(KL%ZjY zc7U=$nIP5jt}a3tLg+)}o7~Gd^pDSG=%7h1H)wtFUF*l6Hc=U?$8x~19i&l(R9lf| z1!kE^m0QoF!AiCAl@kBE%wY#t_8-+#5hv#44awF5nk3v2JtO?Va lI0Gplx#p%9SQqDC0|4BM|Kb&c&71%L002ovPDHLkV1nCA@~{8^ literal 0 HcmV?d00001 diff --git a/images/default/button_cancel.png b/images/default/button_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..e9920bf47d78cdf4c3ab8f7642cbf3bd981ced21 GIT binary patch literal 842 zcmV-Q1GW5#P))_`%oDz7N*vvT4qUVYa}$i$!RF&xK8@m>Xi~}+|C=4xYM~~k8C>R{xUVr}QXmr9(By2m8 zu&*9C@Drf?AN*%Le%GFxv+Z-|?9W1>5kL@LhMuU;_d1#e*)09>_`q~;@7Q*eFtkh! z4P9yI?+>xI22Lk2ulGaX1yO)D-_p{tmM2e;o0_0lB-Gj2wl9-;g$@C?*y+`#N`6NpGTPtzu&sW=Eeq|x;m6yyFd_d$?|hCw>y^B^?SEVr3GnZd}W&7-!aX5t?TO@u22Xi7zD#W6a?phstzt`+M*ON&4}%E z;!ss+Y$Th@u`)Bmr-mBEtV~Qecv$I?*m8MW3{3Xoiy1VT; zw_D#0Cw6#7M<0yb^mvSot}gpDTmynno2|os|5#WM-rNCxrah7rf7j9mM0wGMsnpFjV@ z5B_sPa>bIHmZMAW0_v!Ba*6p$kGETS;_6i5OU+jS?O)@R1F>~?CR!CwU_$ZEdz5Bp zgQD3bT>SY){C<@~(8}V}HEMsyX=R2BXR1y*GGf*+>K`H~OT2J*BO8^iY5>zt?eW9M zO6z3xcUtG$r0I6*BRKtt?p#IX!P8c~o$KUR&Ox{OhD0SL8 z8=OHUhDnS`A~8oOBKvF3j^ZulDLNazpqDAh!@%4#-hFtF>pBh601iMF5y-S`lnSP` zF5ICZe2NQ=K~Y(=Oslnm25)GD(coL$;X%B^GdLTh+J%0q02x4B{LIVnJZUR)b=g8( zh;M?Qu-cDNh(#}|QK@7MIyDOu0)3Z!muLH^j$i;02nB}e3NFgFth|KvdXtJI?K12! zS)?26EH`E_;|kDm*4a4KBUk>4BL@INekWZ)Nm`X#U|*YRvSHP&V4W$K@h@XEoqE{f zc`Tg(!hhOJ+=g=f{bu)G<&Atp>F}Oc?8VyX76+IM9mdWU*B)h4nc)_oj|N9dvgA_% d#QqD8svmTf-+uGGFAe|z002ovPDHLkV1h1LEeiku literal 0 HcmV?d00001 diff --git a/images/default/cancel.png b/images/default/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..e9920bf47d78cdf4c3ab8f7642cbf3bd981ced21 GIT binary patch literal 842 zcmV-Q1GW5#P))_`%oDz7N*vvT4qUVYa}$i$!RF&xK8@m>Xi~}+|C=4xYM~~k8C>R{xUVr}QXmr9(By2m8 zu&*9C@Drf?AN*%Le%GFxv+Z-|?9W1>5kL@LhMuU;_d1#e*)09>_`q~;@7Q*eFtkh! z4P9yI?+>xI22Lk2ulGaX1yO)D-_p{tmM2e;o0_0lB-Gj2wl9-;g$@C?*y+`#N`6NpGTPtzu&sW=Eeq|x;m6yyFd_d$?|hCw>y^B^?SEVr3GnZd}W&7-!aX5t?TO@u22Xi7zD#W6a?phstzt`+M*ON&4}%E z;!ss+Y$Th@u`)Bmr-mBEtV~Qecv$I?*m8MW3{3Xoiy1VT; zw_D#0Cw6#7M<0yb^mvSot}gpDTmynno2|os|5#WM-rNCxrah7rf7j}p9A`z&lxD+G^!Z|ZDqcIvMn?^@Rm7KlZ6bi-D zqN1YPWo2c)7z>3$Ul2kN4u=89@mz&Mk!vs*8Y(L+EZGEogg==iq!NBJ^XI;z0=DkA$91aJc zVHSKcnLIZ=gAXjr`e|xz>&H-yWd8k>iD6cOUhuXxn>X*o1=wu1WV_u?Nu|=vw6s*f zFzom6@W@JQYfC8rz>e1=pa1xY{`PeZ78kwk&Ep%__T50G>R6XZBNbX9*#iU5 zU$wVCys~fB^4_D#X~=x`!kH4GFb@g~k6qo)2##<70Jz+gEP>$26pzPS?dyB?JV3z@j9a$Y`wuM}I9s{Tl6n9D002ovPDHLkV1gQ5SXlr7 literal 0 HcmV?d00001 diff --git a/images/default/configure_shortcuts.png b/images/default/configure_shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..47d469e041f5b30aeaf55c6c089ac9d44cea6d26 GIT binary patch literal 1009 zcmVz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZk0*x1+@q@=`9Tm%q6OfoX!!LqXAD}Vj^t^4=yUj_~i_G)WuLmOURZlHI6 zgB1b2C;R@>PwuZ@zcYOL_=SO&myT0V94BQnjUc5Qz>}-~) zuCBoF@#9yZ0W1vf-hE(r{OtX6p+7f2IrHvf_ylwj$5(Bj)^HSq00M~R=FNu>tgQ64 zyuEF;UcY{)rJ^Fs@c#WrpwvI0|Ct$Hzkbi~<=a1TPtLtM!b~5o{A2vXz{c{h5|1vy!^n&5T7X}7-&O1sHjK_Wd{`&Xl z`}hB+7`cQPWNnjKK|uoy?0+DG00M|vL&NgyjT`s=zIyfE3TPn9w{JffUcGwD0E|fn zHckNs<~PR}B%e-Xko@tKpFxn_^Yb^hFP~n%JpS>;jsJ`+od5YGRKP9*2q4DL&{Bpk zU%mh}{`BVL|9{Q-2WLEl$n08{Qb|_cjYP@0~$1Q6IoU%!3>Cp1e-iT?~_fX2o~Mt}ff zfpI{F00l@kW)q^VtgPUM0R#{OD2%+k zvKi{?>i#2xqeqY8rIFQnczFB=2q2bKtGd7j*4NjgIG2!XU;xGk2p~qFp>RP^ppg@6 f+qZ9L1PCwy#y_i~t&{jx00000NkvXXu0mjf@#E%z literal 0 HcmV?d00001 diff --git a/images/default/configure_toolbars.png b/images/default/configure_toolbars.png new file mode 100644 index 0000000000000000000000000000000000000000..653479bf0b24359a43ceac8ce582aabe8ecb8a4f GIT binary patch literal 1160 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 FV1kYhFY5pR literal 0 HcmV?d00001 diff --git a/images/default/connect_no.png b/images/default/connect_no.png new file mode 100644 index 0000000000000000000000000000000000000000..eebad5959941a5ca87fd201caf797c8c2e69c929 GIT binary patch literal 3195 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 literal 0 HcmV?d00001 diff --git a/images/default/editcopy.png b/images/default/editcopy.png new file mode 100644 index 0000000000000000000000000000000000000000..8a227f8976be54e7cea4819b04d867e3df6e21a9 GIT binary patch literal 389 zcmV;00eb$4P)1pw7=@o?;XnwKE*=7f-XL<&4Sb3YJw#7XdVn-*ZqOl{ zwDb@fasm?w2y%c9#+KBuUQ>HpsQf0NyA_bG&U!wm@`Nb*uj>8IqJ^IB`) zb)DB*`&2!>if-^e)UkW$*afUt%Na~aLRTANHTY_lxOn8p~B286#b z+)t&6fMI{u+R?)RaLz?gmSsJluIn$Q)XP==3oVz+2p+*_v)OY|6i>ESw^%G5x7+P^ zRaI!)HaZeQz!-~Z=JPp}QeaKf98agyF%Zw^^8)}d#-h`|W-w3&0C}Dx&+~hoO#*)Q j`~5qBk9)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;Zb?KzRCwBSlU+ztaTvybXJ=<~TTZv-M=k9`Ss+~% zUIb*mSh?FV~Kbv6GobG#ope{=tduNOB0{uMwnnVfSRM;yly%d%u+EP`uYJ1k(yJ$0>?S1MBn4X@hP9zenuC7uj6tGJ+s;W^N4$<7ao8XS?jDOKW zt^i%vB@hS@4u=VaLMUDZM;ri(#R7hx%J7qiN+rO%F0xq@uU7*gy_BZ!O&gFrWhCYpC!@Og0W%{n~n1N)fnNL7>2R(-yN)Xp&q!}+k4JQ zeVi1_%8PB=V%xTurX}<9OENHUTLOX5y|urd$~Fdp2+&?vSJxGfHzlIc+G>x-qvZ2> qYj$>aDxFS`0?&XfkXtX|?*Ra|jwYkxV<_wZ0000r-q1 literal 0 HcmV?d00001 diff --git a/images/default/exit.png b/images/default/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c19fb8a9182d4acf15e9d5c040eaaa417142e2 GIT binary patch literal 1136 zcmV-$1dscPP)KLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$00083Nkl~=oWF%|3MI;iwGTba1veOBDA85f`cGY6pNxF_%S-Ts1-q|#@f^*-kK(9 z?wfm$LzTLT_)Ld$;Nju${FI3BKT;yX#NgoJmhT@osZ>S)rPR_z9D z*3v&bOl$30f-6^W-o8aXeF9iYK&OM9on?JKPj4>A%(ZI-4<2CBX-p ztI3Rv5EgHtk>v!+T4=Xfvu_`rAfSBX1||#%ibag$;4~V9laoaGJl@cDn*BX!8~7d(f+*Ar%trC^XBz&LR!~_XrNNR`Z!+Y%1JG%0RFxge8uiuspbf<$Yl~^p5@HcJ3 zB$F^Zi&6?%SRkra!B67s8b+!WXgATWS^j~xmT+#4()c)z=P_{lG-0KJot{RjRU)nF zE?mT2w~oc)O{BSiGR_|f;utN$m&=z~v3WBCCr^^zy_@>oyJ&0a&gb!lhG^frP2*Al zlS!i&I!o;o5sE!MG70h&K{q{ps|v6McPG z|AoTq^Ydq(1i^VFBERX|;KEAaZ+t5YKY)(_KL-He_b>FZtIXX100001}Oiau>V0r)ohy|hf ze+~-^TSs_!5VyO#J%f&p5(76k8`ywfzy2}YxbcW#>(+hND_3q@^YP=G3MM9|DIk3S z0mKOM0?=l6W@gsS2?>#`?(Vh>EG&!+KY#uP84ER>fq|8k6)4WkaP;VThW`E;zdwC? z=L_WT1PCBz5fNp+-@kv)c5tv)u(!7a`u7immX;jDn>QaB9zT8sbpCfB`vZfjsx$)^ z7aPzZ4hEoQ%oi_SRsyozrEP%$$MEjm2Zom~KQO4M z$S`nnvVk>8N{TQjC`f?4($}|?Va=ND3=bbZVfgXm8_=6SUIGLV3otN*7=a=6`t=*2 zz%PbJkDdZu@|Gbn(T{z;&8o~^;=sVEDKkonn zhzS^yTY!FH`19uvFyZhqw6zs7Xllwq{k#~caXQ0?58oO1_&69^TXTQ`s>=Y3HLw9d z7i<9tASPfeU;Y05>oJh?K%su)#sg5IVwf>wEyJ!|M;R_$xW+JX;u41M-+wXOyY~!8 zLo5Tj`WVowR{;WuQCZmzsNt_W2M5n)b#+Zvad8O-2?=3_+qWNp6A~zZfBpK+pslS6 z4CoKQwDFkX%9ZoKzkK=R3rx~G0RjjZjq;$-y!-3dkN2NHf3at0XJZ2<6b2CyL10vJ z0>gxhL0DLr;r;uMz!-YSaQ*t#uV21=ECp&_4)P{I0D%nvr)frpQ^2@A_wwa)#ZR9; z$$k0q6=X0l2EH-ezkd&ynQk!Lx^?~Nj~`!ifSQ-V@(@4(fxQ6DiJ)u?^1mQ3kTigb xeAw7ng+O5gOds!nA-)9|`rz!0oPz-Z3;@VckhxK7)4Kow002ovPDHLkV1nb_%*Ox# literal 0 HcmV?d00001 diff --git a/images/default/filenew.png b/images/default/filenew.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe1d06e04b156b4506638362c6cd4689a1ca1dc GIT binary patch literal 357 zcmV-r0h<1aP)ypf?y>Q=J_VgW|>)C*W`y`nBkl6@#YB}b2uEnnOR{aj^nsp*VSp7J_Gn#0KV@( z5s|*MrfJem)99+IJ^e#j^kLYB~VJ8024CB=S3_55pA}x76}0JJj2|tMQeRxul|7$ zVsU43mLLd%U45Hl{MFxuVfexZxiJv|0K+i60{Hv^61=P;AW)P(00000NkvXXu0mjf DVfB-! literal 0 HcmV?d00001 diff --git a/images/default/fileopen.png b/images/default/fileopen.png new file mode 100644 index 0000000000000000000000000000000000000000..037c2da98d1c629fd33957baa64edc60197ef767 GIT binary patch literal 1080 zcmV-81jqY{P)mwqz<1P}`@lm7u-_Wk>BJ5^%+ZkvZGVS)t0! zQI3z3gPGyiuYU}Vb_%h}R$p1k!oqau&p$@6MF0WBqM^#0m>4g@@b(h}!`D9y4B8s( z3_q_w^hpYolhoD}Wcc=tf#J)Szd$E3FgV-F@E$t#qVw;?H{n3*AAt-22p}dlR)#Nv z0!$2?91IM<9)4iZ{{Nn#DPKoYS6h(b_iqMHl}znhny{{;vj7NEfl%s?A{uyZo3I`f9%-1|=qzkmK_`1AKK!(X5aKml{* z_D6>MAD9{BbmbYI{a|GfG?C$ZbNr>lpRZ5P0t67t-~ay@Sb(-1xcH4h^gkf9L(b$NR4`G5q_n7a#xtK>)u0 z1pfX10Pyqx0O{iN0E>Ge0QUL(00kEX0Mz3F0PfoV0P5-g0ORQY0PE-Y0Pp1O0P)-A z0Qu$e<^Toy3IGTG%mRpo1!(=Tv)>ss<#`y`g_#&mTxVc-``{nLgXhc)ckljVc=G56 z!?UNq7(P6F%kb;ndyo@=A;$QRf$8@nhW~%B0R#{e1JL;wF1};1Gv;Kt0hE9IosHot z(17Bh=mEkYL9e@C0dHCojgQhAQ zgQOS-13yrW79RtHkPI`!$9KOOq?rFO2>$%WAi?~X;Wse({sktKpI`qlK6(6)=k>F{ zml+rt{{RFK%l$i_8Jvyz8Qg$|fLy}>H2a4n12_SF`}&XJrv(ecH(j%TvAHNx{-T3?rD0v*1#25eqh>^u`|9ew25gu-KCI(>C15?dku-||G_yzPg2>)dG y1=REh$o}&Sltce8yt@Bq5yKybWRPV50R{k_prTF4A=z@7%fX-xhX7UHuM}iW5Sm&v7rwH9k~y15|B1l9-!1288PWl`q=rOC<3 zrwa>>#^uq8+aJDITA54SGQ=&H_^3qOF0*$yz>l8}_iB~0);hA*2K)Q_-<;Xm*%!@b z^EJTEo@V*oHiH8S6@(~dkP?)1(5l36RN~db)gJw+si|lF%*@Q=-atIqP6Uz^w=5_J zKAqHZ^hFFoF=XqWc2nQXcXX)gUDA0&52o1S`qg3O#Q88V>0SNpw zO|1}u<93_qT*#aG>$Eb#fahQUZ6KGBb>YU90gjK`B}78e&0LKM03@~*4Af-laEoUR;!OU zHa42pS_(P)zJEf~KhawlhODoz@6653J^Ul4meb=B1mmNlqf^EhtF^WOeG4kuag8zA f?(Xi}LXE!x{a0Y})ju~N00000NkvXXu0mjfR%A^A literal 0 HcmV?d00001 diff --git a/images/default/filesave.png b/images/default/filesave.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e317505552d11778e5074b0aaa699ea14e3fb2 GIT binary patch literal 641 zcmV-{0)G98P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-_en%SRCwBi(mhTiF&M`2za38|iIrpuM8Q2$q~tKP z(RL|vf^@q*SKtO5U?nQ(5TYRwADJLo%Ix@KGUIKQVbQYTY3=vXPxdP&lS%*V?5xc5 zoag6f%ChAA{2cE+d7kt5_{e&_Cd)FEQrz6!ptWYXTzP7d$*X(ChWE)?$odHk*B)PN%67LJ&eAgn+dc?>*b?mY0_oUSD4U z2q7>S4A5HRoFhpRs;WW=p%j2~j;gBKg3V?_p63jQL$uZuMM0XTD5Y@D(KHQGN&u7) z0`EP}If|lSzu&XjY#5D3oSd9sjKMiar_-UXYrOZw7!g7sgrF5jDH#j~)OF4E^)<)G z$2>hfF&qwAEEdEVxxBojs;YklZ>*!EBLMF2@436X10cr8TcngoDM`~5DdoGsT8osD z`Fu{(G#rYQlI3#Q-cv#dthHoWMvRf7C=M2Atx1vuW6Z}l2q9pMVYk~Mg!ptg#>jrZ zCxn1=?xVna&v-m0P1A#dUa!|KT`Tb36GEUY%l6=Zf~IK*A>h4#7Z_tmlB8YbLy0lA zo2!&U0kPljGaipoO403h4;FO0-BzKLif`6wr_<3{mc_sS{j>ZLi@L6Vot~cl6kiQ| bmEQvZ`vN;p(1iba00000NkvXXu0mjfw+tMl literal 0 HcmV?d00001 diff --git a/images/default/filesaveas.png b/images/default/filesaveas.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce047fd7204f35223a4bda971f26d3479c89591 GIT binary patch literal 841 zcmV-P1GfB$P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;zez+vRCwByl22${RT#y8_s*M1=3VE_NTwsqrs~3t zLZBNJaS?G}L2ywQwn9*fiW?2tbZxfkqJ&6A5L5^XuG~!Bh}BpjAz*77D>G^S%$qPT z%<=FPh<(xwU`c;MT791iE4@56h~|D8MMUvJ);f9qxMJz{xz*~f9r{{B8$ma($3 zg0+@7j@jMaWoKuHMx#Lx1Z-?vy93 z@J#15UOk<2AAz+NV+?7UlIJ=7exE3cXt&!WNrEwkvoF4cU54Qe_~_IkLKuV)#{$L} zq?CkV$Ye5MeSMu)tHs{l9<^GHt6%(t`2><%@Im+vrF;An2gVqRqM+Gq0VZl7)o@ilR7Ce&W{r0*Xwm=X9M`{I-h+E8?);;=NJqI zc<)h4F*7qmp658{Xf~T;@4XMKwK(Va^Y(47TzrN8>2u64&a=6>i4cM)icm^XsZ^*` zDilS5bM8S0Ns>@5ml@|d&%OIOVHncwc8Q{hFbn}GiUMQI$!9v}2!h~Ppjxd`uh(g{ zT3BlVXt&$^8~*Mf2m%ivfM-jkl4>*>-h0n~K?p&TBw{j|+?|`7yVmJ+{9gkA3pJc2 T6o|@C00000NkvXXu0mjfxGH=K literal 0 HcmV?d00001 diff --git a/images/default/finish.png b/images/default/finish.png new file mode 100644 index 0000000000000000000000000000000000000000..9a538090504aee6351287eed403b437d75b3678e GIT binary patch literal 1183 zcmV;Q1YrA#P)KLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$0008oNkle2T1;K;p!Heicdn)wer5C+EpyNaD@7%myXE-&-hl zWt}{9^r^nLizh~($oKZ+*2(ykB(XP|v z4-NBD@fUZ>7;1-5uTe`DsEaa*^!KAR zT)lm%70Li*Hjxr!Scxl+C2*aVr_&l^?*tkq*Df&Oy$gV22~q+YUa~1GvyJOfU6XMo zwk1fX1eR>ug`f5>F};1Bdor!Jv28(ZBW7c+F)26yY<^k#K3vjCimYp5Nt+<@K)1l< zaFXSn8|2IawzBwi{uqD#GehZ{;Cfu;I|B%+x1w3+sCvG$qel(o?k6V1i&of9)(Dd- zke~!KBa_9IkRPs8R(`*@^z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-RF)^X4`ThGB!}ssMz-)j3!Y}})`TLJwQ0M$*U}IxNQ3KNq0ssMoVZfI!-+>B# z05QU!Y;50A)NpdLF%%WoG0dAgfe|2pFbw$m{TsuNZ@=IH_2c&sU>Gpt3|cbK79ND#_!*M00*jtsS!hZMk$5?00G2=>4i@WUp{|j`1b7w7&8DJa{bm_ z21!XVhNi|U3_}0{2*Uu7rr&=MF~H2s#K6kL%5dxUBZj~K{$jWQAb>E!;LqQG5D8|8 z*-R|VKsGa&&&-4w761W+VZf8e&mJ?eu}N~UumEjmWMN@p{?EwF{Fj@PlZBg`1FQxb z1Dc=+0SF)z1Mc3sf9mVEPiAOlGQup{uyH+uh^WZ9u8x{kAomd{h5-VI5iL7&>*(lc zGchr-|NF`>vv;rj{^Vz002ov JPDHLkV1m+^0Q>*| literal 0 HcmV?d00001 diff --git a/images/default/folder_new.png b/images/default/folder_new.png new file mode 100644 index 0000000000000000000000000000000000000000..130e35e09da5b8d96dcb1c6634aa1e84c90bbd0c GIT binary patch literal 649 zcmV;40(Sk0P)9k~E@NOgRjLSNK0_E53uNj8 zu@+R-H6XqSG-NRYV>SaLKmdUaveNj$aP9dwyuQ02Yy@?|8Hm7f6R-AkmzcCECp=-r}aM3G>pk)sbUj#aJ@qeIU>;M4-HRvDMAhr+x7@`8? z7#_U)2{&Zkdu2$t9A6A{!D7rX0`mVeJo^a{Kwz(FNq=Ct^yCWz&o?FpJwpM8zs$@i zE?WCj9ZUza--NRptlu#-92Ekyfi4mO2q3uEV1|7735vi!Cc0mY$qJpTBL zLF4iCKW+Z25341 z1AqVm8)PQ@ilH-F51s@#*jO0Y*_aswc-R@(S(zbhZZ$`Fd={d0wr%@P&y^isN=}q0s(*k0vW^x jHH;MS7TGl*01#jRRNA=DQ8x5i00000NkvXXu0mjf!vFgq literal 0 HcmV?d00001 diff --git a/images/default/fonts.png b/images/default/fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..267a732e6ea73e679888fd88be98fde57a41a816 GIT binary patch literal 621 zcmV-z0+RiSP);hz5f`Bq5|+7?MH}L19RXkOmR$!|T}C&2g@G?%emIMWf6$`*`5tJsb|tIp;aA zpozJ;xmatRZ~!dJvdiW2yTQT1%fR|?1-V@Al9bZ?iBS}pQmJH$#o}9_Jtf|J%|V@8 z5r!c{LqlgqM@OFlNA?T+6^`Q|rKD1+Fg!ebc4TB^3Mc@G<_ZHr5KJbCBuUaXw6$d! z8-L32qwQoI2ivwO6bkh9^vYB6#c%Fw4 z!v5z9N^2fHnFV9m41VA^4zBB_YElAP>lEkTFVcVE90FKg_4o4sB_O3_ZS5PUPWIw@ zSw4SVM@mVf(MTJ-8yI7V;|5A89LMIx>jlaio6IkKAZyz!Eq|e2uOo!Ob=|#5tk&+; zYL)Hn8d54gF0InrQ{em7HpdEimX=qEqL`hX`oR-emWAiJBuT>amv895c%J;>P5`#5 zHEtCrsMSKcx;ha;q&-kdA%s9{O;m3%@pP6$?KzZED5dD=$Pw;DB#A_8jWGtLRC)y| zCBDDG^_yc@T61@NigLL^skFlM%qvcx=;6-&Nqm2UMm=pLp63lnDNT|jCXQnh$FYf` zXpdnSrYNN}`F#EwG`}*?+uhxLMYkMz|GiuC0w4&22f*S_kwjDySD)cB00000NkvXX Hu0mjfaI78Z literal 0 HcmV?d00001 diff --git a/images/default/fontsizedown.png b/images/default/fontsizedown.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9b0b00b1e9284aacdb5b29e520f25417ed48b2 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GGLLkg|>2BR0pdd@S zqpu?a!^Xav-+_~Xe1&9>AYTTCDpdxChGqtapZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpxvX=jq}YQgJKk&;S4S%&H6u4HqUd3%qB4^!0{{HL6TSZ zxEm$d8L~032yCih2zgwm;>^M!$spix;*&!Ce0L*`7H%-tz>?8~_xr*>pIdksI22~Y zFil$f;s(QfMg~Tf$A3l7&o@c%NUl(8T)yk5LOdYH*c-(Z@>>Z4H z4sJ!=UQKGn*N^Il|6iThV^G+@kfh{R z{G=uMzvP5DCnR>s5AV1H3;_mD LS3j3^P61KIqEP)=qfQs zx{E8Fb98l&j^O_>NP!70qdkZqiFe~Q8q@&qFi{-X3Oqjk{K&ggC#uhuOQl@eNux`h zcE@A+?wxx#e)#p<^()(-;8E){a8H^aoqp@ohclH&DQCtwIra?qynmUya|ulvXwtxo zeP(}~^S?Vk`*w6Q`2s)#upiOidG);)Kb{$>5`-;Il%L{wp~`T!Oxki;t}hTo9-0yy z8yZU)4~ds=|GxH%YO7lsX(pdOH~r0H<5fM1J(Td7EKXBQj{o9^U$LhRqX*g^njWATK0@~TVmacJcw_1V3fVlN+QD`pJ7P}jh8@}K{+}GRbL6co zb}B(?{RRLztB9L&+3GH_)7?WiR7%$XP45z@EjmdZC3F(m7dI%lvT~8@+h3w&jBY5T z1R2!hx@`(v`~EnNLOXncg88k_m~FpLegIrskP;BKlU-R~3a>_cinJ@SOo5XUm@;!f zzvx|LasNCIqy?q{jw9$aVj9cgyxje(_jT>3U{xh4vaW$CE&Qkr>b`g_m}k9vjhs=z z(oF`^DWXuL_Pu{KZt|lB_|4nVl0B}!QWzZ8kL4aFCZHW{vY%`bBuyYe7to6gRyG5E zzFgn@<3j6960xBHL>+aj{&#Rw4Fyk<74CpJjHBmq^&uoCyZa4Ry)_nA7P)?Tb@|$- z&DX;=3;kt+v56P#Hz%HRUMg0Mikq?QBuUK72VQuM>|JBNTcmZhkmFW;HQj~R* kJc6XxW*hhihz}G013@n)nfwbiiU0rr07*qoM6N<$f)E338~^|S literal 0 HcmV?d00001 diff --git a/images/default/help.png b/images/default/help.png new file mode 100644 index 0000000000000000000000000000000000000000..b580f51ed4b819a99ebae503406acc6c6a14892a GIT binary patch literal 997 zcmVNzE(97{ z1~lLm$N+! zFf%j!2a2(BaxzFODl&Y(c1`)&yLZC>85ni|1P~KYvl%xdW1_O39|IH6)^E?BGjKaN zKs0XM%D}LAF~k2GHy9Xzni<5!8JK?mW-#&eWDsR%PXv0w3?P6&2BeAtB{+coWw>^Y zff3|v5ZDV0osAnA{_ohq@NxNahJV1YU;w)4AJ7||mo72Lv$26xr2+&H3o`?QlMp*Q z1H-dt3=ChtGH`)}zkg?7*uS5F;lTrjmp~iY)6y82nV1;r%ok0j)Cd@d$8>c|Nldr52U{X4gJ&7!XOCL{O{sLhHqhE41YkDKmijF zgVG2<05NQ4V0iKdsO29N|ApcwLPGz4ym|Bg-=9DKf9UJ~2O0kjih*h1|3e^d1L_3` zAQqs+zE=zku|f=}KfJ-{Qvcf;Sn(OdHMJl1UWd6bTcx10mjIspFcrKc{V@*u>k#Y>L~-m{PPS9 zi59@PX9Ow$+4{xIj6rP990qn!47~!n@z5b~TKEsNU>`8d?g8}xBk~kL0D%nn2~5vb z=YIZ_`TO;&s|hf!IfR55gh4TK;Q}}nf&*Aun&B(ZReN8&VA%ij=Wd{}RY0qL0t67_ zGN7w|La-PxfV#xk+2d7&g&C9u1Qz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;_en%SRCwB?(@|_w1r)~df4kDPSx4tKMqFy|Mtg_2 zVz-&hf;DbHMndA=AV#s6VH^oj3?{}06A2GIkjPA&xR8a!OpR_TOUMW~N5Ueh#df4P z8A{mJj(90;*RAb3TRM+V!+@HY_&uNV`(Dn`i3tBE2EYFrckj+)Hd{y}Qs{IBES55& z(L0osloF3GkjdoBDl02aH8dzM4h($WGCX|z>V4qf()(JttJ3gR#upwUtq@$Z(CpAdh+?$UqGQy zV0k(H^ka%Lpw!i>&iY60qp?_$si|2~sT@wHou(!`?d|&yoG{TsIk>@ zT=&7lxV&~4y)vDTA2cW+bOLZ@0bEIyKGScf~ zP39g4nr2wc!?&X$B9Y&4IBc}FJ%vsOV`Bkau4+`(`!0Y!nM|IFr~Y8@_$SO?pJvb7 zyU3eN7!AnqV;3kQiMmTsR6X&msi5*WP5 ztKYvwF}X}`F@dJVak(70-3@43fndb~^*IJmI2)({})2=hKp05}y z1>Y-R?Ye>g;2Iot)r7;pP+o4v<9PzJ*+?W(Da$yuw_^A=F^z~x<^&_=%YCxq^dG#|Pmqh}^WL?n|I z>F*E8_U(s9z_JY}`Nz}!@{2&#>~vhT>4b=gXmeRPdi0w`Rqc2OSid@FGFcv6?CBYz zr)P-0dk+%|YVuQ9ldi5~7uK!Y_&i{IxaeWPFgG_1fTGm%#-Z1YmoJ~K2Y&sp@BHTg Xj*duNCo(n^00000NkvXXu0mjf&6KZK literal 0 HcmV?d00001 diff --git a/images/default/next.png b/images/default/next.png new file mode 100644 index 0000000000000000000000000000000000000000..df6f06bd168b7cab0bb495d55abfdd7e1178cb64 GIT binary patch literal 1188 zcmV;V1Y7%wP)KLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$0008tNkl=mO<&q`SD%IagQb=m-u+KLy6LjP@XcB;Jl!Xix*Z{Y0^6EAaT} z^F!}WoTxrqE|qd=Cyg$3+8vL@yLay0_~F-YSFdb-f=BJZ0r#Z&(doBNeK=KllyYW- zlOxY?&-<5|JD1R;fhG;S*k}5;8UMTU({D#NlP>@?0Q(XBomby`@#CqXDnZ!dMENO> z7pe?q%cL!r#rhmUAv1am2upqG)9rPpr)}KbQRz_G{zEhpn*JLTNt2*g=VCk2U4K zan4ShBj-AFRf8n zvP0&iZrG8%>i@}6J4fEiVy6OTv@uv_02C)GDbHPQi2TXaosiru6=(TN1^TiK*8+BXH2)>C*KFIEl3Fn+sU@9 zFN9a49YxxeSf;>92~3&Uqo4OKGQWGC2hsx50LKw@8ZnKr)%&{kQ?RU(6j|56 zloo!}26bP&63nvNy++QcVCg1(=@e0@QTyJ%8aMe-1N`RgXu%%UUn%qt>c?^q6BE#m z*4a%q2$Cj{pbO|l221M!KVPn||8b#pCW%a6yu5hr)8^}8o4JE!f|0Qo>^H}rb6zS|jEbAF>?BT<*XnlGYGG~R zlK<7xYn_}>6QFD9A#qb-yG0000uR literal 0 HcmV?d00001 diff --git a/images/default/no.png b/images/default/no.png new file mode 100644 index 0000000000000000000000000000000000000000..1cabc6e95d8ef3bc72c9c4fee3d2e0ec13dc8aaa GIT binary patch literal 821 zcmV-51Iqk~P)*`Ev)d z7JvXkHh_tNlXD`2iAfFvJ39jygADlfi-F<$cLvT6A9&`vyRYhh{W^KirAw>-eEka6 z1Q0-sU@zRf$-r>`{yc`ypA#8Aeq>;H_l|*qjSXxw!|&e=Kye0!KYzd)uDyT%yW#QU z#MRrkF9q=d0*DDL>gYI$;mMOkutC?aGcZU=K@55OmVx2fGX@3$0R{$UW(J@d2CYw@ zSmR&3m@UJ=5CqZ+5I_(EWMp!|8ZKXEV33nzV2FufU~qM1V7Pmifq@0+%gjs$hLjWr z29UGgzhlsR`<_#afguN|Qy3tCAYt(C-4}*4XL!Ii9zDvyprOIQ;O-7_fw3{fkjax7 z7+$_)VEFWj;lsN(48K8P#=sy15P$b*Ok`SNWAD>)ORJ08vut`}&J0D^b{7|IMEK0pHN#tlfwTUjxH1C*1K zfx*lS5*9CBfCKd#BNII800Ic&0(SPV|2a89@$vt^nc4sUPoDh$|MBDh|E8w@|2H>7 zTry|Q|Nm@kU^SaLxc)maFdP8603d+CVeswOuisoS6G1Mya|e>BPM?Ng2?>a6K+y^W zAQBjRCwBA z{Qv(y10?_;fS4F41ONfV!Z?9Zmf;V>V}`Fl-Zvor4#a;zGC<4*#H>hc7AT*ML79!6 zA(@$(K^Gu^SQ!2?Yy@hk1`2P-YZb_+{}`lzWD-z)+OIzhKNwjULIDDZiRmxXZ&nW0 z#SFh09C2#=#UKnM%LQZv_DRY}HUnMxh~X!L6Hx3TKmalQ|MY*Au$HhehaATuh93-; z42(#ce=~>!U6{cl&2m)QSGt2=mS6qV?N{4@n!|wVo`9491Q5&r5C2cU`|<7JR-I2b;_>;MQLMurpy zF`&Zj3~Ey;tfE&g<%2%7efOBFT+Q0fO0S}Fmf?4 z00a;VFkoIW++jGya2;rXI#42ZU|^UE46;)U{S533l|bA7q6ZN`05Jjm z!@%%`;WWb~pd`oz>_E&7#1DaZ77*_PYW&YohD|dF00a;V!)GA*m*E)01)#I_fZhSc z^AoVMe=yu;$O9TSn*mR90|+1%u(^L3ZU8l1Wq1KJ;1}4x?|~6j4D|DS1_EgnAb?oF z{`?2TKY@-t222aj8D0Z5#{pB_4wNXx0RRGs85mp)V1@sIPJYf{&hQBsFDwjuz+x;& vNg0`DhOildY=8h_q%=1I1Q5l!5g@<-!%>U$(^Vlh00000NkvXXu0mjfxtIY% literal 0 HcmV?d00001 diff --git a/images/default/remove.png b/images/default/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..e1888861b728596b306d0dd27434da4c3bcdd346 GIT binary patch literal 313 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 literal 0 HcmV?d00001 diff --git a/images/default/stop.png b/images/default/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..28070132eba29fb1c1a51038f3496b2331b09303 GIT binary patch literal 836 zcmV-K1H1f*P)eEicNqUih0nEyh3-Pw6w zE?yLwpBI^%6PcZjb8b%L_HAj6jt0jq>%{XQ{ok4y+qUhS4^N-|fJ291brqgGfmRFF z*WuYSux*Te`?NQT#n-hPH|&X4YXT6x8+v~2@BjIok&!nU8iG;@90!(`V&M9E+z$+Z z>!NZw_V@J-?Vg?8{d=wUn|>;t{_?$(C*LKPBXAs4R~O2%z;)r_Lr5lJa1d-8(KMn; z1H3NthC^eJRAnDu&xW;GfnQ&VvFZcJRMgc=@>c?g2|Kst>Y z9tOhzrJzuNR0_wkIy7rz!=zk>OP9bj;pox$?|L21oPo1v!S`Y7RycPK4j+a@0x}s= zTec*%WlamBd>)cX{O#M3WD**Uc=^#ISXe+VT!1hn>guA|(*yZDQ8vqByB+9>Ff6?c z2eQ4rnD_4^%_eGk8dg@Iw-<^<@I1l?5Adg^uy5U>t?Mkz%<%2%>Ua7){26R)6!tWm zuVi=aLifB_roO%y?7FBz0nPI;*47BZkb76I@Kv>X{udb40sk);f81=!z{<-0bbr5M z=T6Aykz5YRW|2gKD3u~yTB0&GCL`7A7eB#gfd7J<-i8y4wjDI`d0BH^X>@kVn(InE zmy^2V$UR*T--1tGaNuT3zN%@*UNejXzG(^~v6Q}#E~2KP{0IE_{Qf^I`a3r@XP9{a O00000?z@Afirzh#(9@L{W5=B*{Gh0|1EQ_-?!18fF&f+)0>O z4u^wGr_+aafry-yW$77XARmWdN!L4hQr}yQ4|=BMo>z@^E@b} z+Ud*;W`?yE&N&>9M~uhgbFKA&=JWaUVzGFs>l(dY4_fP1(A=U~&`69i2!a5s)#_bu zHk*q)&m910ty{VT*4kD;M5yc9knj7~{eJ(}S}Tp@RIIi5?$Lg~FHV;KNWK8#`?$s# ScA@nE0000-G2co&H|6fVg?3o0T5PtNUu zZuGVuK^JBg0cMSakBPatxosy-ocOQs;pgXci@2>>SL;_;Fgq}8obV_|PEO7uIyP4J z92Of8Egn$up)5j7K;&@un~YFdv?-AOC=BTmJoX z8|wa6O>pG-{_gJK*S-x5Ns3RNdr#LhoMTz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-fJ&I;Yq{MXG=13t(+3bha6>=_04X8UUWpT$8tN)f-o9X9VrFI# z;NfLpV`61c=9Pc5>DcbvFW-J}{`mc?`$@-l5ttzW0fg)wc2)<5#CKo6sT@6Vf#LPt z&l`Te|Hmkzz$GW8DP+i~z#w97sK5Lt(;tT0w{N3(2Oxlu4H5eHn!$|mH^ZkVXFfLk z*v_yLD8~Af=bORKoEa`%x&)R72p|@i0YD85U%q^S8?b%*c7~{^ zD3CbgqxVl3co^6io*a7wmg4}jLqkJB%>N*R00Ialig|c=;B0kubvRr8o-IrhRsaw{ zEZAHD0!m6s41s}xVAtR>0OlHi0D`;Z>({RsieRo;y?Qm?6bleQpmg&8-o1MiC3}DX zVgUvW!?|t5P$%pN-hQnAVzAGCjbEk01@Y=?-Oroy#N3J07*qo IM6N<$f*tt$NdN!< literal 0 HcmV?d00001 diff --git a/images/default/tab_first.png b/images/default/tab_first.png new file mode 100644 index 0000000000000000000000000000000000000000..89fcc75e139c0cf01a64c1f2210fbc1155f8c377 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hU0_jGX#skoK&=l_3uW>p4-h8YqXEDVe;8yTTQ%hiT^_vCsSUcP;KR4Rgj@ko>J zhojx%8h<8D3R;l%rjb{`A%eH!pG=~Ij}Oni3?>eRHEeroehT^Q-nC1pC%J*)P}YIh z*ViBX^6u_#NnReF1DdUZ?LfniFnD>qh=_7~W^WYl7WK@2mjn+pi$EB2MMcFwVP&>M tKouUDL2MifUBW^R41qZeNJIl8gQH}nrP{Yn9-tQ(JYD@<);T3K0RW&tV`l&W literal 0 HcmV?d00001 diff --git a/images/default/tab_last.png b/images/default/tab_last.png new file mode 100644 index 0000000000000000000000000000000000000000..f7bcbedf9939aea31887d0327b15d13d38ae9be7 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hT5_H=O!skoK&=l_3uW>p4-h8YqXEDVe;8yTTQ%hiT^_wM~a($UD^z>sMA;OFP( zJgTay8d7mK^^I3q85n^I#P#DE3VnQd?o4>Dzfqb&z#)RS;^!w-nccf~HSt#dWZDfh z>`0UEhpVfv^Yruxd~4+vKd>fzeSD%R(83K;AKtx_at5!? z7c<)1pW7QIDewq5^h{ApZD3erp~%Q0aFmS!iI8BpGbKI4ZHEpg&^rvCu6{1-oD!M< Ds7h)1 literal 0 HcmV?d00001 diff --git a/images/default/tab_left.png b/images/default/tab_left.png new file mode 100644 index 0000000000000000000000000000000000000000..ace0782dfe0d10a8139b795166666c8047dd1ae4 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hTL^mK6yskoK&=l_3uW>p4-h8YqXEDVe;8yR856voZzXOBq+Ffbl*@+fvrK3wl+ z^NE46<$A-GEhbHYECLP|ydS=PWXx7eVRB$FeB{l(Ol{eJN4G!eDJd4kzf8jBGq4CK zFKkiKU(ayq{D%hznb)uZMVL=8IL(+o{ky%MWdlRf5)(~k7J;LjoC*yZW8popML zaBx%vCvgx#L6siW7YD$qd^wpU6j7jf%=Q<^zUD{2*@P)(q z@%au1`0phKMX^}SmCNPVuIr|m`PibA5@8qy^?LnL5Cq@;2Ar+cYVWJn>g6bkAcQyu zc(8IEQYjo9w!*c?t@Iy5-}j#}vo*#H9mny|#>94RF=t-}6L#)Z(R!X&9^5Jbu-0<3 z*#t8~N(mx@5CTF7SZkr+z=4ZPz5Dn$zKT8U55rZZQkgH6N>hzS16pe+r9ea=A}nk@ z1Y3r|5yspL_~blCB&Hy4eqQqKoY_71qvWYnDs`(+DBS3DI&d5ZT5D*nK}1LrM$Z3= zP;}8B*#<`X$Xr{;d6F51lWD#ML_VLtoy}%vlO$oK6r_{@03t$gb)#b0qIF<)y23BIy8-9xmK9?VgQpQi?B qPRAcs@?-rTezi8SdYa&WT)zR`J*|PyV);t|0000CNf-_t$J#$0S6re=4rao$38qgExx1a?d|QxE^FDPw&Y0OXt;18V2vhAihu*dMuqMV zA3hwo`Rdgx7xikOkq4h~2?PWMC2{cZq#St6#kS%{eFH<&?kBIWub1dbSQojs$~0~| z1B-x0*}wa{%lj9_@Bl43(2!_R{!YfV4JdKPnv;_=MH&=bJitg|WMjxw|0j_ZpnDM* O84RATelF{r5}E*z9kA^H literal 0 HcmV?d00001 diff --git a/images/default/tab_new_raised.png b/images/default/tab_new_raised.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4423e0170efd3326a7ad0d9e62ec933816528f GIT binary patch literal 555 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co&H|6fVg?3o0T5dbNs0uDYArcNe{yX)DLbr=*HBpmb_ zAFovKdiDQ*vV+vIfBL23C;st?{N_usZ|L~%evw_kp-18#<4z@Qu@e{AlXO=+Fjd&c zF(vv8!xt&#UCsC<;&Au`)x`<9^U=c7(ERsL*k5lA# zr?w9R6UT0E2Zj{omcQI5(%3iEGu_O&5yJ#Df7Pm032nP}S-EY=`*w$EQQh65ohR>I zxX_?j|Llz9hDHX)BTU8%wr`*Q@b>on0@iju*`yD5&mCY8VVB;JbJM6zKYrhVr`z-I z^YQUca0DuD$}tib7oW3s#flEWIvX3C0<#NA7Sak0GuEzI^I+YNzrW38K7amfykWxz z1D(iCOBkPZ#qX~>xN*S(g@}Kbm;3WFFtU_$ZVI0eTm0wPya6g3A`1hZkz?D0wM#cxUnR4^lv{6})F* rWlc0?U=tD&DgX)i@Pq*4hmGN^k6x}rvS>OmVi`PL{an^LB{Ts5*hSL8 literal 0 HcmV?d00001 diff --git a/images/default/tab_remove.png b/images/default/tab_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a729b756f32f3c5ccdb4527c164cf75dcb1fee GIT binary patch literal 393 zcmV;40e1e0P)4xFl*YnJ2$pFD zeStiVg^!?>4-i2v@u!Gfb?@G>5F`G+fF2kaX3k+|&cHw9ElJaKt=sJ$RIAlmjIsPo zwAPyOczit?jgEo*t?mHo_4?9aFgWdWI;$~8MC7v`RmC}n_kMXe9PR<{L;C&xp{i;K zK|=^y6vdYaA!v+ICzFXb8jbZ28%(ED$+C<*&oRbej6p;Y0ab`%D2j+`$>ip?d?<=I z^Pt!3?KGRs{dT*(Eh0GQu+}0XC{R8$f*9012Sq^cAoR n;Put78OMRm;p)fR{t#XOM(2h8C)hsA00000NkvXXu0mjfRR6N! literal 0 HcmV?d00001 diff --git a/images/default/tab_right.png b/images/default/tab_right.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3e8ed109eac3a3352ec563f6c605fe24168416 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hU$_jGX#skoK&=l_3uW>p4-h8YqXEDVe;8yTTQ%jJffo706wEf^Sq%yj?xMkXd^ zLMAK<4FyskzT7n4pqQDNS;5Q5p>Rj9;$P20%L@~ppPz612S@Sn*W6-6_Xnnl9rfgGP4LA k<>XXo&@cnK2~HefxZV+^uCec+G0^D@p00i_>zopr0Hx?+k^lez literal 0 HcmV?d00001 diff --git a/images/default/top.png b/images/default/top.png new file mode 100644 index 0000000000000000000000000000000000000000..11fff092606aa3392cf9f87d526e2e8cf73acfce GIT binary patch literal 1130 zcmV-w1eN=VP)KLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$0007|Nkl>HQ22Jc;x_i;_Wp&M%QfIu7V`?x$&dp-y zhVW?t#>jE&*=_ehTgOhGaQge^`RreLtwkP6?2-TCU}BGKz1%FB#|{7$liIllreA8b zV)|IY;dqmUFmY6`!pw?9;V=pQyvPFnLM=QV6rmQB=Od4ZTbuqm{FN1vb*#45^K9fXLYKOt3q;T_SXj}*|1z_9 zHl_&%NR5xYH#NzT?rp4%ZXsxd2r4Cn)METf5uWrI^D>OM4x?TgC+~2v_Y{+K80zPZ zFe0p8+@@R?mdCgPRsJ%f#!RN@(HD` zt+7ffW`r83@;6Xv)>CEF6H>zRMpIy%0`-sqEsLulj8l` wPCEJ$Tq|UF_~$h8Q#PUaOYH#m??j&l09^AOIHLK7V*mgE07*qoM6N<$g17nz+W-In literal 0 HcmV?d00001 diff --git a/images/default/trash.png b/images/default/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf0b7762caeddda6ce3c904a1005cf343f0dfcb GIT binary patch literal 3238 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 Y0EWA{(Qp1P%>V!Z07*qoM6N<$f|1P<-T(jq literal 0 HcmV?d00001 diff --git a/images/default/tux.png b/images/default/tux.png new file mode 100644 index 0000000000000000000000000000000000000000..7b62ccecf046451ef4e7a83f693ba41e9453df0c GIT binary patch literal 713 zcmV;)0yh1LP)r;gA}a=Vs>=B00D$ExEaiKxPAad{=%dH0toDke@A6k{5vD}^WP=u|I1qC z|IePc1l1c4bN(Ng$o>E1Jn{d>=1Cmm<7SkC=>-TNCTMbUW%%`*tFVxTccm$Rv00Ic?3}+J#i*RSo`W4N> zTR-fU`7oz~?=%x5LoHA~8Hm$oR|*~fen9p|K_u@yV0h}mk~K&#Kmehn14f`dY%B~~ vK+S5%AP)KLZ*U+ zMZqD61UKR0ATHv^)-h>I5gck1NwPJ`rHVGW++068`4T>agNvh}Z%}a%oO}c~K^z<$ zB4lt7!84uz8UFmBvEp_7ZetEcxivx0mthpknMbB+0>B_Gwb$=&1LQ@n_`&-#0^n)Y z>-b&%#%!vM1wMhzOqD5!bs#&l+Jd+Q+~i1G5LbX}_JTHuJHQ!MJ^`Gh@)y7{VHAUS z1>9j6#n1q7lgeGdwd&jgvH7ey+o)$(IW?)qYRQsyk zp4P`o20fquC5&QO+1m~R5DSyK)ubop^jn2^`2DVbjPJnEQ_@xV|$`ith~00004XF*Lt007wQ^&Awc0000WV@Og>004R=004l4008tQ004y1 z003=Y008K0002CT000|UgXaf$0008cNkl9 z#RFX{Bgx~*_tFQSI^uLYZP7>+fuLMjV}4FO`DKe*q!=P7aJ(FMc2d+6MOPoD2P zj1?Nx8&$T&ZK^>9w^}5k$5^MzkJo+*ex00thZ#Nt&;Z!S`!9VsdVa(n!W0^H)_8II zIIr}bVW?w-JC%8EdNT+GJGbtT(Pym_b2k?jDUj8$=-vCl_KSl~+E{OR_-dJB&da=z zItG9)b)Ie;qSRR7M(Gb4s!m%XiNCe@-2Ey4OU*pQ#Qw}PV_Fzc5iV!?-sWg3^T27O zkff8t1foXPogxfEqDd<X)4gSeR>F1L`-nu*FLRH#^2KIOn;O_lI!9$zhd$`b|@3)~T=&G^Ad`JHeS zbqQV3R#N6JI*cc2(ppiW!V8utY|N9d<+xX=5DTH66I`AMN3~#;zlenU1_oPtyOY~! z);qC{Ub@YGQdS==dONx>2v8`YNSX$kE13PF_H}8Rk2OGfH@GC*s$)IQmiC>A0lK0C zbXxs%nf)ZRBnZ$1=o=dpmkVUSS;@|Q&g+2x&nE_Wg()t&zGvg)(m_0rv|IvXnNpY| zU%SkorJtF}O{+_j{)Jl?cokTFR3;$O!hx>Coah{6xG6TpWimO lk%!!b=6`Dsa32@?djQ)E2D!W90Y3l$002ovPDHLkV1fgY6Y>B6 literal 0 HcmV?d00001 diff --git a/images/default/view_bottom.png b/images/default/view_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..951ff424e8ac0b55ea2b898c4f037eac097d6f72 GIT binary patch literal 511 zcmV542nG?(#@N_s;k9;AgWyGNjA;&0ILr?s5i%2kf+tNq0E%F&;lupLr}kL6aQgC5ltJ|bihwiyXx5XD+!u#rWa-zC6eRj>#|QH*NX6+k2c1*0A zX)q8DbBGeqz8b5djE!Buxir&(3ywQ;w|F=|)jc~^9OeG`C(O>ypa_V7F(z|8TDaF0 zH?FrE)Rtdy^W`-Z&<<5LLI1|%g$J1H%7$M&E=eL<{k$AQ*!6_ zv!{*Ajrlyw&ot&mAj<*(ir~!g@l)rGP1S4H@7|lanx^R=!>YpZamxPQSJWwa9;nwR z>Fut+xAa>W+1lKp-~aKq$08zwQ@8t>JkOj}tKs|X+yo(XekTAIYUiRWK?0(fIfr@U{)-PxU74o0-Qo44>4DkI*xJ}AL1u2u zV=5Q|-X{R`wmSfL?*~TjJ#z~;DOjbFBmiR%591!y zco;BsCMzqCpEsM=7W@5^f`Zbg5n?kzowBy}?v(&lU;-#Nc(w%C|Hn*OKLO1JZ?M!3 R6h;65002ovPDHLkV1iQ^*8u0WbcEP)Jb6xtpB1EOaL_~RN6ISBzHA!0(@BHr$IQwZmI>Z#;aZ-zI+d&9tgLS|ks zFAcsJoJ^Cnt1!(xN#X%egunuJ_iCSPpwKfm`=&S&$MLPhs>11M%<=c%XrQF2r%-rK z<8b|p#ee*x>gEB>=HI)_A|kD-UOysDlfd$Me^#34$NO`#taGH3Tsndrt1CV;HRVaq zV^Z(PIyZEQ1R;oG76h0x=HBlxFg!$KyT-?bA*vf20E`xkE#8je_#~!+A>dpHKx4ZG zfOC$QrBX{g@oMT8D`2XEbB>jFqg^8SYY{|31TYoFOc1dL-9SVyZh(LY{QB^Wr%}R5 z#pr$egSAQpfN~VIcsru$X%w*b=1JwUEJx85@y%Aia=9=B=$rp}FZ=B<4a}<5&s&R& zzPH&t&&as;G{Q|iK?CLMx1)Ul@<2auzYAX7ef(hCo%jc^ymwTaT?+I70000ziU%b6vsdJ+;d-iwQ=ZBD2PJ|b#YKDRH38_{-R{+VAZX- zIfyvht>7fI_!k6mu!Amb6bcT(ibADDvsfg8gAIxls{w7^yU!u%Bbulb&vfqRobS2k zeBnRCT)Z%Qd+6ZM$vBGt+88IEDDnUZ2CJ4=uPgI9n9Cl&bos>5dcFQfv4~-FvrcW} z3u1*h_T+N=slHo&sr9dZ&x_}8X*7QPYgvpj>1%!c192Q#4MYDeKQ@5(+aw8GyZ@fS z!-uG@Rk$;GU`I<~X_V{7ZZf+vL+RWykm2D2pQxy?FT0o6yL5VWtpY%Awx_9Y{XDxe z)8xH9KmbNiwH9@XGeR5-_pT0iJ>c2on+~R8Pz*R15Jlgy*7LMnP8&w^`803mW2erv z+yxaeIOh=YBuT>Qv*TSi=*A5oVgyx#suG4FTg86dr#`ld{TLHtOiU06Q`4(FTBtV8 zdXUKkL3^RJu#o2Cg+iJ?E|ogCid8c)abs>|WcYlev7L~#ocYbDPG%4*EG|AN8XyD) ifP~$J0cyL{bjD8*VUsQv1Hp3u00005-_AWqK$`8lWUC1p+>U|3HFIpiKc4 z5)~a16f}g&LZnORtSET}*t;)EEx{`$0;>;H_5vv$j4@&d-$POUwCrk1v~D(961+fF`FWxpZ^mV|$jABjsxX zFxUQ2yAm`&hI+zVr*bm)&gRTwE!uCft!gKBWCpzOalmTli@BT zf7c3dNL| z@LW<-IT}${6BdlKvx{Q^Enps~1~6R$9^dJy>MxyJVJI^aM|A)I002ovPDHLkV1hV4 Bvd;hj literal 0 HcmV?d00001 diff --git a/images/default/view_multicolumn.png b/images/default/view_multicolumn.png new file mode 100644 index 0000000000000000000000000000000000000000..26b6a20e1aaf3dac1ea79c142b90b26a15a61788 GIT binary patch literal 501 zcmVS@;`_c!T2}0NjF_u z5V|YaP3Vv~lnhQHlr~yLVnHpXB89dnQj30rO}_Uz1iqS7tJMP!?mOIbIrnhkKOt8x zPv0FqJ6cV9>4A-D7U}gO0E*zu(RsZ*YiG(M=dX@ms3b}9Td}IJy`8YNxq~_-O(W&< zY1ZD)zp&(MJlbAdrQ7}fC$or1{##kuAWeJD3WfOX;-wNX?viE0lHp>{5geh}h?%J= z$482!(UT2NIAA3RAc~rEm^bS8-f(-#xN-k2W=04_LMT#gR(Q1DpxUhDoY^tV3{yc7 z@IC;r_G%db?>!6iPjIfE`t;Hr07B^VA$UUYpkS(k_nyYha|0`k)oK8|yuSLA`N&wU zhH8dLKmb!w%mfiTR0bm2&j0}t`10Ts_VFY;GbNmJc<=GvQ=jP2di;s{L?`E*GgLw8 zzZ{=ime;MhIb!T*F#B|KfZwwMOin&r$o>)6#&6A7yZ!vx)Komt?e1n|>^mCaSDc_u r`LMq6PJjYX0{$++!P#4f)a=I(&e_1XuDr4^00000NkvXXu0mjfu($7d literal 0 HcmV?d00001 diff --git a/images/default/view_orientation.png b/images/default/view_orientation.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6c128c1885fdcbd77081080ad72543145b6213 GIT binary patch literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GGd?3u|u?0v z(HBT>?5p`5I2p)SNcITwWnidMWngG%W?=aFA4tDsU???UV0e|lz+g3lfk8ZfQv6Xj z1_s6~PZ!6Kid#uv3O#GjA2^_Jz`^RrhRW|cjtvY+3{oHde}BLK|Ngqajg7l+KT8m0 zPn=+y~j1B!gi42&#h4HG9$Y@8_>ocO$@sO|mz`iG_r3JnY55)@8y*VN1@U}j+A z$T{%jo-5CrH#$6}PxmJ9BsVh{$+uKi+>n%7zBir0O))}Fq2a;BACHgc^Tf=!+I5J% zam%mp|CgoWm|tE`uybJ8c!25E|N1wH49siRoZ;!~JRk7Hv8I86Y4?Ns`|JPz|MRoE z(NT}#;tPjU9~tNH3OHQgNIfEX{mdC3o*t|6gE`Xv|B|jXzZpxdT_oqHp?9k8fkbpC7h73#{ mj8Ax&ByQf6_{6}-#<12rpx*hzro+G(V(@hJb6Mw<&;$S-$ih(o literal 0 HcmV?d00001 diff --git a/images/default/view_remove 2.png b/images/default/view_remove 2.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac968cd6e8cd611722aa062c9080dd0612ef06d GIT binary patch literal 371 zcmV-(0gV2MP)CVL z#vqCaF0oe)W2N zLdc!f>+yYSyGe{AiejGZYfL+W8mA|*Fg0bVu}FxXVjiJnB}hONGv_dGNQe~yhN)l( zc%PtJR04>2P%u@&dyi^02O=H;OhqvhM64n}#~C0X0?xUL8Gue27(+zLBxNM9S}jQ? z2t=e3#MGH}yO$T8PF&8iQ9;4X(abv}K~SeWJ@@Yfr~^&lZvjlR2NgB5^$BIHVL1C2 RdTsy!002ovPDHLkV1nRKlqUcH literal 0 HcmV?d00001 diff --git a/images/default/view_remove.png b/images/default/view_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac968cd6e8cd611722aa062c9080dd0612ef06d GIT binary patch literal 371 zcmV-(0gV2MP)CVL z#vqCaF0oe)W2N zLdc!f>+yYSyGe{AiejGZYfL+W8mA|*Fg0bVu}FxXVjiJnB}hONGv_dGNQe~yhN)l( zc%PtJR04>2P%u@&dyi^02O=H;OhqvhM64n}#~C0X0?xUL8Gue27(+zLBxNM9S}jQ? z2t=e3#MGH}yO$T8PF&8iQ9;4X(abv}K~SeWJ@@Yfr~^&lZvjlR2NgB5^$BIHVL1C2 RdTsy!002ovPDHLkV1nRKlqUcH literal 0 HcmV?d00001 diff --git a/images/default/view_right.png b/images/default/view_right.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e569783c3f61075e2a4b9683cc240d72692dfd GIT binary patch literal 547 zcmV+;0^I$HP)ag z!NsYIg<_CGT#AbbIvAYlsDfasf*1o5ibAn}P^4IWV3XYY9MXoi?^OpsxWm1i@AsW^ zxbUBnix1Se#M0sq zG*F!LluCnq`uy^(iGKRN+N)XG?bUxZi-`1Y&E^8mbpn&k`d=fb3V7cljyGGTr$2J; z>_L#t@2Uc1s6O_wQKRh4_v5@J-bw&=0)+jEP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-@kvBMRCwBal0RtEK@@<$clYj>#*lz+1rd}|g;GHW zH3+RzP>{}|f}5j*IJtB$0gHlLr{Z9Bh)%`1STGe4)Ls*V=9vDZTwlvsvfh5JaSVt5mk}zGXF?4!@_SM+u=pjQu6A zSIYR1A^1IdB2=qY>h(jDYSfU+X7Irg_YzE#t5?o2Ot00lY;3OPRINpwB0dZNYP+8O z^im^fV)UX2IG12d8~|i8g@D(f8ugNP9=mENrv z3gJkz*@#4-2M~feCPEq@l}Z8d>|VYDheo}zqs8LFgJO}#K-@d)xw*w<;9PqvSNas5 z-@k|^rmQi>Kfu?0v z(HBT>?5p`5I2p)SNcITwWnidMWngG%W?=aFA4tDsU???UV0e|lz+g3lfk8ZfQv6Xj zpxTd~E{-7;x01dTde)vla6sXJgVm1>mEUz78yJ!pq(1!r{(k@e{dIpE8+YG+mLSTW zIKfUKfq_FoY(gMVH1Wr;ui|Z@=jZJ?qSeR4z{HWmAS|pbV4N7*;4Q<(z|_IIaDrev zV^0MyP|F6!o}M0_GiPpyJ`!qYY+z`rYHZBWXJ8Sy(QtBax5PY~y2en)*h>94W}rcG zz4mo~jvZ)?TpMxJQ9`Vjfsv)Z_5c5q+%7vSu03^9-J@ KelF{r5}E)lFMmV; literal 0 HcmV?d00001 diff --git a/images/default/view_top_bottom.png b/images/default/view_top_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..28b4a4b15102eadd8c5a477d58a59bcd792768ab GIT binary patch literal 388 zcmV-~0ek+5P))J1;Sa7J@~@N#G&-lZ*+By}f#O1QBq~ zW!wR1uex!1piEM*d_I@!ArO&F5L0K?XdE3@t6{9uX{V%oIhsL-Bnax1o7=l{0SZ77 i_}c>d+0BfeuX+Q(_G#H-z96Uo0000Pmx$P5=oPZjsY|7(OU3ZK`Wj|PLQC5; z4#bo7p8eDJEE`p2jCC{gf-NQ3Qo^60uFJ=D(>IzeC9p_f|LhD zmJ+BuE>m+A`Va|^06DCIPar+&x9O%mi`P9v4asf8BN3n zmhd(SFgMZ2FQ`T46Igx0ih!z%LZBJ#6k*9A1i(P}H&Q1W0Ri|1yzY$4#@`0k00000 LNkvXXu0mjfur!9u literal 0 HcmV?d00001 diff --git a/images/iconmap.xml b/images/iconmap.xml new file mode 100644 index 00000000..091b590b --- /dev/null +++ b/images/iconmap.xml @@ -0,0 +1,8 @@ + + + images/default_icons + + 1uparrow.png + 1downarrow.png + + diff --git a/images/icons.qrc b/images/icons.qrc new file mode 100644 index 00000000..4f8d0ce2 --- /dev/null +++ b/images/icons.qrc @@ -0,0 +1,93 @@ + + + default/1downarrow.png + default/1leftarrow.png + default/1rightarrow.png + default/1uparrow.png + default/2dowarrow.png + default/2downarrow.png + default/2leftarrow.png + default/2rightarrow.png + default/2uparrow.png + default/3downarrow.png + default/3uparrow.png + default/add_user.png + default/apply.png + default/back.png + default/bell.png + default/bookmark.png + default/bookmark_add.png + default/bookmark_folder.png + default/bookmark_toolbar.png + default/bookmarks_list_add.png + default/bottom.png + default/button_cancel.png + default/button_ok.png + default/cancel.png + default/configure.png + default/configure_shortcuts.png + default/configure_toolbars.png + default/connect_creating.png + default/connect_established.png + default/connect_no.png + default/edit.png + default/edit_add.png + default/edit_remove.png + default/edit_user.png + default/editcopy.png + default/edittrash.png + default/exit.png + default/fileclose.png + default/filenew.png + default/fileopen.png + default/fileprint.png + default/filesave.png + default/filesaveas.png + default/finish.png + default/folder.png + default/folder_new.png + default/fonts.png + default/fontsizedown.png + default/fontsizeup.png + default/forward.png + default/help.png + default/identity.png + default/next.png + default/no.png + default/ok.png + default/remove.png + default/server.png + default/start.png + default/status_unknown.png + default/stop.png + default/tab.png + default/tab_breakoff.png + default/tab_duplicate.png + default/tab_first.png + default/tab_last.png + default/tab_left.png + default/tab_new.png + default/tab_new_bg.png + default/tab_new_raised.png + default/tab_remove.png + default/tab_right.png + default/top.png + default/trash.png + default/tux.png + default/up.png + default/view_bottom.png + default/view_choose.png + default/view_detailed.png + default/view_icon.png + default/view_left_right.png + default/view_multicolumn.png + default/view_orientation.png + default/view_remove 2.png + default/view_remove.png + default/view_right.png + default/view_sidetree.png + default/view_split.png + default/view_top_bottom.png + default/wizard.png + + diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt new file mode 100644 index 00000000..86bbe990 --- /dev/null +++ b/main/CMakeLists.txt @@ -0,0 +1,6 @@ +SET(main_SRCS logger.cpp quassel.cpp) +SET(main_HDRS quassel.h) +SET(main_MOCS logger.h) + +QT4_WRAP_CPP(_MOC ${main_MOCS}) +ADD_LIBRARY(main ${_MOC} ${main_SRCS} ${main_HDRS}) diff --git a/main/logger.cpp b/main/logger.cpp new file mode 100644 index 00000000..cc9482c7 --- /dev/null +++ b/main/logger.cpp @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "quassel.h" +#include "logger.h" + +#include + + + +Logger::~Logger() { + qInstallMsgHandler(0); +} + +void messageHandler(QtMsgType type, const char *msg) { + switch (type) { + case QtDebugMsg: + std::cerr << "[DEBUG] " << msg << "\n"; + break; + case QtWarningMsg: + std::cerr << "[WARNING] " << msg << "\n"; + break; + case QtCriticalMsg: + std::cerr << "[CRITICAL] " << msg << "\n"; + break; + case QtFatalMsg: + std::cerr << "[FATAL] " << msg << "\n"; + abort(); // deliberately core dump + } +} + +Logger::Logger() { + qInstallMsgHandler(messageHandler); +} diff --git a/main/logger.h b/main/logger.h new file mode 100644 index 00000000..ba8eba42 --- /dev/null +++ b/main/logger.h @@ -0,0 +1,41 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _LOGGER_H_ +#define _LOGGER_H_ + +#include + +class Logger : public QObject { + Q_OBJECT + + public: + Logger(); + virtual ~Logger(); + + + + private: + //void messageHandler(QtMsgType type, const char *msg); +}; + + + +#endif diff --git a/main/main.cpp b/main/main.cpp new file mode 100644 index 00000000..9d3e5789 --- /dev/null +++ b/main/main.cpp @@ -0,0 +1,45 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include + +#include + +#include "quassel.h" +#include "logger.h" + +#include "mainwin.h" + +int main(int argc, char **argv) { + + Quassel::init(); + Logger *logger = new Logger(); + Quassel::setLogger(logger); + + QApplication app(argc, argv); + + QApplication::setOrganizationDomain("quassel-irc.org"); + QApplication::setApplicationName("Quassel IRC"); + QApplication::setOrganizationName("The Quassel Team"); + + MainWin mainWin; + mainWin.show(); + return app.exec(); +} diff --git a/main/quassel.cpp b/main/quassel.cpp new file mode 100644 index 00000000..91492639 --- /dev/null +++ b/main/quassel.cpp @@ -0,0 +1,65 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "quassel.h" +#include "logger.h" + +#include +#include +#include + +void Quassel::init() { + //initIconMap(); +} + +void Quassel::setLogger(Logger *) { + + +}; + + +/* not done yet */ +void Quassel::initIconMap() { + QDomDocument doc("IconMap"); + QFile file("images/iconmap.xml"); + if(!file.open(QIODevice::ReadOnly)) { + qDebug() << "Error opening iconMap file!"; + return; + } else if(!doc.setContent(&file)) { + file.close(); + qDebug() << "Error parsing iconMap file!"; + } else { + file.close(); + + } +} + + +/** + * Retrieves an icon determined by its symbolic name. The mapping shall later + * be performed by a theme manager or something like that. + * @param symbol Symbol of requested icon + * @return Pointer to a newly created QIcon + */ +QIcon *Quassel::getIcon(QString /*symbol*/) { + //if(symbol == "connect" + + return 0; +} diff --git a/main/quassel.h b/main/quassel.h new file mode 100644 index 00000000..0c2a11b5 --- /dev/null +++ b/main/quassel.h @@ -0,0 +1,53 @@ +/*************************************************************************** + * Copyright (C) 2005 by The Quassel Team * + * devel@quassel-irc.org * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _QUASSEL_H_ +#define _QUASSEL_H_ + +class Logger; +class QIcon; +class QString; + +#include + + +/** + * A static class containing global data. + */ +class Quassel { + + public: + static void init(); + static Logger *getLogger(); + static void setLogger(Logger *); + + static QIcon *getIcon(QString symbol); + + private: + static void initIconMap(); + + static Logger *logger; + + static QString iconPath; + static QHash iconMap; + +}; + +#endif -- 2.20.1