From 744fcc1102904491d45ac385510d13980ef41395 Mon Sep 17 00:00:00 2001 From: Abdullateef Qallaa Date: Tue, 30 Aug 2016 19:22:23 +0300 Subject: [PATCH] Primary Release 1.0.0 --- Furqan.pro | 109 ++++ LICENSE.md | 674 +++++++++++++++++++++ README.md | 18 + database-schema.sql | Bin 0 -> 10470 bytes delegates/datedelegate.cpp | 60 ++ delegates/datedelegate.h | 34 ++ delegates/mapdelegate.cpp | 84 +++ delegates/mapdelegate.h | 34 ++ delegates/numericdelegate.cpp | 51 ++ delegates/numericdelegate.h | 38 ++ delegates/relationaldelegate.cpp | 94 +++ delegates/relationaldelegate.h | 50 ++ delegates/sqldelegate.cpp | 94 +++ delegates/sqldelegate.h | 37 ++ delegates/uniquedelegate.cpp | 55 ++ delegates/uniquedelegate.h | 32 + furqan.ico | Bin 0 -> 32038 bytes handlers/databasehandler.cpp | 107 ++++ handlers/databasehandler.h | 57 ++ handlers/maphandler.cpp | 87 +++ handlers/maphandler.h | 52 ++ handlers/modelhandler.cpp | 302 ++++++++++ handlers/modelhandler.h | 75 +++ handlers/printerhandler.cpp | 237 ++++++++ handlers/printerhandler.h | 53 ++ handlers/settinghandler.cpp | 339 +++++++++++ handlers/settinghandler.h | 126 ++++ handlers/translatorhandler.cpp | 54 ++ handlers/translatorhandler.h | 43 ++ installer.nsi | 175 ++++++ interfaces/classwidget.ui | 40 ++ interfaces/competitionwidget.ui | 40 ++ interfaces/competitorwidget.ui | 91 +++ interfaces/coursewidget.ui | 40 ++ interfaces/employeewidget.ui | 91 +++ interfaces/jobwidget.ui | 40 ++ interfaces/mainwidget.ui | 538 +++++++++++++++++ interfaces/quranwidget.ui | 91 +++ interfaces/resultwidget.ui | 91 +++ interfaces/settingwidget.ui | 980 +++++++++++++++++++++++++++++++ interfaces/studentwidget.ui | 91 +++ interfaces/teacherwidget.ui | 57 ++ interfaces/teachingwidget.ui | 91 +++ main.cpp | 66 +++ relations/abstractrelation.cpp | 24 + relations/abstractrelation.h | 40 ++ relations/maprelation.cpp | 44 ++ relations/maprelation.h | 43 ++ relations/sqlrelation.cpp | 74 +++ relations/sqlrelation.h | 51 ++ resource.qrc | 31 + resources/align-center.png | Bin 0 -> 21122 bytes resources/align-left.png | Bin 0 -> 21122 bytes resources/align-right.png | Bin 0 -> 21122 bytes resources/bold.png | Bin 0 -> 21122 bytes resources/close-ltr.png | Bin 0 -> 21122 bytes resources/close-rtl.png | Bin 0 -> 21559 bytes resources/database_backup.png | Bin 0 -> 21122 bytes resources/database_connect.png | Bin 0 -> 21122 bytes resources/database_create.png | Bin 0 -> 21122 bytes resources/emotion-happy.png | Bin 0 -> 15570 bytes resources/emotion-sad.png | Bin 0 -> 15484 bytes resources/empty.fdb | Bin 0 -> 1064960 bytes resources/exit.png | Bin 0 -> 4266 bytes resources/italic.png | Bin 0 -> 21122 bytes resources/minimize.png | Bin 0 -> 4266 bytes resources/printer.png | Bin 0 -> 21323 bytes resources/report.png | Bin 0 -> 21122 bytes resources/settings.png | Bin 0 -> 21122 bytes resources/splash-ar.png | Bin 0 -> 1021425 bytes resources/splash-en.png | Bin 0 -> 1021425 bytes resources/table_add.png | Bin 0 -> 21122 bytes resources/table_modify.png | Bin 0 -> 21122 bytes resources/table_print.png | Bin 0 -> 21122 bytes resources/table_remove.png | Bin 0 -> 21122 bytes resources/underline.png | Bin 0 -> 21122 bytes resources/zoom-in.png | Bin 0 -> 21122 bytes resources/zoom-out.png | Bin 0 -> 20449 bytes structures/printOption.h | 75 +++ structures/printoption.cpp | 120 ++++ structures/richsqlmodel.cpp | 47 ++ structures/richsqlmodel.h | 43 ++ translations/ar.ts | 825 ++++++++++++++++++++++++++ translations/en.ts | 825 ++++++++++++++++++++++++++ utility/enumeration.h | 34 ++ utility/generalenumeration.h | 34 ++ utility/mapenumeration.h | 73 +++ utility/resourcemanager.cpp | 114 ++++ utility/resourcemanager.h | 51 ++ utility/settingenumeration.h | 55 ++ utility/sqlenumeration.h | 159 +++++ widgets/classwidget.cpp | 91 +++ widgets/classwidget.h | 47 ++ widgets/competitionwidget.cpp | 88 +++ widgets/competitionwidget.h | 47 ++ widgets/competitorwidget.cpp | 130 ++++ widgets/competitorwidget.h | 56 ++ widgets/coursewidget.cpp | 88 +++ widgets/coursewidget.h | 47 ++ widgets/employeewidget.cpp | 134 +++++ widgets/employeewidget.h | 56 ++ widgets/jobwidget.cpp | 81 +++ widgets/jobwidget.h | 47 ++ widgets/mainwidget.cpp | 250 ++++++++ widgets/mainwidget.h | 90 +++ widgets/printdialog.cpp | 373 ++++++++++++ widgets/printdialog.h | 97 +++ widgets/quranwidget.cpp | 133 +++++ widgets/quranwidget.h | 56 ++ widgets/resultwidget.cpp | 96 +++ widgets/resultwidget.h | 56 ++ widgets/settingwidget.cpp | 264 +++++++++ widgets/settingwidget.h | 74 +++ widgets/studentwidget.cpp | 135 +++++ widgets/studentwidget.h | 56 ++ widgets/teacherwidget.cpp | 90 +++ widgets/teacherwidget.h | 47 ++ widgets/teachingwidget.cpp | 133 +++++ widgets/teachingwidget.h | 56 ++ widgets/texteditor.cpp | 158 +++++ widgets/texteditor.h | 100 ++++ 121 files changed, 11456 insertions(+) create mode 100644 Furqan.pro create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 database-schema.sql create mode 100644 delegates/datedelegate.cpp create mode 100644 delegates/datedelegate.h create mode 100644 delegates/mapdelegate.cpp create mode 100644 delegates/mapdelegate.h create mode 100644 delegates/numericdelegate.cpp create mode 100644 delegates/numericdelegate.h create mode 100644 delegates/relationaldelegate.cpp create mode 100644 delegates/relationaldelegate.h create mode 100644 delegates/sqldelegate.cpp create mode 100644 delegates/sqldelegate.h create mode 100644 delegates/uniquedelegate.cpp create mode 100644 delegates/uniquedelegate.h create mode 100644 furqan.ico create mode 100644 handlers/databasehandler.cpp create mode 100644 handlers/databasehandler.h create mode 100644 handlers/maphandler.cpp create mode 100644 handlers/maphandler.h create mode 100644 handlers/modelhandler.cpp create mode 100644 handlers/modelhandler.h create mode 100644 handlers/printerhandler.cpp create mode 100644 handlers/printerhandler.h create mode 100644 handlers/settinghandler.cpp create mode 100644 handlers/settinghandler.h create mode 100644 handlers/translatorhandler.cpp create mode 100644 handlers/translatorhandler.h create mode 100644 installer.nsi create mode 100644 interfaces/classwidget.ui create mode 100644 interfaces/competitionwidget.ui create mode 100644 interfaces/competitorwidget.ui create mode 100644 interfaces/coursewidget.ui create mode 100644 interfaces/employeewidget.ui create mode 100644 interfaces/jobwidget.ui create mode 100644 interfaces/mainwidget.ui create mode 100644 interfaces/quranwidget.ui create mode 100644 interfaces/resultwidget.ui create mode 100644 interfaces/settingwidget.ui create mode 100644 interfaces/studentwidget.ui create mode 100644 interfaces/teacherwidget.ui create mode 100644 interfaces/teachingwidget.ui create mode 100644 main.cpp create mode 100644 relations/abstractrelation.cpp create mode 100644 relations/abstractrelation.h create mode 100644 relations/maprelation.cpp create mode 100644 relations/maprelation.h create mode 100644 relations/sqlrelation.cpp create mode 100644 relations/sqlrelation.h create mode 100644 resource.qrc create mode 100644 resources/align-center.png create mode 100644 resources/align-left.png create mode 100644 resources/align-right.png create mode 100644 resources/bold.png create mode 100644 resources/close-ltr.png create mode 100644 resources/close-rtl.png create mode 100644 resources/database_backup.png create mode 100644 resources/database_connect.png create mode 100644 resources/database_create.png create mode 100644 resources/emotion-happy.png create mode 100644 resources/emotion-sad.png create mode 100644 resources/empty.fdb create mode 100644 resources/exit.png create mode 100644 resources/italic.png create mode 100644 resources/minimize.png create mode 100644 resources/printer.png create mode 100644 resources/report.png create mode 100644 resources/settings.png create mode 100644 resources/splash-ar.png create mode 100644 resources/splash-en.png create mode 100644 resources/table_add.png create mode 100644 resources/table_modify.png create mode 100644 resources/table_print.png create mode 100644 resources/table_remove.png create mode 100644 resources/underline.png create mode 100644 resources/zoom-in.png create mode 100644 resources/zoom-out.png create mode 100644 structures/printOption.h create mode 100644 structures/printoption.cpp create mode 100644 structures/richsqlmodel.cpp create mode 100644 structures/richsqlmodel.h create mode 100644 translations/ar.ts create mode 100644 translations/en.ts create mode 100644 utility/enumeration.h create mode 100644 utility/generalenumeration.h create mode 100644 utility/mapenumeration.h create mode 100644 utility/resourcemanager.cpp create mode 100644 utility/resourcemanager.h create mode 100644 utility/settingenumeration.h create mode 100644 utility/sqlenumeration.h create mode 100644 widgets/classwidget.cpp create mode 100644 widgets/classwidget.h create mode 100644 widgets/competitionwidget.cpp create mode 100644 widgets/competitionwidget.h create mode 100644 widgets/competitorwidget.cpp create mode 100644 widgets/competitorwidget.h create mode 100644 widgets/coursewidget.cpp create mode 100644 widgets/coursewidget.h create mode 100644 widgets/employeewidget.cpp create mode 100644 widgets/employeewidget.h create mode 100644 widgets/jobwidget.cpp create mode 100644 widgets/jobwidget.h create mode 100644 widgets/mainwidget.cpp create mode 100644 widgets/mainwidget.h create mode 100644 widgets/printdialog.cpp create mode 100644 widgets/printdialog.h create mode 100644 widgets/quranwidget.cpp create mode 100644 widgets/quranwidget.h create mode 100644 widgets/resultwidget.cpp create mode 100644 widgets/resultwidget.h create mode 100644 widgets/settingwidget.cpp create mode 100644 widgets/settingwidget.h create mode 100644 widgets/studentwidget.cpp create mode 100644 widgets/studentwidget.h create mode 100644 widgets/teacherwidget.cpp create mode 100644 widgets/teacherwidget.h create mode 100644 widgets/teachingwidget.cpp create mode 100644 widgets/teachingwidget.h create mode 100644 widgets/texteditor.cpp create mode 100644 widgets/texteditor.h diff --git a/Furqan.pro b/Furqan.pro new file mode 100644 index 0000000..6602de0 --- /dev/null +++ b/Furqan.pro @@ -0,0 +1,109 @@ +QT = core gui widgets sql printsupport + +TEMPLATE = app + +TARGET = Furqan + +VERSION = 1.0.0 + +CONFIG += release + +RESOURCES += \ + resource.qrc + +RC_ICONS = furqan.ico + +TRANSLATIONS += translations\en.ts translations\ar.ts + +INCLUDEPATH += widgets structures relations delegates handlers utility + +FORMS += \ + interfaces\classwidget.ui \ + interfaces\competitionwidget.ui \ + interfaces\competitorwidget.ui \ + interfaces\coursewidget.ui \ + interfaces\mainwidget.ui \ + interfaces\employeewidget.ui \ + interfaces\jobwidget.ui \ + interfaces\quranwidget.ui \ + interfaces\resultwidget.ui \ + interfaces\settingwidget.ui \ + interfaces\studentwidget.ui \ + interfaces\teacherwidget.ui \ + interfaces\teachingwidget.ui + +HEADERS += \ + delegates/datedelegate.h \ + delegates/mapdelegate.h \ + delegates/numericdelegate.h \ + delegates/relationaldelegate.h \ + delegates/sqldelegate.h \ + delegates/uniquedelegate.h \ + handlers/databasehandler.h \ + handlers/maphandler.h \ + handlers/modelhandler.h \ + handlers/printerhandler.h \ + handlers/settinghandler.h \ + handlers/translatorhandler.h \ + relations/abstractrelation.h \ + relations/maprelation.h \ + relations/sqlrelation.h \ + structures/printOption.h \ + structures/richsqlmodel.h \ + utility/enumeration.h \ + utility/generalenumeration.h \ + utility/mapenumeration.h \ + utility/resourcemanager.h \ + utility/settingenumeration.h \ + utility/sqlenumeration.h \ + widgets/classwidget.h \ + widgets/competitionwidget.h \ + widgets/competitorwidget.h \ + widgets/coursewidget.h \ + widgets/mainwidget.h \ + widgets/employeewidget.h \ + widgets/jobwidget.h \ + widgets/quranwidget.h \ + widgets/resultwidget.h \ + widgets/settingwidget.h \ + widgets/studentwidget.h \ + widgets/teacherwidget.h \ + widgets/teachingwidget.h \ + widgets/printdialog.h \ + widgets/texteditor.h + +SOURCES += \ + delegates/datedelegate.cpp \ + delegates/mapdelegate.cpp \ + delegates/numericdelegate.cpp \ + delegates/relationaldelegate.cpp \ + delegates/sqldelegate.cpp \ + delegates/uniquedelegate.cpp \ + handlers/databasehandler.cpp \ + handlers/maphandler.cpp \ + handlers/modelhandler.cpp \ + handlers/printerhandler.cpp \ + handlers/settinghandler.cpp \ + handlers/translatorhandler.cpp \ + relations/abstractrelation.cpp \ + relations/maprelation.cpp \ + relations/sqlrelation.cpp \ + structures/printoption.cpp \ + structures/richsqlmodel.cpp \ + utility/resourcemanager.cpp \ + widgets/classwidget.cpp \ + widgets/competitionwidget.cpp \ + widgets/competitorwidget.cpp \ + widgets/coursewidget.cpp \ + widgets/mainwidget.cpp \ + widgets/employeewidget.cpp \ + widgets/jobwidget.cpp \ + widgets/quranwidget.cpp \ + widgets/resultwidget.cpp \ + widgets/settingwidget.cpp \ + widgets/studentwidget.cpp \ + widgets/teacherwidget.cpp \ + widgets/teachingwidget.cpp \ + widgets/printdialog.cpp \ + widgets/texteditor.cpp \ + main.cpp diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..9cecc1d --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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 Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d36b4c --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +Furqan +====== +An institute management system written in C++/Qt. It's specialized for institutes teaching Quran-related courses. + +Version: 1.0.0 + +GitHub hosts source code at: +https://github.com/Laateef/Furqan + +SourceForge hosts binaries at: +https://sourceforge.net/projects/furqan/ + +Requirements +------------ +* Qt Libraries: 5.x.x +* Firbird Server (Embedded or Standalone): 2.5.x + +License: GPLv3 \ No newline at end of file diff --git a/database-schema.sql b/database-schema.sql new file mode 100644 index 0000000000000000000000000000000000000000..1abb3aa0b823500bc2ed6c76f6f044a425ccbd16 GIT binary patch literal 10470 zcmeHN+iu%N5S>@~D~P<9Ot{TCEv+5sD?NnW5luSL(WVF@&nGM_zs-h8_pG6$Cj;7jWa@K3wUaJ+%pGkkKVR}W)yXpn;!rI>)P{!`|CTseZg zxg0pTPjSA78BgWwQh z{pDTSWe>+27+=s)3tsDE)(oq_-);B%4J6rw%$v@>nX_=cwGJWK)U8ZtuO8;(=hN8C zW?Ri}^dGLk4C^+6)ZMICrHtrXQ_ zs~++R*Z85MPIK`Qg*>{ftxp?YSz?l+ky*b$XL3tLM?poaGv1g_$cwnm4D}v4?hM)P z9sK&aymWc%62~u)w=(1y=Clzgc0pr!PMj;`*u-^?8RN@;`UE{B%p~Nm2u-au4-X*A z45N3PFJ;a%nA?u7e2#PYV`vY}NSgCf8oh=-ub|%odQu-hmr#o;I*>!?35FX*Mrgt` zYQ~sTtSDy$Lx9zCLRIRRch_Z9^NF~YX^#&P$u#QX_u&k2&u0!XNqua(!L%-z#;QrN zc8nNiEExh$mM^cMtOt%^qI@*zvK8>i)uyr)>kSf*Qcsdnrf7)7T1r6MU}$ryBo!o)$p<4 zz#PIVp?N;bJ4IbdWNlAX?83WIRjcA6U!5aY{R;2;Kh(ud9#_?xRYb=MtjzZhwQuN$fsM2O84*cj>bmM0)U9+g3YvZ)+O?6#C>4SC5OY;38xxN_<_+#%&yeNM z@qOcZVdbmmxX##2#bR9lP1rS_DdXd>FJo3UFK5n_#^IXPYZ{LGZ#1-3EbCZb9aK@P zxlXY609fNsfq9uc!8iV7pB>y?d^oaPdoWvv_w|WSdE6Q>fNvq>?x}l*voX$eMj{a9 zA-b#qeGhTwqi-Kq`3z?bNWw~i&m`%khC(^c?cD>u!*Bxs=lvNf9=-`-y(~YrscCw) zfvcG~7qk8Xyo()A-K@;Q`i8?AVw`$$=Stl(S4BL=&VY3nJ<#d~jXIN8F`3yt!#gGQ z8c_!#VeC`f$-#vPT0al@5!ENoUi(fm?YK=m4!y=1z6X7O`L;t$p5hvRQytbb&76QBxFu4pCl?-gb6qALrF9e;=4(7{I;G0gz+9 H%=;e!YMCx> literal 0 HcmV?d00001 diff --git a/delegates/datedelegate.cpp b/delegates/datedelegate.cpp new file mode 100644 index 0000000..f9806f3 --- /dev/null +++ b/delegates/datedelegate.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "datedelegate.h" + +#include +#include + +DateDelegate::DateDelegate(QObject *parent) : + QStyledItemDelegate(parent) +{} + +QWidget *DateDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(option) + + QDateEdit *dateEdit = new QDateEdit(parent); + + if (index.data().isNull()) + dateEdit->setDate(QDate::currentDate()); + else + dateEdit->setDate(index.data().toDate()); + + return dateEdit; +} + +void DateDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QDateEdit *dateEdit = qobject_cast(editor); + + if (!dateEdit) + return; + + QAbstractItemModel *mdl = model; + QModelIndex idx = index; + + if (model->inherits("QAbstractProxyModel")) { + QSortFilterProxyModel *proxyModel = qobject_cast(model); + if (proxyModel) { + mdl = proxyModel->sourceModel(); + idx = proxyModel->mapToSource(index); + } + } + + mdl->setData(idx, dateEdit->date()); + mdl->submit(); +} diff --git a/delegates/datedelegate.h b/delegates/datedelegate.h new file mode 100644 index 0000000..0e112c1 --- /dev/null +++ b/delegates/datedelegate.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef DATEDELEGATE_H +#define DATEDELEGATE_H + +#include + +class DateDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + explicit DateDelegate(QObject *parent = 0); + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; +}; + +#endif // DATEDELEGATE_H diff --git a/delegates/mapdelegate.cpp b/delegates/mapdelegate.cpp new file mode 100644 index 0000000..3d5e303 --- /dev/null +++ b/delegates/mapdelegate.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "mapdelegate.h" + +#include "maprelation.h" +#include "richsqlmodel.h" + +#include +#include + +MapDelegate::MapDelegate(QObject *parent) : + QStyledItemDelegate(parent) +{} + +QWidget *MapDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(option) + + AbstractRelation *relation = NULL; + + if (index.model()->inherits("QAbstractProxyModel")) { + const QSortFilterProxyModel *proxyModel = qobject_cast(index.model()); + if (proxyModel) { + relation = qobject_cast(proxyModel->sourceModel())->relation(proxyModel->mapToSource(index).column()); + } + } else { + relation = qobject_cast(index.model())->relation(index.column()); + } + + if (!relation || relation->type() != AbstractRelation::Map) + return NULL; + + MapRelation *mapRelation = qobject_cast(relation); + + QComboBox *combo = new QComboBox(parent); + + foreach (const int key, mapRelation->map()->keys()) + combo->insertItem(key, mapRelation->map()->value(key)); + + combo->setCurrentText(index.data().toString()); + + return combo; +} + +void MapDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QComboBox *combo = qobject_cast(editor); + + QAbstractItemModel *mdl = model; + QModelIndex idx = index; + + if (model->inherits("QAbstractProxyModel")) { + QSortFilterProxyModel *proxyModel = qobject_cast(model); + if (proxyModel) { + mdl = proxyModel->sourceModel(); + idx = proxyModel->mapToSource(index); + } + } + + RichSqlModel *sqlModel = qobject_cast(mdl); + AbstractRelation *relation = sqlModel->relation(idx.column()); + + if (!relation || relation->type() != AbstractRelation::Map) + return; + + MapRelation *mapRelation = qobject_cast(relation); + + sqlModel->setData(idx, mapRelation->backwardLookup(combo->currentText())); + sqlModel->submit(); +} diff --git a/delegates/mapdelegate.h b/delegates/mapdelegate.h new file mode 100644 index 0000000..dddf8a3 --- /dev/null +++ b/delegates/mapdelegate.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef MAPDELEGATE_H +#define MAPDELEGATE_H + +#include + +class MapDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + explicit MapDelegate(QObject *parent = 0); + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; +}; + +#endif // MAPDELEGATE_H diff --git a/delegates/numericdelegate.cpp b/delegates/numericdelegate.cpp new file mode 100644 index 0000000..5eca35b --- /dev/null +++ b/delegates/numericdelegate.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "numericdelegate.h" + +#include +#include +#include + +NumericDelegate::NumericDelegate(QValidator *validator, QObject *parent) : + QStyledItemDelegate(parent), + m_validator(validator) +{} + +QWidget *NumericDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(option) + Q_UNUSED(index) + + QLineEdit *editor = new QLineEdit(parent); + editor->setValidator(m_validator); + + return editor; +} + +bool NumericDelegate::eventFilter(QObject *object, QEvent *event) +{ + if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) { + QKeyEvent *keyEvent = static_cast(event); + + if (keyEvent->key() == Qt::Key_Escape) { + QApplication::postEvent(object, new QKeyEvent(event->type(), Qt::Key_Enter, Qt::NoModifier)); + event->ignore(); + return true; + } + } + return QStyledItemDelegate::eventFilter(object, event); +} diff --git a/delegates/numericdelegate.h b/delegates/numericdelegate.h new file mode 100644 index 0000000..749b5c8 --- /dev/null +++ b/delegates/numericdelegate.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef NUMERICDELEGATE_H +#define NUMERICDELEGATE_H + +#include + +class NumericDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + explicit NumericDelegate(QValidator *validator, QObject *parent = 0); + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + +protected: + bool eventFilter(QObject *object, QEvent *event); + +private: + const QValidator *m_validator; +}; + +#endif // NUMERICDELEGATE_H diff --git a/delegates/relationaldelegate.cpp b/delegates/relationaldelegate.cpp new file mode 100644 index 0000000..dc5a4b8 --- /dev/null +++ b/delegates/relationaldelegate.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "relationaldelegate.h" + +#include "resourcemanager.h" + +#include +#include +#include +#include + +RelationalDelegate::RelationalDelegate(QSqlTableModel *model, int column, bool isEditable, QObject *parent) : + QStyledItemDelegate(parent), + m_targetModel(model), + m_targetColumn(column), + m_editable(isEditable), + m_map() +{ + updateMap(m_targetModel->index(0, 0), m_targetModel->index(m_targetModel->rowCount() - 1, 0)); + + connect(m_targetModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(updateMap(QModelIndex,QModelIndex))); +} + +QWidget *RelationalDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(option) + Q_UNUSED(index) + + QComboBox *combo = NULL; + + if (m_editable) { + combo = new QComboBox(parent); + combo->setModel(m_targetModel); + combo->setModelColumn(m_targetColumn); + } + + return combo; +} + +void RelationalDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QComboBox *combo = qobject_cast(editor); + + QAbstractItemModel *mdl = model; + QModelIndex idx = index; + + if (model->inherits("QAbstractProxyModel")) { + QSortFilterProxyModel *proxyModel = qobject_cast(model); + if (proxyModel) { + mdl = proxyModel->sourceModel(); + idx = proxyModel->mapToSource(index); + } + } + + QSqlTableModel *sqlModel = qobject_cast(mdl); + + if (combo && sqlModel) { + sqlModel->setData(idx, m_map.key(combo->currentText())); + + if (!sqlModel->submit()) { + RscMgr::issueMessage(QString(tr("Database Error ")).append(sqlModel->lastError().text()), false); + sqlModel->selectRow(idx.row()); + } + } +} + +QString RelationalDelegate::displayText(const QVariant &value, const QLocale &locale) const +{ + Q_UNUSED(locale) + + return m_map.value(value.toLongLong()); +} + +void RelationalDelegate::updateMap(const QModelIndex &topLeft, const QModelIndex &bottomRight) +{ + for (int i = topLeft.row(); i <= bottomRight.row(); ++i) { + m_map.insert(m_targetModel->index(i, 0).data().toLongLong(), + m_targetModel->index(i, m_targetColumn).data().toString()); + } +} diff --git a/delegates/relationaldelegate.h b/delegates/relationaldelegate.h new file mode 100644 index 0000000..ef81c0f --- /dev/null +++ b/delegates/relationaldelegate.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef RELATIONALDELEGATE_H +#define RELATIONALDELEGATE_H + +#include + +class QSqlTableModel; + +class RelationalDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + explicit RelationalDelegate(QSqlTableModel *model, int column, bool isEditable = true, QObject *parent = 0); + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; + + QString displayText(const QVariant &value, const QLocale &locale) const; + +private slots: + void updateMap(const QModelIndex &topLeft, const QModelIndex &bottomRight); + +private: + QSqlTableModel *m_targetModel; + + int m_targetColumn; + + const bool m_editable; + + QMap m_map; +}; + +#endif // RELATIONALDELEGATE_H diff --git a/delegates/sqldelegate.cpp b/delegates/sqldelegate.cpp new file mode 100644 index 0000000..ca1682f --- /dev/null +++ b/delegates/sqldelegate.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "sqldelegate.h" + +#include "sqlrelation.h" +#include "richsqlmodel.h" + +#include +#include + +SqlDelegate::SqlDelegate(bool isEditable, QObject *parent) : + QStyledItemDelegate(parent), + m_isEditable(isEditable) +{} + +QWidget *SqlDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(option) + + const QAbstractItemModel *model = index.model(); + + const QAbstractItemModel *mdl = model; + QModelIndex idx = index; + AbstractRelation *relation = NULL; + + if (model->inherits("QAbstractProxyModel")) { + const QSortFilterProxyModel *proxyModel = qobject_cast(model); + if (proxyModel) { + mdl = proxyModel->sourceModel(); + idx = proxyModel->mapToSource(index); + relation = qobject_cast(mdl)->relation(idx.column()); + } + } else { + relation = qobject_cast(model)->relation(index.column()); + } + + if (!relation || relation->type() != AbstractRelation::Sql) + return NULL; + + SqlRelation *sqlRelation = qobject_cast(relation); + QSqlTableModel *sqlRemoteModel = const_cast(sqlRelation->remoteModel()); + + if (m_isEditable) { + QComboBox *combo = new QComboBox(parent); + combo->setModel(sqlRemoteModel); + combo->setModelColumn(sqlRelation->displayColumn()); + combo->setCurrentText(sqlRelation->forwardLookup(idx.data(Qt::EditRole).toLongLong())); + return combo; + } + + return NULL; +} + +void SqlDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QComboBox *combo = qobject_cast(editor); + + QAbstractItemModel *mdl = model; + QModelIndex idx = index; + + if (model->inherits("QAbstractProxyModel")) { + QSortFilterProxyModel *proxyModel = qobject_cast(model); + if (proxyModel) { + mdl = proxyModel->sourceModel(); + idx = proxyModel->mapToSource(index); + } + } + + RichSqlModel *sqlModel = qobject_cast(mdl); + + AbstractRelation *relation = sqlModel->relation(idx.column()); + + if (!relation || relation->type() != AbstractRelation::Sql) + return; + + SqlRelation *sqlRelation = qobject_cast(relation); + + sqlModel->setData(idx, sqlRelation->backwardLookup(combo->currentText())); + sqlModel->submit(); +} diff --git a/delegates/sqldelegate.h b/delegates/sqldelegate.h new file mode 100644 index 0000000..74ccbfa --- /dev/null +++ b/delegates/sqldelegate.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef SQLDELEGATE_H +#define SQLDELEGATE_H + +#include + +class SqlDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + explicit SqlDelegate(bool isEditable, QObject *parent = 0); + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; + +private: + const bool m_isEditable; +}; + +#endif // SQLDELEGATE_H diff --git a/delegates/uniquedelegate.cpp b/delegates/uniquedelegate.cpp new file mode 100644 index 0000000..27afd5f --- /dev/null +++ b/delegates/uniquedelegate.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "uniquedelegate.h" + +#include "resourcemanager.h" + +#include +#include +#include +#include + +UniqueDelegate::UniqueDelegate(QObject *parent) : + QStyledItemDelegate(parent) +{} + +void UniqueDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QLineEdit *lineEdit = qobject_cast(editor); + + QAbstractItemModel *mdl = model; + QModelIndex idx = index; + + if (model->inherits("QAbstractProxyModel")) { + QSortFilterProxyModel *proxyModel = qobject_cast(model); + if (proxyModel) { + mdl = proxyModel->sourceModel(); + idx = proxyModel->mapToSource(index); + } + } + + QSqlTableModel *sqlModel = qobject_cast(mdl); + + if (lineEdit && sqlModel) { + sqlModel->setData(idx, lineEdit->text().trimmed()); + + if (!sqlModel->submit()) { + RscMgr::issueMessage(QString(tr("Database Error ")).append(sqlModel->lastError().text()), false); + sqlModel->selectRow(idx.row()); + } + } +} diff --git a/delegates/uniquedelegate.h b/delegates/uniquedelegate.h new file mode 100644 index 0000000..3169c69 --- /dev/null +++ b/delegates/uniquedelegate.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef UNIQUEDELEGATE_H +#define UNIQUEDELEGATE_H + +#include + +class UniqueDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + explicit UniqueDelegate(QObject *parent = 0); + + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; +}; + +#endif // UNIQUEDELEGATE_H diff --git a/furqan.ico b/furqan.ico new file mode 100644 index 0000000000000000000000000000000000000000..75854c010493bf993ef3b2e676fcdad7b98e00e3 GIT binary patch literal 32038 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 Ps`Q4ZcC0$0!tDP6ifz4o literal 0 HcmV?d00001 diff --git a/handlers/databasehandler.cpp b/handlers/databasehandler.cpp new file mode 100644 index 0000000..d987a86 --- /dev/null +++ b/handlers/databasehandler.cpp @@ -0,0 +1,107 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "databasehandler.h" +#include "resourcemanager.h" + +#include +#include + +DatabaseHandler::DatabaseHandler(QObject *parent) : + QObject(parent), + databaseFileExtension(".fdb") +{ + m_database = QSqlDatabase::addDatabase("QIBASE"); + m_database.setDatabaseName(RscMgr::settingHandler()->databasePath()); + m_database.setUserName("SYSDBA"); + m_database.open(); +} + +DatabaseHandler::~DatabaseHandler() { + if (m_database.isOpen()) + m_database.close(); +} + +DatabaseHandler *DatabaseHandler::singleton() +{ + static DatabaseHandler *databaseHandler = NULL; + + if (!databaseHandler) + databaseHandler = new DatabaseHandler(qApp); + + return databaseHandler; +} + +QSqlDatabase &DatabaseHandler::connection() +{ + return m_database; +} + +bool DatabaseHandler::createNewDatabase(const QString &newDatabasePath) +{ + return copyDatabase(":/empty-database", newDatabasePath); +} + +bool DatabaseHandler::ChangeCurrentDatabase(const QString &newDatabasePath) +{ + // Check whether the given path ends with the extension indicated to by "databaseFileExtension" data member. + if (!isPathValid(newDatabasePath)) + return false; + + if (m_database.isOpen()) + m_database.close(); + + m_database.setDatabaseName(newDatabasePath); + + if (!m_database.open()) { + return false; + } + + RscMgr::settingHandler()->setDatabasePath(newDatabasePath); + + emit currentDatabaseChanged(newDatabasePath); + + return true; +} + +bool DatabaseHandler::backupCurrentDatabase(const QString &backupDatabasePath) +{ + return copyDatabase(RscMgr::settingHandler()->databasePath(), backupDatabasePath); +} + +bool DatabaseHandler::isPathValid(const QString &path) const +{ + return path.endsWith(databaseFileExtension); +} + +void DatabaseHandler::validatePath(QString &path) const +{ + if (!path.endsWith(databaseFileExtension)) + path.append(databaseFileExtension); +} + +bool DatabaseHandler::copyDatabase(const QString &sourcePath, const QString &targetPath) +{ + QFile file; + file.setFileName(sourcePath); + + if (file.copy(targetPath)) { + QFile(targetPath).setPermissions(QFile::ReadOther | QFile::WriteOther); + return true; + } + + return false; +} diff --git a/handlers/databasehandler.h b/handlers/databasehandler.h new file mode 100644 index 0000000..c6400e3 --- /dev/null +++ b/handlers/databasehandler.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef DATABASEHANDLER_H +#define DATABASEHANDLER_H + +#include +#include + +class DatabaseHandler : public QObject +{ + Q_OBJECT + +public: + static DatabaseHandler *singleton(); + + QSqlDatabase &connection(); + + bool createNewDatabase(const QString &newDatabasePath); + + bool ChangeCurrentDatabase(const QString &newDatabasePath); + + bool backupCurrentDatabase(const QString &backupDatabasePath); + + ~DatabaseHandler(); + +signals: + void currentDatabaseChanged(const QString &) const; + +private: + explicit DatabaseHandler(QObject *parent = 0); + + const QString databaseFileExtension; + + bool isPathValid(const QString &path) const; + + void validatePath(QString &path) const; + + bool copyDatabase(const QString &sourcePath, const QString &targetPath); + + QSqlDatabase m_database; +}; + +#endif // DATABASEHANDLER_H diff --git a/handlers/maphandler.cpp b/handlers/maphandler.cpp new file mode 100644 index 0000000..c4dd92e --- /dev/null +++ b/handlers/maphandler.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "maphandler.h" + +#include "resourcemanager.h" + +#include + +MapHandler::MapHandler(QObject *parent) : + QObject(parent) +{ + initialize(); + + mapMaps(); + + connect(RscMgr::translatorHandler(), SIGNAL(languageChanged()), SLOT(initialize())); +} + +void MapHandler::initialize() +{ + m_genderMap.clear(); + m_genderMap.insert(NS_GENDER::NONE, tr("None")); + m_genderMap.insert(NS_GENDER::MALE, tr("Male")); + m_genderMap.insert(NS_GENDER::FEMALE, tr("Female")); + + m_levelMap.clear(); + m_levelMap.insert(NS_LEVEL::NONE, tr("None")); + m_levelMap.insert(NS_LEVEL::BASIC, tr("Basic")); + m_levelMap.insert(NS_LEVEL::INTERMEDIATE, tr("Intermediate")); + m_levelMap.insert(NS_LEVEL::ADVANCED, tr("Advanced")); + + m_semesterMap.clear(); + m_semesterMap.insert(NS_SEMESTER::NONE, tr("None")); + m_semesterMap.insert(NS_SEMESTER::FIRST, tr("First")); + m_semesterMap.insert(NS_SEMESTER::SECOND, tr("Second")); + + m_competitionMap.clear(); + m_competitionMap.insert(NS_COMPETITION_TYPE::NONE, tr("None")); + m_competitionMap.insert(NS_COMPETITION_TYPE::DAILY, tr("Daily")); + m_competitionMap.insert(NS_COMPETITION_TYPE::WEEKLY, tr("Weekly")); + m_competitionMap.insert(NS_COMPETITION_TYPE::QUARTERLY, tr("Quarterly")); + + m_recitalMap.clear(); + m_recitalMap.insert(NS_RECITAL::NONE, tr("None")); + m_recitalMap.insert(NS_RECITAL::READING, tr("Reading")); + m_recitalMap.insert(NS_RECITAL::MEMORIZING, tr("Memorizing")); + m_recitalMap.insert(NS_RECITAL::REVIEWING, tr("Reviewing")); +} + +void MapHandler::mapMaps() +{ + m_mapMap.clear(); + m_mapMap.insert(NS_MAP::GENDER, &m_genderMap); + m_mapMap.insert(NS_MAP::LEVEL, &m_levelMap); + m_mapMap.insert(NS_MAP::SEMESTER, &m_semesterMap); + m_mapMap.insert(NS_MAP::COMPETITION, &m_competitionMap); + m_mapMap.insert(NS_MAP::RECITAL, &m_recitalMap); +} + +MapHandler *MapHandler::singleton() +{ + static MapHandler *mapHandler = NULL; + + if (!mapHandler) + mapHandler = new MapHandler(qApp); + + return mapHandler; +} + +const QMap *MapHandler::map(NS_MAP::MAP map) const +{ + return m_mapMap.value(map); +} diff --git a/handlers/maphandler.h b/handlers/maphandler.h new file mode 100644 index 0000000..18a4862 --- /dev/null +++ b/handlers/maphandler.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef MAPHANDLER_H +#define MAPHANDLER_H + +#include +#include + +#include "maprelation.h" +#include "mapenumeration.h" + +class MapHandler : public QObject +{ + Q_OBJECT + +public: + static MapHandler *singleton(); + + const QMap *map(NS_MAP::MAP) const; + +private slots: + void mapMaps(); + + void initialize(); + +private: + explicit MapHandler(QObject *parent = 0); + + QMap m_genderMap; + QMap m_levelMap; + QMap m_semesterMap; + QMap m_competitionMap; + QMap m_recitalMap; + + QMap *> m_mapMap; +}; + +#endif // MAPHANDLER_H diff --git a/handlers/modelhandler.cpp b/handlers/modelhandler.cpp new file mode 100644 index 0000000..663debb --- /dev/null +++ b/handlers/modelhandler.cpp @@ -0,0 +1,302 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "modelhandler.h" + +#include "resourcemanager.h" +#include "richsqlmodel.h" +#include "maprelation.h" +#include "sqlrelation.h" + +#include +#include + +ModelHandler::ModelHandler(QObject *parent) : + QObject(parent), + m_classModel(new RichSqlModel(this)), + m_courseModel(new RichSqlModel(this)), + m_studentModel(new RichSqlModel(this)), + m_teacherModel(new RichSqlModel(this)), + m_teachingModel(new RichSqlModel(this)), + m_resultModel(new RichSqlModel(this)), + m_quranModel(new RichSqlModel(this)), + m_competitionModel(new RichSqlModel(this)), + m_competitorModel(new RichSqlModel(this)), + m_jobModel(new RichSqlModel(this)), + m_employeeModel(new RichSqlModel(this)), + m_previewModel(new QStandardItemModel(3, 3, this)), + m_modelMap() +{ + mapModels(); + + initializeModels(); + initializeHeaders(); + initializePreviewModel(); + + connect(RscMgr::translatorHandler(), SIGNAL(languageChanged()), SLOT(initializeHeaders())); + connect(RscMgr::translatorHandler(), SIGNAL(languageChanged()), SLOT(initializePreviewModel())); + connect(RscMgr::databaseHandler(), SIGNAL(currentDatabaseChanged(QString)), SLOT(reset())); +} + +ModelHandler *ModelHandler::singleton() +{ + static ModelHandler *modelHandler = NULL; + + if (!modelHandler) + modelHandler = new ModelHandler(qApp); + + return modelHandler; +} + +void ModelHandler::initializeModels() +{ + m_classModel->setTable("CLASS"); + m_classModel->setSort(NS_CLASS::ID, Qt::AscendingOrder); + m_classModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_classModel->setRelation(NS_CLASS::LEVEL, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::LEVEL), m_classModel)); + m_classModel->select(); + + m_courseModel->setTable("COURSE"); + m_courseModel->setSort(NS_COURSE::ID, Qt::AscendingOrder); + m_courseModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_courseModel->setRelation(NS_COURSE::SEMESTER, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::SEMESTER), m_courseModel)); + m_courseModel->select(); + + m_studentModel->setTable("STUDENT"); + m_studentModel->setSort(NS_STUDENT::ID, Qt::AscendingOrder); + m_studentModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_studentModel->setRelation(NS_STUDENT::GENDER, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::GENDER), m_studentModel)); + m_studentModel->setRelation(NS_STUDENT::LEVEL, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::LEVEL), m_studentModel)); + m_studentModel->setRelation(NS_STUDENT::CLASS, new SqlRelation(m_classModel, NS_CLASS::ID, NS_CLASS::NAME, m_studentModel)); + m_studentModel->select(); + + m_teacherModel->setTable("TEACHER"); + m_teacherModel->setSort(NS_TEACHER::ID, Qt::AscendingOrder); + m_teacherModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_teacherModel->setRelation(NS_TEACHER::GENDER, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::GENDER), m_teacherModel)); + m_teacherModel->select(); + + m_teachingModel->setTable("TEACHING"); + m_teachingModel->setSort(NS_TEACHING::ID, Qt::AscendingOrder); + m_teachingModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_teachingModel->setRelation(NS_TEACHING::TEACHER, new SqlRelation(m_teacherModel, NS_TEACHER::ID, NS_TEACHER::FULL_NAME, m_teachingModel)); + m_teachingModel->setRelation(NS_TEACHING::CLASS, new SqlRelation(m_classModel, NS_CLASS::ID, NS_CLASS::NAME, m_teachingModel)); + m_teachingModel->setRelation(NS_TEACHING::COURSE, new SqlRelation(m_courseModel, NS_COURSE::ID, NS_COURSE::NAME, m_teachingModel)); + m_teachingModel->select(); + + m_resultModel->setTable("RESULT"); + m_resultModel->setSort(NS_RESULT::ID, Qt::AscendingOrder); + m_resultModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_resultModel->setRelation(NS_RESULT::COURSE, new SqlRelation(m_courseModel, NS_COURSE::ID, NS_COURSE::NAME, m_resultModel)); + m_resultModel->setRelation(NS_RESULT::STUDENT, new SqlRelation(m_studentModel, NS_STUDENT::ID, NS_STUDENT::FULL_NAME, m_resultModel)); + m_resultModel->select(); + + m_quranModel->setTable("QURAN"); + m_quranModel->setSort(NS_QURAN::ID, Qt::AscendingOrder); + m_quranModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_quranModel->setRelation(NS_QURAN::RECITAL_TYPE, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::RECITAL), m_quranModel)); + m_quranModel->setRelation(NS_QURAN::STUDENT, new SqlRelation(m_studentModel, NS_STUDENT::ID, NS_STUDENT::FULL_NAME, m_quranModel)); + m_quranModel->select(); + + m_competitionModel->setTable("COMPETITION"); + m_competitionModel->setSort(NS_COMPETITION::ID, Qt::AscendingOrder); + m_competitionModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_competitionModel->setRelation(NS_COMPETITION::TYPE, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::COMPETITION), m_competitionModel)); + m_competitionModel->select(); + + m_competitorModel->setTable("COMPETITOR"); + m_competitorModel->setSort(NS_COMPETITOR::ID, Qt::AscendingOrder); + m_competitorModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_competitorModel->setRelation(NS_COMPETITOR::COMPETITION, new SqlRelation(m_competitionModel, NS_COMPETITION::ID, NS_COMPETITION::NAME, m_competitorModel)); + m_competitorModel->setRelation(NS_COMPETITOR::STUDENT, new SqlRelation(m_studentModel, NS_STUDENT::ID, NS_STUDENT::FULL_NAME, m_competitorModel)); + m_competitorModel->select(); + + m_jobModel->setTable("JOB"); + m_jobModel->setSort(NS_JOB::ID, Qt::AscendingOrder); + m_jobModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_jobModel->select(); + + m_employeeModel->setTable("EMPLOYEE"); + m_employeeModel->setSort(NS_EMPLOYEE::ID, Qt::AscendingOrder); + m_employeeModel->setEditStrategy(QSqlTableModel::OnFieldChange); + m_employeeModel->setRelation(NS_EMPLOYEE::GENDER, new MapRelation(RscMgr::mapHandler()->map(NS_MAP::GENDER), m_employeeModel)); + m_employeeModel->setRelation(NS_EMPLOYEE::JOB, new SqlRelation(m_jobModel, NS_JOB::ID, NS_JOB::NAME, m_employeeModel)); + m_employeeModel->select(); +} + +void ModelHandler::initializeHeaders() +{ + m_classModel->setHeaderData(NS_CLASS::ID, Qt::Horizontal, tr("ID")); + m_classModel->setHeaderData(NS_CLASS::NAME, Qt::Horizontal, tr("Name")); + m_classModel->setHeaderData(NS_CLASS::LEVEL, Qt::Horizontal, tr("Level")); + + m_courseModel->setHeaderData(NS_COURSE::ID, Qt::Horizontal, tr("ID")); + m_courseModel->setHeaderData(NS_COURSE::NAME, Qt::Horizontal, tr("Name")); + m_courseModel->setHeaderData(NS_COURSE::SEMESTER, Qt::Horizontal, tr("Semester")); + + m_studentModel->setHeaderData(NS_STUDENT::ID, Qt::Horizontal, tr("ID")); + m_studentModel->setHeaderData(NS_STUDENT::FULL_NAME, Qt::Horizontal, tr("Full Name")); + m_studentModel->setHeaderData(NS_STUDENT::FATHER_NAME, Qt::Horizontal, tr("Father Name")); + m_studentModel->setHeaderData(NS_STUDENT::GENDER, Qt::Horizontal, tr("Gender")); + m_studentModel->setHeaderData(NS_STUDENT::BIRTH_PLACE, Qt::Horizontal, tr("Birth Place")); + m_studentModel->setHeaderData(NS_STUDENT::BIRTH_DATE, Qt::Horizontal, tr("Birth Date")); + m_studentModel->setHeaderData(NS_STUDENT::RESIDENCY, Qt::Horizontal, tr("Residency")); + m_studentModel->setHeaderData(NS_STUDENT::NATIONALITY, Qt::Horizontal, tr("Nationality")); + m_studentModel->setHeaderData(NS_STUDENT::NATIONAL_ID, Qt::Horizontal, tr("National Number")); + m_studentModel->setHeaderData(NS_STUDENT::MOBILE, Qt::Horizontal, tr("Mobile")); + m_studentModel->setHeaderData(NS_STUDENT::FATHER_JOB, Qt::Horizontal, tr("Father Job")); + m_studentModel->setHeaderData(NS_STUDENT::LEVEL, Qt::Horizontal, tr("Level")); + m_studentModel->setHeaderData(NS_STUDENT::CLASS, Qt::Horizontal, tr("Class")); + + m_teacherModel->setHeaderData(NS_TEACHER::ID, Qt::Horizontal, tr("ID")); + m_teacherModel->setHeaderData(NS_TEACHER::FULL_NAME, Qt::Horizontal, tr("Full Name")); + m_teacherModel->setHeaderData(NS_TEACHER::FATHER_NAME, Qt::Horizontal, tr("Father Name")); + m_teacherModel->setHeaderData(NS_TEACHER::GENDER, Qt::Horizontal, tr("Gender")); + m_teacherModel->setHeaderData(NS_TEACHER::BIRTH_PLACE, Qt::Horizontal, tr("Birth Place")); + m_teacherModel->setHeaderData(NS_TEACHER::BIRTH_DATE, Qt::Horizontal, tr("Birth Date")); + m_teacherModel->setHeaderData(NS_TEACHER::RESIDENCY, Qt::Horizontal, tr("Residency")); + m_teacherModel->setHeaderData(NS_TEACHER::NATIONALITY, Qt::Horizontal, tr("Nationality")); + m_teacherModel->setHeaderData(NS_TEACHER::NATIONAL_ID, Qt::Horizontal, tr("National Number")); + m_teacherModel->setHeaderData(NS_TEACHER::MOBILE, Qt::Horizontal, tr("Mobile")); + m_teacherModel->setHeaderData(NS_TEACHER::QUALIFICATION, Qt::Horizontal, tr("Qualification")); + m_teacherModel->setHeaderData(NS_TEACHER::EXPERIENCE, Qt::Horizontal, tr("Experience")); + + m_teachingModel->setHeaderData(NS_TEACHING::ID, Qt::Horizontal, tr("ID")); + m_teachingModel->setHeaderData(NS_TEACHING::TEACHER, Qt::Horizontal, tr("Teacher")); + m_teachingModel->setHeaderData(NS_TEACHING::CLASS, Qt::Horizontal, tr("Class")); + m_teachingModel->setHeaderData(NS_TEACHING::COURSE, Qt::Horizontal, tr("Course")); + + m_resultModel->setHeaderData(NS_RESULT::ID, Qt::Horizontal, tr("ID")); + m_resultModel->setHeaderData(NS_RESULT::COURSE, Qt::Horizontal, tr("Course")); + m_resultModel->setHeaderData(NS_RESULT::STUDENT, Qt::Horizontal, tr("Student")); + m_resultModel->setHeaderData(NS_RESULT::RESULT, Qt::Horizontal, tr("Result")); + + m_quranModel->setHeaderData(NS_QURAN::ID, Qt::Horizontal, tr("ID")); + m_quranModel->setHeaderData(NS_QURAN::STUDENT, Qt::Horizontal, tr("Student")); + m_quranModel->setHeaderData(NS_QURAN::RECITAL_TYPE, Qt::Horizontal, tr("Recital Type")); + m_quranModel->setHeaderData(NS_QURAN::FROM_PAGE, Qt::Horizontal, tr("From Page")); + m_quranModel->setHeaderData(NS_QURAN::TO_PAGE, Qt::Horizontal, tr("To Page")); + m_quranModel->setHeaderData(NS_QURAN::DATE, Qt::Horizontal, tr("Date")); + + m_competitionModel->setHeaderData(NS_COMPETITION::ID, Qt::Horizontal, tr("ID")); + m_competitionModel->setHeaderData(NS_COMPETITION::NAME, Qt::Horizontal, tr("Name")); + m_competitionModel->setHeaderData(NS_COMPETITION::TYPE, Qt::Horizontal, tr("Type")); + m_competitionModel->setHeaderData(NS_COMPETITION::PARTS, Qt::Horizontal, tr("Part(s)")); + m_competitionModel->setHeaderData(NS_COMPETITION::DATE, Qt::Horizontal, tr("Date")); + + m_competitorModel->setHeaderData(NS_COMPETITOR::ID, Qt::Horizontal, tr("ID")); + m_competitorModel->setHeaderData(NS_COMPETITOR::COMPETITION, Qt::Horizontal, tr("Competition")); + m_competitorModel->setHeaderData(NS_COMPETITOR::STUDENT, Qt::Horizontal, tr("Student")); + m_competitorModel->setHeaderData(NS_COMPETITOR::RANK, Qt::Horizontal, tr("Rank")); + + m_jobModel->setHeaderData(NS_JOB::ID, Qt::Horizontal, tr("ID")); + m_jobModel->setHeaderData(NS_JOB::NAME, Qt::Horizontal, tr("Name")); + + m_employeeModel->setHeaderData(NS_EMPLOYEE::ID, Qt::Horizontal, tr("ID")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::FULL_NAME, Qt::Horizontal, tr("Full Name")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::FATHER_NAME, Qt::Horizontal, tr("Father Name")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::GENDER, Qt::Horizontal, tr("Gender")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::BIRTH_PLACE, Qt::Horizontal, tr("Birth Place")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::BIRTH_DATE, Qt::Horizontal, tr("Birth Date")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::RESIDENCY, Qt::Horizontal, tr("Residency")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::NATIONALITY, Qt::Horizontal, tr("Nationality")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::NATIONAL_ID, Qt::Horizontal, tr("National Number")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::MOBILE, Qt::Horizontal, tr("Mobile")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::JOB, Qt::Horizontal, tr("Job")); + m_employeeModel->setHeaderData(NS_EMPLOYEE::OTHER_JOB, Qt::Horizontal, tr("Other Job")); +} + +void ModelHandler::initializePreviewModel() +{ + for (int column = 0; column < m_previewModel->columnCount(); ++column) { + m_previewModel->setHeaderData(column, Qt::Horizontal, tr("Header") + QString("%1").arg(column + 1)); + } + + for (int row = 0; row < m_previewModel->rowCount(); ++row) { + for (int column = 0; column < m_previewModel->columnCount(); ++column) { + QStandardItem *item = new QStandardItem(tr("Cell") + QString("%1%2").arg(column + 1).arg(row + 1)); + m_previewModel->setItem(row, column, item); + } + } +} + +void ModelHandler::mapModels() +{ + m_modelMap.clear(); + m_modelMap.insert(NS_TABLE::CLASS, m_classModel); + m_modelMap.insert(NS_TABLE::COURSE, m_courseModel); + m_modelMap.insert(NS_TABLE::STUDENT, m_studentModel); + m_modelMap.insert(NS_TABLE::TEACHER, m_teacherModel); + m_modelMap.insert(NS_TABLE::TEACHING, m_teachingModel); + m_modelMap.insert(NS_TABLE::RESULT, m_resultModel); + m_modelMap.insert(NS_TABLE::QURAN, m_quranModel); + m_modelMap.insert(NS_TABLE::COMPETITION, m_competitionModel); + m_modelMap.insert(NS_TABLE::COMPETITOR, m_competitorModel); + m_modelMap.insert(NS_TABLE::JOB, m_jobModel); + m_modelMap.insert(NS_TABLE::EMPLOYEE, m_employeeModel); +} + +void ModelHandler::reset() +{ + foreach (RichSqlModel *model, m_modelMap.values()) { + //To use the new database connection, we reset the table name. + model->setTable(model->tableName()); + model->select(); + } + + initializeHeaders(); +} + +QSqlTableModel *ModelHandler::model(NS_TABLE::TABLE table) const +{ + return m_modelMap.value(table, NULL); +} + +QStandardItemModel *ModelHandler::previewModel() const +{ + return m_previewModel; +} + +void ModelHandler::insertRow(NS_TABLE::TABLE table, const QMap &map) const +{ + QSqlTableModel *m = model(table); + + m->insertRow(0); + m->setData(m->index(0, 0), newRowId(m)); + + foreach (const QVariant &value, map) + m->setData(m->index(0, map.key(value)), value); + + m->submit(); +} + +long long ModelHandler::newRowId(const QSqlTableModel *model) const +{ + QSqlQuery qry(QString("SELECT MAX(ID) FROM %1 ;").arg(model->tableName()), model->database()); + qry.exec(); + qry.next(); + + return qry.value(0).toLongLong() + 1; +} + +void ModelHandler::removeRow(NS_TABLE::TABLE table, int row) const +{ + QSqlTableModel *m = model(table); + + m->removeRow(row); + m->submit(); + m->select(); +} diff --git a/handlers/modelhandler.h b/handlers/modelhandler.h new file mode 100644 index 0000000..62d040b --- /dev/null +++ b/handlers/modelhandler.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef MODELHANDLER_H +#define MODELHANDLER_H + +#include +#include +#include +#include +#include + +#include "sqlenumeration.h" + +class RichSqlModel; + +class ModelHandler : public QObject +{ + Q_OBJECT + +public: + static ModelHandler *singleton(); + + QSqlTableModel *model(NS_TABLE::TABLE) const; + + QStandardItemModel *previewModel() const; + + void insertRow(NS_TABLE::TABLE table, const QMap &map = QMap()) const; + + void removeRow(NS_TABLE::TABLE table, int row) const; + + long long newRowId(const QSqlTableModel *model) const; + +private slots: + void initializeModels(); + void initializeHeaders(); + void initializePreviewModel(); + + void mapModels(); + void reset(); + +private: + explicit ModelHandler(QObject *parent = 0); + + RichSqlModel *m_classModel; + RichSqlModel *m_courseModel; + RichSqlModel *m_studentModel; + RichSqlModel *m_teacherModel; + RichSqlModel *m_teachingModel; + RichSqlModel *m_resultModel; + RichSqlModel *m_quranModel; + RichSqlModel *m_competitionModel; + RichSqlModel *m_competitorModel; + RichSqlModel *m_jobModel; + RichSqlModel *m_employeeModel; + + QStandardItemModel *m_previewModel; + + QMap m_modelMap; +}; + +#endif // MODELHANDLER_H diff --git a/handlers/printerhandler.cpp b/handlers/printerhandler.cpp new file mode 100644 index 0000000..dc9b6a1 --- /dev/null +++ b/handlers/printerhandler.cpp @@ -0,0 +1,237 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "printerhandler.h" + +#include "printoption.h" +#include "resourcemanager.h" + +#include +#include +#include +#include +#include + +PrinterHandler::PrinterHandler(QObject *parent) : + QObject(parent) +{ + initialize(); + + connect(RscMgr::settingHandler(), SIGNAL(settingChanged()), SLOT(initialize())); +} + +PrinterHandler *PrinterHandler::singleton() +{ + static PrinterHandler *printerHandler = NULL; + + if (!printerHandler) + printerHandler = new PrinterHandler(qApp); + + return printerHandler; +} + +QPrinter *PrinterHandler::nativePrinter() +{ + return &m_nativePrinter; +} + +QPrinter *PrinterHandler::previewPrinter() +{ + return &m_previewPrinter; +} + +QPrinter *PrinterHandler::settingPreviewPrinter() +{ + return &m_settingPreviewPrinter; +} + +void PrinterHandler::initialize() +{ + m_nativePrinter.setOutputFormat(QPrinter::NativeFormat); + m_nativePrinter.setPaperSize(RscMgr::settingHandler()->printerPageSize()); + m_nativePrinter.setOrientation(RscMgr::settingHandler()->printerOrientation()); + m_nativePrinter.setColorMode(RscMgr::settingHandler()->printerColorMode()); + m_nativePrinter.setPageMargins(RscMgr::settingHandler()->printerLeftMargin(), + RscMgr::settingHandler()->printerTopMargin(), + RscMgr::settingHandler()->printerRightMargin(), + RscMgr::settingHandler()->printerBottomMargin(), + QPrinter::Millimeter); + + m_previewPrinter.setOutputFormat(QPrinter::PdfFormat); + m_previewPrinter.setPaperSize(RscMgr::settingHandler()->printerPageSize()); + m_previewPrinter.setOrientation(RscMgr::settingHandler()->printerOrientation()); + m_previewPrinter.setColorMode(RscMgr::settingHandler()->printerColorMode()); + m_previewPrinter.setPageMargins(RscMgr::settingHandler()->printerLeftMargin(), + RscMgr::settingHandler()->printerTopMargin(), + RscMgr::settingHandler()->printerRightMargin(), + RscMgr::settingHandler()->printerBottomMargin(), + QPrinter::Millimeter); + + m_settingPreviewPrinter.setOutputFormat(QPrinter::PdfFormat); + m_settingPreviewPrinter.setPaperSize(RscMgr::settingHandler()->printerPageSize()); + m_settingPreviewPrinter.setOrientation(RscMgr::settingHandler()->printerOrientation()); + m_settingPreviewPrinter.setColorMode(RscMgr::settingHandler()->printerColorMode()); + m_settingPreviewPrinter.setPageMargins(RscMgr::settingHandler()->printerLeftMargin(), + RscMgr::settingHandler()->printerTopMargin(), + RscMgr::settingHandler()->printerRightMargin(), + RscMgr::settingHandler()->printerBottomMargin(), + QPrinter::Millimeter); +} + +void PrinterHandler::print(QAbstractItemModel *model, + PrintOption *printOption, + QPrinter *printer) +{ + QTextDocument doc; + doc.setDocumentMargin(1); + doc.setTextWidth(printer->pageRect().width()); + doc.setPageSize(printer->pageRect().size()); + doc.setDefaultTextOption(QTextOption(RscMgr::dir() == Qt::RightToLeft ? Qt::AlignRight : Qt::AlignLeft)); + + QTextCursor curser(&doc); + + if (RscMgr::settingHandler()->headerType() == NS_HeaderType::Image) { + + QTextImageFormat textImageFormat; + textImageFormat.setName(RscMgr::settingHandler()->headerImagePath()); + textImageFormat.setWidth(RscMgr::settingHandler()->headerWidth()); + textImageFormat.setHeight(RscMgr::settingHandler()->headerHeight()); + + QTextBlockFormat textBlockFormat; + textBlockFormat.setAlignment(RscMgr::settingHandler()->headerAlignment()); + + curser.setBlockFormat(textBlockFormat); + + curser.insertImage(textImageFormat); + + curser.insertBlock(); + curser.setBlockFormat(QTextBlockFormat()); + } + + curser.insertHtml(printOption->preamble()); + + QTextTableFormat tableFormat; + tableFormat.setAlignment(Qt::AlignCenter); + tableFormat.setBorder(1); + tableFormat.setBorderBrush(Qt::lightGray); + tableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Double); + tableFormat.setCellPadding(3); + tableFormat.setCellSpacing(1); + tableFormat.setMargin(3); + tableFormat.setWidth(doc.textWidth()); + tableFormat.setHeaderRowCount(1); + + //the addition by one is for the vertical header. + const int tableColumnCount = model->columnCount() - printOption->hiddenColumnCount() + 1; + + QVector textLengthVector(tableColumnCount); + textLengthVector.replace(RscMgr::dir() == Qt::RightToLeft ? tableColumnCount - 1 : 0, QTextLength(QTextLength::PercentageLength, 5)); + tableFormat.setColumnWidthConstraints(textLengthVector); + + QTextTable *textTable = curser.insertTable(1, tableColumnCount, tableFormat); + + QTextCharFormat cornerCellFormat; + cornerCellFormat.setBackground(Qt::black); + + QTextCharFormat headerCellFormat; + headerCellFormat.setBackground(Qt::darkGray); + headerCellFormat.setForeground(Qt::white); + headerCellFormat.setFontFamily(RscMgr::settingHandler()->tableFontFamily()); + headerCellFormat.setFontPointSize(RscMgr::settingHandler()->tableFontSize().toInt() + 4); + + QTextCharFormat sectionCellFormat; + sectionCellFormat.setBackground(Qt::lightGray); + sectionCellFormat.setForeground(Qt::white); + sectionCellFormat.setFontFamily(RscMgr::settingHandler()->tableFontFamily()); + sectionCellFormat.setFontPointSize(RscMgr::settingHandler()->tableFontSize().toInt() + 2); + + QTextCharFormat tableCellFormat; + tableCellFormat.setFontFamily(RscMgr::settingHandler()->tableFontFamily()); + tableCellFormat.setFontPointSize(RscMgr::settingHandler()->tableFontSize().toInt()); + tableCellFormat.setForeground(QColor(RscMgr::settingHandler()->tableFontColor())); + + //filling the corner in black + if (RscMgr::dir() == Qt::RightToLeft) + textTable->cellAt(0, textTable->columns() - 1).setFormat(cornerCellFormat); + else + textTable->cellAt(0, 0).setFormat(cornerCellFormat); + + // textTable column index, beginning at 1 due to the existence of id column + int y = 1; + for (int j = 0; j < model->columnCount(); ++j) { + if (printOption->isColumnHidden(j)) + continue; + + QTextTableCell cell = textTable->cellAt(0, RscMgr::dir() == Qt::RightToLeft ? textTable->columns() - y - 1 : y); + cell.setFormat(headerCellFormat); + cell.firstCursorPosition().insertText(model->headerData(j, Qt::Horizontal).toString()); + ++y; + } + + if (printOption->currentAggregativeColumn() >= 0) + model->sort(printOption->currentAggregativeColumn(), Qt::AscendingOrder); + else + model->sort(0, Qt::AscendingOrder); + + QVariant lastValue; + for (int i = 0, x = 1; i < model->rowCount(); ++i, ++x) { + if (printOption->isRowHidden(model->index(i, 0).data().toInt())) { + --x; + continue; + } + + if (printOption->currentAggregativeColumn() >= 0) { + const QString &entry = model->index(i, printOption->currentAggregativeColumn()).data().toString(); + if (lastValue != entry) { + if (printOption->isAggregationEntryHidden(entry)) { + --x; + continue; + } + + lastValue = entry; + textTable->insertRows(x, 1); + textTable->mergeCells(x, 0, 1, textTable->columns()); + textTable->cellAt(x, 0).setFormat(sectionCellFormat); + textTable->cellAt(x, 0).firstCursorPosition().insertText(lastValue.toString()); + ++x; + } + } + + textTable->insertRows(x, 1); + QTextTableCell cell = textTable->cellAt(x, RscMgr::dir() == Qt::RightToLeft ? textTable->columns() - 1 : 0); + cell.setFormat(headerCellFormat); + cell.firstCursorPosition().insertText(model->headerData(i, Qt::Vertical).toString()); + + int y = 1; //textTable column index. + for (int j = 0; j < model->columnCount(); ++j) { + if (printOption->isColumnHidden(j)) + continue; + + + textTable->cellAt(x, RscMgr::dir() == Qt::RightToLeft ? textTable->columns() - y - 1 : y) + .firstCursorPosition() + .insertText(model->index(i, j).data().toString(), tableCellFormat); + ++y; + } + } + + curser.movePosition(QTextCursor::End); + curser.insertBlock(); + + curser.insertHtml(printOption->commentary()); + + doc.print(printer); +} diff --git a/handlers/printerhandler.h b/handlers/printerhandler.h new file mode 100644 index 0000000..d015383 --- /dev/null +++ b/handlers/printerhandler.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef PRINTERHANDLER_H +#define PRINTERHANDLER_H + +#include +#include + +class QAbstractItemModel; + +class PrintOption; + +class PrinterHandler : public QObject +{ + Q_OBJECT + +public: + explicit PrinterHandler(QObject *parent = 0); + + static PrinterHandler *singleton(); + + QPrinter *nativePrinter(); + + QPrinter *previewPrinter(); + + QPrinter *settingPreviewPrinter(); + + static void print(QAbstractItemModel *model, PrintOption *printOption, QPrinter *printer); + +private slots: + void initialize(); + +private: + QPrinter m_nativePrinter; + QPrinter m_previewPrinter; + QPrinter m_settingPreviewPrinter; +}; + +#endif // PRINTERHANDLER_H diff --git a/handlers/settinghandler.cpp b/handlers/settinghandler.cpp new file mode 100644 index 0000000..fdb7c2c --- /dev/null +++ b/handlers/settinghandler.cpp @@ -0,0 +1,339 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "settinghandler.h" + +#include "settingenumeration.h" +#include "resourcemanager.h" + +#include + +SettingHandler::SettingHandler(QObject *parent) : + QObject(parent) +{ + m_map.insert(NS_Setting::InterfaceLanguage, "app/language"); + + m_map.insert(NS_Setting::DatabasePath, "database/path"); + + m_map.insert(NS_Setting::PrinterName, "printer/name"); + m_map.insert(NS_Setting::PrinterPaperSize, "printer/paper-size"); + m_map.insert(NS_Setting::PrinterColorMode, "printer/color-mode"); + m_map.insert(NS_Setting::PrinterOrientation, "printer/orientation"); + m_map.insert(NS_Setting::PrinterLeftMargin, "report/margin-left"); + m_map.insert(NS_Setting::PrinterTopMargin, "report/margin-top"); + m_map.insert(NS_Setting::PrinterRightMargin, "report/margin-right"); + m_map.insert(NS_Setting::PrinterBottomMargin, "report/margin-bottom"); + + m_map.insert(NS_Setting::HeaderType, "report/header-type"); + m_map.insert(NS_Setting::HeaderImagePath, "report/header-path"); + m_map.insert(NS_Setting::HeaderWidth, "report/header-width"); + m_map.insert(NS_Setting::HeaderHeight, "report/header-height"); + m_map.insert(NS_Setting::HeaderAlignment, "report/header-alignment"); + + m_map.insert(NS_Setting::PreambleFontFamily, "report/preamble/font-family"); + m_map.insert(NS_Setting::PreambleFontSize, "report/preamble/font-size"); + m_map.insert(NS_Setting::PreambleFontColor, "report/preamble/font-color"); + + m_map.insert(NS_Setting::CommentaryFontFamily, "report/commentary/font-family"); + m_map.insert(NS_Setting::CommentaryFontSize, "report/commentary/font-size"); + m_map.insert(NS_Setting::CommentaryFontColor, "report/commentary/font-color"); + + m_map.insert(NS_Setting::TableFontFamily, "report/table/font-family"); + m_map.insert(NS_Setting::TableFontSize, "report/table/font-size"); + m_map.insert(NS_Setting::TableFontColor, "report/table/-font-color"); +} + +SettingHandler *SettingHandler::singleton() +{ + static SettingHandler *settingHandler = NULL; + + if (!settingHandler) + settingHandler = new SettingHandler(qApp); + + return settingHandler; +} + +void SettingHandler::setValue(NS_Setting::SettingEntry key, const QVariant &value) +{ + m_settings.setValue(m_map.value(key), value); + + emit settingChanged(); +} + +QVariant SettingHandler::value(NS_Setting::SettingEntry key, const QVariant &defaultValue) const +{ + return m_settings.value(m_map.value(key), defaultValue); +} + +void SettingHandler::setInterfaceLanguage(int lang) +{ + setValue(NS_Setting::InterfaceLanguage, lang); +} + +NS_Language::Language SettingHandler::interfaceLanguage() const +{ + return static_cast(value(NS_Setting::InterfaceLanguage, NS_Language::Arabic).toInt()); +} + +void SettingHandler::setDatabasePath(const QString &path) +{ + setValue(NS_Setting::DatabasePath, path); +} + +QString SettingHandler::databasePath() const +{ + return value(NS_Setting::DatabasePath, "./data.fdb").toString(); +} + +void SettingHandler::setPrinterName(const QString &name) +{ + setValue(NS_Setting::PrinterName, name); +} + +QString SettingHandler::printerName() const +{ + return value(NS_Setting::PrinterName, QString()).toString(); +} + +void SettingHandler::setPrinterPageSize(int size) +{ + setValue(NS_Setting::PrinterPaperSize, size); +} + +QPrinter::PageSize SettingHandler::printerPageSize() const +{ + return static_cast(value(NS_Setting::PrinterPaperSize, QPrinter::A4).toInt()); +} + +void SettingHandler::setPrinterOrientation(int orientation) +{ + setValue(NS_Setting::PrinterOrientation, orientation); +} + +QPrinter::Orientation SettingHandler::printerOrientation() const +{ + return static_cast(value(NS_Setting::PrinterOrientation, QPrinter::Portrait).toInt()); +} + +void SettingHandler::setPrinterColorMode(int mode) +{ + setValue(NS_Setting::PrinterColorMode, mode); +} + +QPrinter::ColorMode SettingHandler::printerColorMode() const +{ + return static_cast(value(NS_Setting::PrinterColorMode, QPrinter::Color).toInt()); +} + +void SettingHandler::setPrinterLeftMargin(int margin) +{ + setValue(NS_Setting::PrinterLeftMargin, margin); +} + +int SettingHandler::printerLeftMargin() const +{ + return value(NS_Setting::PrinterLeftMargin, 0).toInt(); +} + +void SettingHandler::setPrinterTopMargin(int margin) +{ + setValue(NS_Setting::PrinterTopMargin, margin); +} + +int SettingHandler::printerTopMargin() const +{ + return value(NS_Setting::PrinterTopMargin, 0).toInt(); +} + +void SettingHandler::setPrinterRightMargin(int margin) +{ + setValue(NS_Setting::PrinterRightMargin, margin); +} + +int SettingHandler::printerRightMargin() const +{ + return value(NS_Setting::PrinterRightMargin, 0).toInt(); +} + +void SettingHandler::setPrinterBottomMargin(int margin) +{ + setValue(NS_Setting::PrinterBottomMargin, margin); +} + +int SettingHandler::printerBottomMargin() const +{ + return value(NS_Setting::PrinterBottomMargin, 0).toInt(); +} + +void SettingHandler::setHeaderType(int type) +{ + setValue(NS_Setting::HeaderType, type); +} + +NS_HeaderType::HeaderType SettingHandler::headerType() const +{ + return static_cast(value(NS_Setting::HeaderType, NS_HeaderType::None).toInt()); +} + +void SettingHandler::setHeaderImagePath(const QString &path) +{ + setValue(NS_Setting::HeaderImagePath, path); +} + +QString SettingHandler::headerImagePath() const +{ + return value(NS_Setting::HeaderImagePath, QString("...")).toString(); +} + +void SettingHandler::setHeaderWidth(int width) +{ + setHeaderWidthMM(double(width) / RscMgr::printHandler()->previewPrinter()->width() * RscMgr::printHandler()->previewPrinter()->widthMM()); +} + +int SettingHandler::headerWidth() const +{ + return double(headerWidthMM()) / RscMgr::printHandler()->previewPrinter()->widthMM() * RscMgr::printHandler()->previewPrinter()->width(); +} + +void SettingHandler::setHeaderHeight(int height) +{ + setHeaderHeightMM(double(height) / RscMgr::printHandler()->previewPrinter()->height() * RscMgr::printHandler()->previewPrinter()->heightMM()); +} + +int SettingHandler::headerHeight() const +{ + return double(headerHeightMM()) / RscMgr::printHandler()->previewPrinter()->heightMM() * RscMgr::printHandler()->previewPrinter()->height(); +} + +void SettingHandler::setHeaderWidthMM(int width) +{ + setValue(NS_Setting::HeaderWidth, width); +} + +int SettingHandler::headerWidthMM() const +{ + return value(NS_Setting::HeaderWidth, 50).toInt(); +} + +void SettingHandler::setHeaderHeightMM(int height) +{ + setValue(NS_Setting::HeaderHeight, height); +} + +int SettingHandler::headerHeightMM() const +{ + return value(NS_Setting::HeaderHeight, 20).toInt(); +} + +void SettingHandler::setHeaderAlignment(int align) +{ + setValue(NS_Setting::HeaderAlignment, align); +} + +Qt::Alignment SettingHandler::headerAlignment() const +{ + return static_cast(value(NS_Setting::HeaderAlignment, Qt::AlignHCenter).toInt()); +} + +void SettingHandler::setPreambleFontFamily(const QString &fontFamily) +{ + setValue(NS_Setting::PreambleFontFamily, fontFamily); +} + +QString SettingHandler::preambleFontFamily() const +{ + return value(NS_Setting::PreambleFontFamily, "sakkal majalla").toString(); +} + +void SettingHandler::setPreambleFontSize(const QString &fontSize) +{ + setValue(NS_Setting::PreambleFontSize, fontSize); +} + +QString SettingHandler::preambleFontSize() const +{ + return value(NS_Setting::PreambleFontSize, "14").toString(); +} + +void SettingHandler::setPreambleFontColor(const QString &fontColor) +{ + setValue(NS_Setting::PreambleFontColor, fontColor); +} + +QString SettingHandler::preambleFontColor() const +{ + return value(NS_Setting::PreambleFontColor, QColor(Qt::black).name(QColor::HexRgb)).toString(); +} + +void SettingHandler::setCommentaryFontFamily(const QString &fontFamily) +{ + setValue(NS_Setting::CommentaryFontFamily, fontFamily); +} + +QString SettingHandler::commentaryFontFamily() const +{ + return value(NS_Setting::CommentaryFontFamily, "sakkal majalla").toString(); +} + +void SettingHandler::setCommentaryFontSize(const QString &fontSize) +{ + setValue(NS_Setting::CommentaryFontSize, fontSize); +} + +QString SettingHandler::commentaryFontSize() const +{ + return value(NS_Setting::CommentaryFontSize, "14").toString(); +} + +void SettingHandler::setCommentaryFontColor(const QString &fontColor) +{ + setValue(NS_Setting::CommentaryFontColor, fontColor); +} + +QString SettingHandler::commentaryFontColor() const +{ + return value(NS_Setting::CommentaryFontColor, QColor(Qt::black).name(QColor::HexRgb)).toString(); +} + +void SettingHandler::setTableFontFamily(const QString &fontFamily) +{ + setValue(NS_Setting::TableFontFamily, fontFamily); +} + +QString SettingHandler::tableFontFamily() const +{ + return value(NS_Setting::TableFontFamily, "sakkal majalla").toString(); +} + +void SettingHandler::setTableFontSize(const QString &fontSize) +{ + setValue(NS_Setting::TableFontSize, fontSize); +} + +QString SettingHandler::tableFontSize() const +{ + return value(NS_Setting::TableFontSize, "14").toString(); +} + +void SettingHandler::setTableFontColor(const QString &fontColor) +{ + setValue(NS_Setting::TableFontColor, fontColor); +} + +QString SettingHandler::tableFontColor() const +{ + return value(NS_Setting::TableFontColor, QColor(Qt::black).name(QColor::HexRgb)).toString(); +} diff --git a/handlers/settinghandler.h b/handlers/settinghandler.h new file mode 100644 index 0000000..0c208e1 --- /dev/null +++ b/handlers/settinghandler.h @@ -0,0 +1,126 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef SETTINGHANDLER_H +#define SETTINGHANDLER_H + +#include +#include +#include + +#include "generalenumeration.h" +#include "settingenumeration.h" + +class SettingHandler : public QObject +{ + Q_OBJECT + +public: + static SettingHandler *singleton(); + +public slots: + void setDatabasePath(const QString &); + QString databasePath() const; + + void setInterfaceLanguage(int); + NS_Language::Language interfaceLanguage() const; + + void setPrinterName(const QString &); + QString printerName() const; + + void setPrinterPageSize(int); + QPrinter::PageSize printerPageSize() const; + + void setPrinterOrientation(int); + QPrinter::Orientation printerOrientation() const; + + void setPrinterColorMode(int); + QPrinter::ColorMode printerColorMode() const; + + void setPrinterTopMargin(int); + int printerTopMargin() const; + + void setPrinterBottomMargin(int); + int printerBottomMargin() const; + + void setPrinterRightMargin(int); + int printerRightMargin() const; + + void setPrinterLeftMargin(int); + int printerLeftMargin() const; + + void setHeaderType(int); + NS_HeaderType::HeaderType headerType() const; + + void setHeaderImagePath(const QString &); + QString headerImagePath() const; + + void setHeaderWidth(int); + int headerWidth() const; + + void setHeaderHeight(int); + int headerHeight() const; + + void setHeaderWidthMM(int); + int headerWidthMM() const; + + void setHeaderHeightMM(int); + int headerHeightMM() const; + + void setHeaderAlignment(int); + Qt::Alignment headerAlignment() const; + + void setPreambleFontFamily(const QString &); + QString preambleFontFamily() const; + + void setPreambleFontSize(const QString &); + QString preambleFontSize() const; + + void setPreambleFontColor(const QString &); + QString preambleFontColor() const; + + void setCommentaryFontFamily(const QString &); + QString commentaryFontFamily() const; + + void setCommentaryFontSize(const QString &); + QString commentaryFontSize() const; + + void setCommentaryFontColor(const QString &); + QString commentaryFontColor() const; + + void setTableFontFamily(const QString &); + QString tableFontFamily() const; + + void setTableFontSize(const QString &); + QString tableFontSize() const; + + void setTableFontColor(const QString &); + QString tableFontColor() const; + +signals: + void settingChanged(); + +private: + explicit SettingHandler(QObject *parent = 0); + + void setValue(NS_Setting::SettingEntry key, const QVariant &value); + QVariant value(NS_Setting::SettingEntry key, const QVariant &defaultValue = QVariant()) const; + + QMap m_map; + QSettings m_settings; +}; + +#endif // SETTINGHANDLER_H diff --git a/handlers/translatorhandler.cpp b/handlers/translatorhandler.cpp new file mode 100644 index 0000000..2165921 --- /dev/null +++ b/handlers/translatorhandler.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "translatorhandler.h" + +#include "resourcemanager.h" + +#include + +TranslatorHandler::TranslatorHandler(QObject *parent) : + QObject(parent), + m_translator(new QTranslator(this)) +{ + qApp->installTranslator(m_translator); +} + +TranslatorHandler *TranslatorHandler::singleton() +{ + static TranslatorHandler *translatorHandler = NULL; + + if (!translatorHandler) + translatorHandler = new TranslatorHandler(qApp); + + return translatorHandler; +} + +void TranslatorHandler::translate(NS_Language::Language lang) +{ + switch (lang) { + case NS_Language::Arabic: + m_translator->load("ar"); + break; + case NS_Language::English: + m_translator->load("en"); + break; + default: + break; + } + + emit languageChanged(); +} diff --git a/handlers/translatorhandler.h b/handlers/translatorhandler.h new file mode 100644 index 0000000..0393bd7 --- /dev/null +++ b/handlers/translatorhandler.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef TRANSLATORHANDLER_H +#define TRANSLATORHANDLER_H + +#include +#include + +#include "generalenumeration.h" + +class TranslatorHandler : public QObject +{ + Q_OBJECT + +public: + static TranslatorHandler *singleton(); + + void translate(NS_Language::Language); + +signals: + void languageChanged() const; + +private: + explicit TranslatorHandler(QObject *parent = 0); + + QTranslator *m_translator; +}; + +#endif // TRANSLATORHANDLER_H diff --git a/installer.nsi b/installer.nsi new file mode 100644 index 0000000..4b44069 --- /dev/null +++ b/installer.nsi @@ -0,0 +1,175 @@ +;Furqan Installer +;-------------------------------- +;Include Modern UI + + !include "MUI2.nsh" + +;-------------------------------- +;General + + ;Name and file + Name "Furqan" + OutFile "Furqan v1.0.0.exe" + + ;Default installation folder + InstallDir "D:\Furqan" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\ShamSoft\Furqan" "" + + ;Request application privileges for Windows Vista + RequestExecutionLevel admin + +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + +;-------------------------------- +;Language Selection Dialog Settings + + ;Remember the installer language + !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" + !define MUI_LANGDLL_REGISTRY_KEY "Software\ShamSoft\Furqan" + !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_LICENSE "license.txt" + !insertmacro MUI_PAGE_DIRECTORY + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "ARABIC" ;first language is the default language + !insertmacro MUI_LANGUAGE "ENGLISH" + +;-------------------------------- +;Reserve Files + + ;If you are using solid compression, files that are required before + ;the actual installation should be stored first in the data block, + ;because this will make your installer start faster. + + !insertmacro MUI_RESERVEFILE_LANGDLL + +;-------------------------------- +;Installer Sections + +Section Sec + + SetOutPath "$INSTDIR" + + ;ADD YOUR OWN FILES HERE... + + CreateDirectory $INSTDIR\intl + SetOutPath $INSTDIR\intl + File "intl\fbintl.conf" + File "intl\fbintl.dll" + + CreateDirectory $INSTDIR\platforms + SetOutPath $INSTDIR\platforms + File "platforms\qwindows.dll" + + CreateDirectory $INSTDIR\sqldrivers + SetOutPath $INSTDIR\sqldrivers + File "sqldrivers\qsqlibase.dll" + + CreateDirectory $INSTDIR\printsupport + SetOutPath $INSTDIR\printsupport + File "printsupport\windowsprintersupport.dll" + + SetOutPath $INSTDIR + + ; Put files there + + File "Furqan.exe" + File "ar.qm" + File "en.qm" + File "license.txt" + File "data.fdb" + File "fbclient.dll" + File "firebird.msg" + File "ib_util.dll" + File "icudt30.dll" + File "icudt52.dll" + File "icuin30.dll" + File "icuin52.dll" + File "icuuc30.dll" + File "icuuc52.dll" + File "libgcc_s_dw2-1.dll" + File "libGLESv2.dll" + File "libstdc++-6.dll" + File "libwinpthread-1.dll" + File "Microsoft.VC80.CRT.manifest" + File "msvcp80.dll" + File "msvcr80.dll" + File "Qt5Core.dll" + File "Qt5Gui.dll" + File "Qt5PrintSupport.dll" + File "Qt5Sql.dll" + File "Qt5Widgets.dll" + + ;Store installation folder + WriteRegStr HKCU "Software\ShamSoft\Furqan" "" $INSTDIR + + ;Add an entry to Add/Remove Programs. + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Furqan" "DisplayName" "Furqan v1.0.0" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Furqan" "UninstallString" '"$INSTDIR\uninstall.exe"' + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Furqan" "NoModify" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Furqan" "NoRepair" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Furqan" "VersionMajor" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Furqan" "VersionMinor" 0 + + ;Create uninstaller + WriteUninstaller "$INSTDIR\uninstall.exe" + + CreateDirectory "$SMPROGRAMS\Furqan" + CreateShortCut "$SMPROGRAMS\Furqan\uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 + CreateShortCut "$SMPROGRAMS\Furqan\Furqan v1.0.0.lnk" "$INSTDIR\Furqan.exe" "" "$INSTDIR\Furqan.exe" 0 + CreateShortCut "$DESKTOP\Furqan v1.0.0.lnk" "$INSTDIR\Furqan.exe" "" "$INSTDIR\Furqan.exe" 0 + +SectionEnd + +;-------------------------------- +;Installer Functions + +Function .onInit + + !insertmacro MUI_LANGDLL_DISPLAY + +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ; Deleting the program's files and directories + + RMDir /r "$INSTDIR" + + DeleteRegKey /ifempty HKCU "Software\ShamSoft\Furqan" + + ; Remove shortcuts, if any + Delete "$SMPROGRAMS\Furqan\*.*" + Delete "$DESKTOP\Furqan v1.0.0.lnk" + + ; Remove the program's entry from add/remove programs. + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Furqan" + +SectionEnd + +;-------------------------------- +;Uninstaller Functions + +Function un.onInit + + !insertmacro MUI_UNGETLANGUAGE + +FunctionEnd \ No newline at end of file diff --git a/interfaces/classwidget.ui b/interfaces/classwidget.ui new file mode 100644 index 0000000..9c0a6e9 --- /dev/null +++ b/interfaces/classwidget.ui @@ -0,0 +1,40 @@ + + + ClassWidget + + + + 0 + 0 + 256 + 192 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QAbstractItemView::SingleSelection + + + + + + + + diff --git a/interfaces/competitionwidget.ui b/interfaces/competitionwidget.ui new file mode 100644 index 0000000..01de7c6 --- /dev/null +++ b/interfaces/competitionwidget.ui @@ -0,0 +1,40 @@ + + + CompetitionWidget + + + + 0 + 0 + 256 + 192 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QAbstractItemView::SingleSelection + + + + + + + + diff --git a/interfaces/competitorwidget.ui b/interfaces/competitorwidget.ui new file mode 100644 index 0000000..4567061 --- /dev/null +++ b/interfaces/competitorwidget.ui @@ -0,0 +1,91 @@ + + + CompetitorWidget + + + + 0 + 0 + 524 + 215 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Competition + + + + + + + + 0 + 0 + + + + QAbstractItemView::NoEditTriggers + + + false + + + QAbstractItemView::SelectRows + + + + + + + + + + + Competitor + + + + + + + Qt::StrongFocus + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + + + diff --git a/interfaces/coursewidget.ui b/interfaces/coursewidget.ui new file mode 100644 index 0000000..d172dad --- /dev/null +++ b/interfaces/coursewidget.ui @@ -0,0 +1,40 @@ + + + CourseWidget + + + + 0 + 0 + 256 + 192 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QAbstractItemView::SingleSelection + + + + + + + + diff --git a/interfaces/employeewidget.ui b/interfaces/employeewidget.ui new file mode 100644 index 0000000..842e7aa --- /dev/null +++ b/interfaces/employeewidget.ui @@ -0,0 +1,91 @@ + + + EmployeeWidget + + + + 0 + 0 + 524 + 215 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Job + + + + + + + + 0 + 0 + + + + QAbstractItemView::NoEditTriggers + + + false + + + QAbstractItemView::SelectRows + + + + + + + + + + + Employee + + + + + + + Qt::StrongFocus + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + + + diff --git a/interfaces/jobwidget.ui b/interfaces/jobwidget.ui new file mode 100644 index 0000000..0cc266f --- /dev/null +++ b/interfaces/jobwidget.ui @@ -0,0 +1,40 @@ + + + JobWidget + + + + 0 + 0 + 256 + 192 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QAbstractItemView::SingleSelection + + + + + + + + diff --git a/interfaces/mainwidget.ui b/interfaces/mainwidget.ui new file mode 100644 index 0000000..91bbc7c --- /dev/null +++ b/interfaces/mainwidget.ui @@ -0,0 +1,538 @@ + + + MainWidget + + + QPushButton:flat { + border: none; + background: transparent; + padding: 3px; +} +QPushButton:flat:hover { + border: 1px solid lightgray; +} +QPushButton:flat:checked { + border: 1px solid #01bccd; + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 #616161, stop: 0.5 #505050, + stop: 0.6 #434343, stop:1 #656565); +} + +QToolBar { + spacing: 3px; +} + +QTableView::item:selected:!active { + background: qlineargradient(spread:reflect, x1:0.539, y1:0, x2:0.489, y2:1, stop:0 rgba(150, 150, 0, 100), stop:1 rgba(200, 200, 0, 100)); + color: black; +} +QTableView::item:selected:active { + background: qlineargradient(spread:reflect, x1:0.539, y1:0, x2:0.489, y2:1, stop:0 rgba(150, 150, 0, 200), stop:1 rgba(200, 200, 0, 200)); + color: black; +} +QTableView::item:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #EAEAEA, stop: 1 #DDDDDD); +} +QTableView::focus { + background-color: rgb(255, 255, 255); + border: 2px solid #ffff00; +} +QTableView::!focus { + background-color: rgb(240, 240, 240); + border: 1px solid rgb(0, 0, 0); +} + +QHeaderView::section { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 #616161, stop: 0.5 #505050, + stop: 0.6 #434343, stop:1 #656565); + color: white; + padding: 6px; + border: 1px solid #6c6c6c; +} + +QHeaderView::section:checked:vertical +{ + background-color: white; + color: black; +} + +QListView { + background: lightgray; + color: black; + border: 1px solid black; +} +QListView::item:selected:active, QListView::item:selected:!active { +/* + background: qlineargradient(spread:reflect, x1:0.539, y1:0, x2:0.489, y2:1, stop:0 rgba(125, 125, 0, 200), stop:1 rgba(175, 175, 0, 200)); +*/ + background: darkgray; + color: white; +} +QListView::item, QListWidget::item { + padding: 4px; +} + +QTabWidget::pane { /* The tab widget frame */ + border: 2px solid #C2C7CB; +} + +/* Style the tab using the tab sub-control. Note that + it reads QTabBar _not_ QTabWidget */ +QTabBar::tab { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, + stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3); + border: 1px solid #C4C4C3; + border-bottom-color: #C2C7CB; /* same as the pane color */ + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; + min-width: 6ex; + min-height: 30ex; + padding: 2px; +} + +QTabBar::tab:selected, QTabBar::tab:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #fafafa, stop: 0.4 #f4f4f4, + stop: 0.5 #e7e7e7, stop: 1.0 #fafafa); +} + +QTabBar::tab:selected { + border-color: #9B9B9B; + border-left-color: #C2C7CB; /* same as pane color */ +} + +QTabBar::tab:!selected { + margin-left: 3px; /* make non-selected tabs look smaller */ +} + + + + 12 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + QFrame { +background: gray; +border: 1px solid black; +margin: 0; +padding: 0; +} + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + 14 + 75 + true + + + + WhatsThisCursor + + + QPushButton { +background: none; +color: white; +border: 0; +margin: 0; +padding: 0; +} + +QPushButton:hover { +background: none; +color: yellow; +border: 0; +margin: 0; +padding: 0; +} + + + Furqan + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + PointingHandCursor + + + + :/minimize:/minimize + + + + 24 + 24 + + + + true + + + + + + + PointingHandCursor + + + + :/exit:/exit + + + + 24 + 24 + + + + true + + + + + + + + + + 3 + + + + + + 0 + 0 + + + + QFrame { +background: gray; +color: white; +border: 1px solid black; +margin: 0; +padding: 0; +show-decoration-selected: 1; +} + +QListView::item:selected:active, QListView::item:selected:!active { + background:white; + color: black; +} + +QListView::item:hover { +/* + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #EAEBEC, stop: 1 #CCCCCC); + color: gray; + +QListView::item:hover, QListWidget::item:hover { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #EAEBEC, stop: 1 #CCCCCC); + color: gray; + padding: 0; +} + +*/ + border: 1px solid lightgray; +} + +QListView::item { + padding: 4px; +} + + + + + + + 12 + + + + + QFrame { + background-color: lightgray; + border: 1px solid black; + padding: 1px; +} +QPushButton { + padding: 3px; + color: gray; +} +QPushButton:hover { + color: white; + border: 1px solid gray; +} + + + + QFrame::Box + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + PointingHandCursor + + + &Add + + + + :/table-add:/table-add + + + + 32 + 32 + + + + true + + + + + + + PointingHandCursor + + + &Modify + + + + :/table-modify:/table-modify + + + + 32 + 32 + + + + true + + + + + + + PointingHandCursor + + + &Remove + + + + :/table-remove:/table-remove + + + + 32 + 32 + + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + PointingHandCursor + + + &Print + + + + :/table-print:/table-print + + + + 32 + 32 + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + minimizeButton + clicked() + MainWidget + showMinimized() + + + 670 + 30 + + + 5 + 5 + + + + + closeButton + clicked() + MainWidget + close() + + + 704 + 30 + + + 278 + 10 + + + + + diff --git a/interfaces/quranwidget.ui b/interfaces/quranwidget.ui new file mode 100644 index 0000000..5e6215a --- /dev/null +++ b/interfaces/quranwidget.ui @@ -0,0 +1,91 @@ + + + QuranWidget + + + + 0 + 0 + 524 + 215 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Student + + + + + + + + 0 + 0 + + + + QAbstractItemView::NoEditTriggers + + + false + + + QAbstractItemView::SelectRows + + + + + + + + + + + Recital + + + + + + + Qt::StrongFocus + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + + + diff --git a/interfaces/resultwidget.ui b/interfaces/resultwidget.ui new file mode 100644 index 0000000..ff0d9ce --- /dev/null +++ b/interfaces/resultwidget.ui @@ -0,0 +1,91 @@ + + + ResultWidget + + + + 0 + 0 + 524 + 215 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Course + + + + + + + + 0 + 0 + + + + QAbstractItemView::NoEditTriggers + + + false + + + QAbstractItemView::SelectRows + + + + + + + + + + + Result + + + + + + + Qt::StrongFocus + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + + + diff --git a/interfaces/settingwidget.ui b/interfaces/settingwidget.ui new file mode 100644 index 0000000..2875aac --- /dev/null +++ b/interfaces/settingwidget.ui @@ -0,0 +1,980 @@ + + + SettingWidget + + + + 0 + 0 + 621 + 659 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 70 + 0 + + + + + 70 + 16777215 + + + + Qt::NoFocus + + + QAbstractItemView::NoEditTriggers + + + 10 + + + QListView::IconMode + + + -1 + + + + General + + + + :/settings:/settings + + + + + Printer + + + + :/printer:/printer + + + + + Report + + + + :/report:/report + + + + + + + + 0 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Database + + + + + + Path: + + + + + + + + 0 + 0 + + + + ... + + + Qt::AlignCenter + + + true + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + Backup + + + + :/database-backup:/database-backup + + + + 32 + 32 + + + + true + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + Change + + + + :/database-connect:/database-connect + + + + 32 + 32 + + + + true + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + Create + + + + :/database-create:/database-create + + + + 32 + 32 + + + + true + + + + + + + + + + Language + + + + + + + 0 + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Vertical + + + + 20 + 527 + + + + + + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Printer + + + + + + Qt::LeftToRight + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Paper Size + + + + + + A4 + + + + + + + A5 + + + + + + + + + + Color Mode + + + + + + Grayscale + + + + + + + Color + + + + + + + + + + Orientation + + + + + + Portrait + + + + + + + Landscape + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + Margins + + + + + + Top + + + + + + + Qt::AlignCenter + + + + + + + mm + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + Bottom + + + + + + + Qt::AlignCenter + + + + + + + mm + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + Right + + + + + + + Qt::AlignCenter + + + + + + + mm + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + Left + + + + + + + Qt::AlignCenter + + + + + + + mm + + + + + + + + + + Header + + + + + + None + + + true + + + + + + + Image + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + ... + + + + + + + ... + + + Qt::AlignCenter + + + true + + + + + + + + + + + Width + + + + + + + Qt::AlignCenter + + + 1 + + + 333 + + + + + + + mm + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + Height + + + + + + + Qt::AlignCenter + + + 1 + + + + + + + mm + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + + :/align-left:/align-left + + + true + + + true + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + + :/align-center:/align-center + + + true + + + true + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + + :/align-right:/align-right + + + true + + + true + + + + + + + + + + + + + + + Qt::Vertical + + + + 48 + 98 + + + + + + + + + + 1 + + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 1 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + QFrame { +background: gray; +border: 1px solid black; +margin: 0; +padding: 0; +} + +QPushButton { + padding: 3px; +} + +QPushButton:hover { + color: white; + border: 1px solid lightgray; +} + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 26 + 20 + + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + + :/zoom-in:/zoom-in + + + + 24 + 24 + + + + true + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + + :/zoom-out:/zoom-out + + + + 24 + 24 + + + + true + + + + + + + + + + + + + + + + + + + + settingListWidget + currentRowChanged(int) + stackedWidget + setCurrentIndex(int) + + + 731 + 166 + + + 677 + 194 + + + + + headerImageRadioButton + toggled(bool) + headerImageFrame + setVisible(bool) + + + 619 + 233 + + + 556 + 249 + + + + + diff --git a/interfaces/studentwidget.ui b/interfaces/studentwidget.ui new file mode 100644 index 0000000..70b58a0 --- /dev/null +++ b/interfaces/studentwidget.ui @@ -0,0 +1,91 @@ + + + StudentWidget + + + + 0 + 0 + 524 + 215 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Class + + + + + + + + 0 + 0 + + + + QAbstractItemView::NoEditTriggers + + + false + + + QAbstractItemView::SelectRows + + + + + + + + + + + Student + + + + + + + Qt::StrongFocus + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + + + diff --git a/interfaces/teacherwidget.ui b/interfaces/teacherwidget.ui new file mode 100644 index 0000000..68f7cd6 --- /dev/null +++ b/interfaces/teacherwidget.ui @@ -0,0 +1,57 @@ + + + TeacherWidget + + + + 0 + 0 + 258 + 213 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + Teacher + + + + + + + Qt::StrongFocus + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + diff --git a/interfaces/teachingwidget.ui b/interfaces/teachingwidget.ui new file mode 100644 index 0000000..b49a57f --- /dev/null +++ b/interfaces/teachingwidget.ui @@ -0,0 +1,91 @@ + + + TeachingWidget + + + + 0 + 0 + 524 + 215 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + Teacher + + + + + + + + 0 + 0 + + + + QAbstractItemView::NoEditTriggers + + + false + + + QAbstractItemView::SelectRows + + + + + + + + + + + Teaching + + + + + + + Qt::StrongFocus + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + + + + + + + + + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..4d0da5f --- /dev/null +++ b/main.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include +#include + +#include "resourcemanager.h" +#include "settingwidget.h" +#include "mainwidget.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QCoreApplication::setOrganizationName("ShamSoft"); + QCoreApplication::setApplicationName("Furqan"); + + QSplashScreen *splashScreen = RscMgr::createSplashScreen(); + splashScreen->show(); + + // To show the splash at the very beginning. + app.processEvents(); + + RscMgr::settingHandler(); + + RscMgr::translatorHandler()->translate(RscMgr::settingHandler()->interfaceLanguage()); + + //initializing the database, + //this prevents uninitialized access using static QSqlDatabase static methods. + RscMgr::databaseHandler(); + + if (!RscMgr::databaseHandler()->connection().isOpen()) { + RscMgr::issueMessage(QObject::tr("Program couldn't open the current database, please select another one"), false); + + if (!SettingWidget::changeTheCurrentDatabase()) { + RscMgr::issueMessage(QObject::tr("Database is damaged, Program cannot proceed"), false); + app.quit(); + } + } + + //initializing the models, + RscMgr::modelHandler(); + + MainWidget *widget = new MainWidget; + + app.setStyleSheet(widget->styleSheet()); + + widget->show(); + + splashScreen->finish(widget); + + return app.exec(); +} diff --git a/relations/abstractrelation.cpp b/relations/abstractrelation.cpp new file mode 100644 index 0000000..6d04df3 --- /dev/null +++ b/relations/abstractrelation.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "abstractrelation.h" + +AbstractRelation::AbstractRelation(QObject *parent) : + QObject(parent) +{} + +AbstractRelation::~AbstractRelation() +{} diff --git a/relations/abstractrelation.h b/relations/abstractrelation.h new file mode 100644 index 0000000..f372a87 --- /dev/null +++ b/relations/abstractrelation.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef ABSTRACTRELATION_H +#define ABSTRACTRELATION_H + +#include + +class AbstractRelation : public QObject +{ + Q_OBJECT + +public: + enum RelationType { Map, Sql }; + + explicit AbstractRelation(QObject *parent = 0); + + virtual ~AbstractRelation(); + + virtual RelationType type() const = 0; + + virtual QString forwardLookup(qlonglong key) const = 0; + + virtual qlonglong backwardLookup(const QString &) const = 0; +}; + +#endif // ABSTRACTRELATION_H diff --git a/relations/maprelation.cpp b/relations/maprelation.cpp new file mode 100644 index 0000000..998c56f --- /dev/null +++ b/relations/maprelation.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "maprelation.h" + +#include + +MapRelation::MapRelation(const QMap *map, QObject *parent) : + AbstractRelation(parent), + m_map(map) +{} + +QString MapRelation::forwardLookup(qlonglong key) const +{ + return m_map->value(key); +} + +qlonglong MapRelation::backwardLookup(const QString &value) const +{ + return m_map->key(value); +} + +AbstractRelation::RelationType MapRelation::type() const +{ + return Map; +} +const QMap *MapRelation::map() const +{ + return m_map; +} + diff --git a/relations/maprelation.h b/relations/maprelation.h new file mode 100644 index 0000000..f4ea2f1 --- /dev/null +++ b/relations/maprelation.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef MAPRELATION_H +#define MAPRELATION_H + +#include "abstractrelation.h" + +#include + +class MapRelation : public AbstractRelation +{ + Q_OBJECT + +public: + explicit MapRelation(const QMap *map, QObject *parent = 0); + + QString forwardLookup(qlonglong key) const; + + qlonglong backwardLookup(const QString &) const; + + RelationType type() const; + + const QMap *map() const; + +private: + const QMap *m_map; +}; + +#endif // MAPRELATION_H diff --git a/relations/sqlrelation.cpp b/relations/sqlrelation.cpp new file mode 100644 index 0000000..33207a5 --- /dev/null +++ b/relations/sqlrelation.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "sqlrelation.h" + +#include + +SqlRelation::SqlRelation(const QSqlTableModel *remoteModel, int keyColumn, int displayColumn, QObject *parent) : + AbstractRelation(parent), + m_remoteModel(remoteModel), + m_keyColumn(keyColumn), + m_displayColumn(displayColumn) +{} + +QString SqlRelation::forwardLookup(qlonglong key) const +{ + const QModelIndexList &list = m_remoteModel->match(m_remoteModel->index(0, m_keyColumn), + Qt::DisplayRole, + key, + 1, + Qt::MatchExactly); + + if (list.isEmpty()) + return QString(); + + return m_remoteModel->index(list.first().row(), m_displayColumn).data().toString(); +} + +qlonglong SqlRelation::backwardLookup(const QString &value) const +{ + const QModelIndexList &list = m_remoteModel->match(m_remoteModel->index(0, m_displayColumn), + Qt::DisplayRole, + value, + 1, + Qt::MatchExactly); + + if (list.isEmpty()) + return -1; + + return m_remoteModel->index(list.first().row(), m_keyColumn).data().toLongLong(); +} + +AbstractRelation::RelationType SqlRelation::type() const +{ + return Sql; +} + +const QSqlTableModel *SqlRelation::remoteModel() const +{ + return m_remoteModel; +} + +int SqlRelation::keyColumn() const +{ + return m_keyColumn; +} + +int SqlRelation::displayColumn() const +{ + return m_displayColumn; +} diff --git a/relations/sqlrelation.h b/relations/sqlrelation.h new file mode 100644 index 0000000..7177f1d --- /dev/null +++ b/relations/sqlrelation.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef SQLRELATION_H +#define SQLRELATION_H + +#include "abstractrelation.h" + +class QSqlTableModel; + +class SqlRelation : public AbstractRelation +{ + Q_OBJECT + +public: + explicit SqlRelation(const QSqlTableModel *remoteModel, + int keyColumn, int displayColumn, QObject *parent); + + QString forwardLookup(qlonglong key) const; + + qlonglong backwardLookup(const QString &) const; + + RelationType type() const; + + const QSqlTableModel *remoteModel() const; + + int keyColumn() const; + + int displayColumn() const; + +private: + const QSqlTableModel *m_remoteModel; + + const int m_keyColumn; + const int m_displayColumn; +}; + +#endif // SQLRELATION_H diff --git a/resource.qrc b/resource.qrc new file mode 100644 index 0000000..b941b94 --- /dev/null +++ b/resource.qrc @@ -0,0 +1,31 @@ + + + resources/printer.png + resources/zoom-in.png + resources/zoom-out.png + resources/report.png + resources/settings.png + resources/minimize.png + resources/empty.fdb + resources/database_backup.png + resources/database_connect.png + resources/database_create.png + resources/table_add.png + resources/table_modify.png + resources/table_print.png + resources/table_remove.png + resources/align-center.png + resources/align-left.png + resources/align-right.png + resources/bold.png + resources/italic.png + resources/underline.png + resources/exit.png + resources/close-ltr.png + resources/close-rtl.png + resources/emotion-happy.png + resources/emotion-sad.png + resources/splash-ar.png + resources/splash-en.png + + diff --git a/resources/align-center.png b/resources/align-center.png new file mode 100644 index 0000000000000000000000000000000000000000..da6c110ff8efa0d6663df17636d6afb3e011a37f GIT binary patch literal 21122 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 N%h&2ZzJL3(e*yF?D*gZf literal 0 HcmV?d00001 diff --git a/resources/align-right.png b/resources/align-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c4cb852e7b45fa3e6eccbf5c3e72edbe18f40195 GIT binary patch literal 21122 zcmeI4&2Jk;6u_r|pbe^2i312OD;E%7>;3SqKUR*b5Vs@}E>RlP^hC$Iv&pLVuG!th zPELrP5Qid82=O=Y2ap3N#HHejxByqU^n%p(P?*4qiEqv47HB|ey|E%K z1|gBmyeZqNW=N$tE@K8YI zt$03{qk-5pc&>Jb1@fZ-JD{laa7WSdsxryQv6)S0D{Li0b8LmQNSpX^1a{g)yUu11 z2hnCQB_z8&H89LcqrqZN9B;clF?1AP-Ub8%q!TTpwVe)8R!J0Wg*Lgo4Uckh($h!r zDjCfVhbvH@=qUEwDSqgksSrrdn_@=qq-IG@rBhu6Xx3s#a2$kdLC~tD>AEtU3u$pt zdgr?5J3%*kx2lY5k8)<@h}3aRYLL@KSv6(7yr!#`Ua$=9eYIezYQ{;bIp(7gIG($6 zz=vk(hGm*r9~sSYAFu`;9AhpoS>22u$F|%cY~#4*webc~I{rpg8FgkfS!P;`K`RJh zSfo~{DwDc1R!O#6%YGDN-zLlT8g%46&#_3sZMv>mlr^pB%H@)Q<#Ll?xu6#{)lh9x zG28@VqmeZ~;JO~zTXe+@TszQ2KWc~xZVrT6@*+sholMF?;wJmyHS+oX-r5f>l=~^I8RoT}&8Wyu0n0W^$kdJceKVv>UMt76=hb^eoRiZWB zNffwo7l&kF19IXq%RF_s-(uWzRiTGR%X=Dg5cu09JjyJ9FeR&ouU=(cR@#FZ;e!;qWhiYD7y*|d#H zQ*#`a&BxBRlBKfkdnVa7TBr6V_BV)AQ-ZhGTz)9meW(~;$;z8BZ@LA0^%j1_&cO<%pP z!IwFtRy56mSyjfn$1PU89%-%DJ$OfoXyspkNQuq(jfsXgrWs~#3=GqSlKI*tnV7T} zzSM#5lN9!aQfAKBo5qtDMo;wQeKU_D2t&am2wXgrn2x~3Q1A!>7Y`+-BXBVkJc7W* zLy74KTnq(|AaL7Y`+-BXBVkJc7W*Ly74KTnq(|a44?1(N8oGAAXmi3qQc{_1qtS!;d#e_R?wt zq20F-`r4?0b{Z;<jui31?1# z=D;k@f?*EO6*${vD9(bJC*jNoF!Ll7XTi*KKn#Gc0&y0I_X3&+GrMNK4C#~4^u2%% jU>3`ey`Dow)bHcpe)|3PqqpzU(JWuSTL1CGn_vD9(U~mT literal 0 HcmV?d00001 diff --git a/resources/bold.png b/resources/bold.png new file mode 100644 index 0000000000000000000000000000000000000000..9ccbcbaf883a432829d75240156b206390244ea9 GIT binary patch literal 21122 zcmeI4-)rQ?9l+%hO6n4Fr4KEAC}KmQrI97=N^7rJZ@7BzYD4yV_*~+HLL*DFwzyqM zm1KL*P;xX-$V+}dl#;)p=1^z4OcGmVdM?Nz!v$oBeIL%k+Bo+wea=Ir%T#z7uZVk0t55->27- z^yd$LC`mW};qB}uyMvc4Cm65TZm>sICgTvKC8_(;B($9eB$4;XzUQwuzWnHML-ySD z#w+GP8-yF=z}q~D$i0(0JI=`ir{gwW>MeIC78n?l#Fi)Hksn)=^+syff;w$h8*(a= zJXmksqz>iX!CiSHh=^>in2Mw6hP>KY(M{c0(_fUEn%+{ima4ZDy=iG3OE=|dY4nz% z){WeuwcWoxbqAl;8wW`eTB>?{e7thpS_z_kRqu2VG!#Gt2F>V*eE62u2VjZ5sVbqqNf4A6IFyyJ1D>o~b}1PG=`D>dVthapk7NgNzT z4!Ly%LwTWU^l`FHX4&B|1>%*45^q>zhxXJ$AQP`fjrL?}>72?^-34gYMnvo+h<1Wt z)XS#p-8>ia#)kaUS3KVhj^m$o)uQxl&ddyvzMYUB%;~nGnM!kQr>R@;XRQ8QYgwAc z7|A3HHU@#~4Ift7Fs;^{4MwtP1J zoSD`}FbX0Fi}YGuwW^uXN@uIJ<;RKbJ7lZhgN7B)b1m1^jG?>NQJfC^(_4n2>=~w^ zkXC24)m$ZOx}HHC3|RG&>3-lG(iJx~?Sg4jYum#$-Bw!qs-fr|qp5WC_E2fJhiy}{ zNn1DUG(TXPQ7@VPRph~LX^$8g8vS`)RG2Bb+Voc@wohJ*BYa1TCB#L{( zC>YDQWaT7~?Jyj9j!o069{KL{F^0=CPc>uXYaDBAA6;&?xouPL*ezReO`<8TZsR~c%50mhQ|G|;_let6^Fiee-=w5DZA0(4_L{P4 z*sjtvjSk)8_mozlYN?H}miFz^bMxphJr}PwH7Kf1|4&uf?xO1b#j0#~QFW&IYu`(H&8fFS zGowXcY_nIdd+=or>9tL>Wp>qKb5Y~2HzA|lz6b9}F+KUWz*DMI?5I?{U#G})Ock?* z!hG$LCMIizFLmJiBo)6BeY zUrMK^r*jwBdJ(Qq-~t=m*AtL^53YMfduM%~b54b!oY#3VP^!-zNL2u-!2+0t19|d9 zI(_Rc=~R~Ih`qN^Y3krg0$_usfdGO0Ix~nX4}bA5CGYQDfr?G zTnYay`pG{(bJ5{1EiI*!fa=2}l%9XSZ0W-fv5jue)g_N4zk?JP0V+qAVGva3o)Wy4 zWmuP*Vmq@07j8t?HVK)ObRk`@SM#SF3!$Htf`WKaeeUz)$2bXTS}S+MYYl(~dsZsW z9Y9Wqz0=9|=uycO(pWSZOIo?%I@Ec8)x9nVhQd1-)zra-17Hn7Fnt;jU6xgW(`|Yh zaA`%9H1d&E8KP~oe)zx$L3?_ZJnu8%+Lj>%#8=o+&^nZKl+57fL}vXn0?@WF1)qM3 z;L*v)5jmn-X(ouXGvKrKYZ( zS%Re%K%*>$osX=};Cb4a+*7Jw?^eu=oH~DhE+@<=u9N^BF?G!3e4+EY6r>wUo{CG{ zshvvfER8Ax7kNFWBc<18aJ|ptI1gfpPQ&CsjnDPJfA7bjC~e)k)BnpaUj4)W0TyG8 A0RR91 literal 0 HcmV?d00001 diff --git a/resources/close-ltr.png b/resources/close-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e8ecf31410026bd5f4106857a9f18433f0cf55 GIT binary patch literal 21122 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 literal 0 HcmV?d00001 diff --git a/resources/database_backup.png b/resources/database_backup.png new file mode 100644 index 0000000000000000000000000000000000000000..5d24190f8361a27e44726bbde2207540369260d6 GIT binary patch literal 21122 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 JZ@%%9{{z`=Da8N) literal 0 HcmV?d00001 diff --git a/resources/database_connect.png b/resources/database_connect.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b30e9d6fadb0f9b5419f80ff54e3ac94d7e5c4 GIT binary patch literal 21122 zcmeHPTZkLi89wVIcI{%~P(qVF)CYw^OQW3`T~;fhmDgR__0q~VyX$0K2=?sE(e7YL zqe`=0?Lu&Y!^dm^Wd7a5EIPw|L1aM zblW|9aZF$id^-R9=f9luoy#2QLBBt^|Cigh{b(B@Wc&EO;sn$b@x9IP*<4!sFH~FW z`wlk=`Th?O1LVxvX9(H-S7U10nlAl1r2@|u@}=Nxl|uxbH=`<2Af>kKcy`l)3SPOS7BSem4g6PW~sDQt<;*i)=12W zn*$luQj9t#*0GV;ZcIq0O9$zg*2Amtl+IX6+<>!pLIk=UGN)pL@xu&^+=kQ_7{vyzg{W+gcxB@%J4h&LB& zmfDKfn$NjG{5VC{)EY+JGRzvqxay2KZ;ixan1~l|T-7>HRBL+N0gF;gtxL+FEcJ5I zHSSZNZ&aMF>6*kUtjcOu6a18(e)T!iGMjT|pOn10Z(^8}QiW4=QvQ{ zQQFh9Iki}4(gbUo^9_ydISxa4uGi?B)&vV?M<5iK_Y7ni^u!CkHg{kfoHWAvvl8a3TqX#OlOby^2&CJ4les>KShribEk zI-W>PDM~J#&ZV+Hmy2QpYWoHc7gSu*|LQ%rD zp*XshE1Qj~Y88yCI?JSbZ8k3j%8(^rnYl5uVm6>#tdPu0z0@HuXSL?WYfVe7X>7b$ z0L7qT=&ErIo@II_F0-sUoJpsXNiE}t4!L)QKF~1Wv{Wl08|?jRQ}hVa zm1>{Sgr&I{TC%Wko%3*#{kC1}H&hJgT&t^%Cc|Aj67#n$KM46bhd$2k-ohy@Mz z0@L$Sn>Oec_w?M1?gyG)wd1U@npuFkR^i3V8qGqvVOA;MveYuETCZ0OO~vVzj@NYWHO9B6 zKh>ca-{M%C>hblhwiJ^!IhjtzvuT!!4`otvJgX;W;;NF+GQ(L-85&OcLtNWxOXSi+ zxkSo8dLPMZ3-+ltr`BefUXc7j`HJt-q-9w~p3yZWo+uA%@l-iA6Cchd%P?t4mK~Ba zndA%{#A`kxy5E=4q!qMvpDHUHBzV^FgU6q}M{}y^tYNI?TnY7((?p$<^t&_Wb)TeS z7q4hjdRHL#0?>X7^DmFxw>JEK02kJxyD<0SOB(MFu<%y6q`^H4z9Qv9uP*A8lRJ6#Vi?;39IbPYTY)eNhU@UnHNLtgmB*8S==2|wnr z!Vr9sN#~_bb*INcqs1!IMFYMgHSy-3giMZ4XG2fN!~GmX4W6UBQ9?hvI1}S);YS_# zJxSs}D23*Xf794_AsErd$L0~EB%BHnA)-r!C2kYZ#iWge7hh(Z#6{ z5hA)oSmHJjU7QLLA)-r!C2kYZ#iWge7hh(Z#6{5hA)oSmHJjU7QLL zA)-r!C2kYZ#iHY`xMF6}IN%8b)a^UgDVPr702M-8H z9JuMc4Hp*?|MZW-NIA=p$l3`>d1W9}w8jhjrUSxB=y>fOCKofL$Ia)V<2& z6HgEu6Zs?d>yJMs_G6E^dA4pP_Tj^AIolp=h`c6DP7?dgH(lQkKMXo?<3B_)>~Y^{c9S)*q?qH*qk`wwBHBc{Q##>_&g6-btj&BirDw=1;PD!f9*9l)_d;- zZQp!DY{PK$e}`O2fK#YfV}&y8R`G-ArI&&PesaHt{qGFu(k0jC{(WMXN{$Y<=w<)~ zI0q3P3cboGD31bO0bKKN3u?~PsZ;$sfE{`JZO8V~2Ok7>-Z{~NI5z-}!A+=-;KM4* z;^JZu*dKXk?XCFBmoK}v-Wu@lp}}Y%Id)_<2hp!aMpo_sb_hE$FhJ}VUTDjQOm-EkNM=Kv=FyF5^+vHS)Pm+;o=9J&Ae#TUdrbcn~a!8eSyhj7EPGVcBB*Owptojb%n zd6L*@+mVz%92V*KBL^TKnHC5nWtxde0}Gk R?PxK+XMgcezc~84{{!R4%o+dy literal 0 HcmV?d00001 diff --git a/resources/database_create.png b/resources/database_create.png new file mode 100644 index 0000000000000000000000000000000000000000..19bbbd838dbb355a884fa5bd4aabc81eb6763cb9 GIT binary patch literal 21122 zcmeHP&2QYs6(9A`)G7ox=%Gas*y9Zhv`8tE`>7>XE4h-timq$eDk1{~Y%V#H2=6X8 zOUjak1Tk9lkV8mXD9`W9By>JKV#*arVr~vC;325<1wml@{HBVOqkaI z9nETnhA#f)$;>e5SW9v@l*!EKSeTQh8i2==ll#2Q;hcIaSN4dQQ=^hE_K8 z0*xe79R;n@u@{VUvnQf*a5tG*^8L1YoarTEv!>6gFsF-(R#39} zIbAmj1tVX6Ny{0UmPpd|?8{MeZD--?)*KUadKp3?O)^Kqvp)x{LEH3Ap)5(?L>}8R z7TiwL^s7$OTx4pywOCPm#)K!InZ}IUa68Z}R?St^G;<;vr2L5MEF4JpL879EzL&42V1|}5-Dj0N}X~% zn3`7;Qx+y}xF4QpuWYr(4;oImueHsN$8gn7X5wYbH$uM8VNAIC4b#FMv1;L3V0J~_ zV(m4HM@C`J-~fuT+|8c|A6{c+iM6&{P~B9a*YG5syWp>w9d>LH=EM%myqj=qM1SUr zieDZL=V^?A+q%L!yBP%-YZJbBS;wm`blfK8OP2aBHQVimW0^R->XnuqeU0(u84qvw31mW*YicDESOeKDO%wkpVJg`A*xp-j9X1l&Yxu?!kKVJ{RczLAcC)V}TFGgm;ZFM1>GKosq+$oJ?n;u2 zl6DUOTTfx};c@WPhVKV(V4dww%oF$}jpqlLcsm@@;G6}oNJfJ2_@FGhiS~tW`JRZf z+j~7LcN>=oPs{E;>2bMRB_&O-TFiWc;Ka$Sg71t5oVVfZ7aoMFdPN`>i8LjCLi~QUf4b~`M5u{7x~kc<5%HbCu~fgIT3{~w%u2+^YCL1s}|u! zrchD)&HWK)omJMDpLO6J$-|R>4l0E){SQ(DFANJzJct6j3nlThOE@rHEBvSfzbC2u z2c^WA@i&eAS9(3#|J*#IEW)V}Q6ya=EO8%67pFo*k#vc$#C;@PoC*;|(j~$Y_mOmQ zDnt}Xmk3MTN7BWq5K$yuA}nzqNf)O=M3Hofu*7{NU7QLLMbah068DjGaVkUq9ba5&~6iJr|OWa4&#i}dh zovRVDc9f87zaZp)0bKt@$g)Przb_GD{Em=syT878=L8`KwbQf5=2k}tJ-G2;1poPA z8<~b@hXE8Y4M3q0Q16#bFd$IY0heZe0ERg~Ej!l4+Tl1ots*<+-57~_jtzMx^0jADHBnSH02#QKVC2hI!`iqM z9s+invHSfTYlh1Zdrbj10sCEKSU#*p0in?7iWk(|fOWvI;Jw;0C+4PrSm+37e*;Vd z9s>Gh8Voc7>L?U&7?l*c2e!?~z8>j#k9xlx1jB7KVvjZe7x88vI_IK|q3Q*S6FfXaE|LxDEF=0Ivh4B2c)d z$ty>XlHiLkx`nVr?vqc3HwcI4?p+cT3Ss;&AFF^4 z-@zBR>$o0Xx7;Kjpne;01MoUvDguRTn*7W#28+M@E(s1C*tW*D4+E$qj5~LF4fyOc z5?r_-6uUngQMueJ{@!~ez~w2>_)Vk|H-m=&k$|B-AAQtqKs3>Y`X%aMO{^UXh0mJ+ zk-!0;r6m%4{y7Pb9~X|tS`;uK6fAAPI$)qsnhhsdvq^$XW=DU_iMc6&%Lv!fm1!{3 x2&kh_z+qHU008W7D^XEJ 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 literal 0 HcmV?d00001 diff --git a/resources/emotion-sad.png b/resources/emotion-sad.png new file mode 100644 index 0000000000000000000000000000000000000000..b119182984da6803c3f894d8616fc8fba74a7ea7 GIT binary patch literal 15484 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 literal 0 HcmV?d00001 diff --git a/resources/empty.fdb b/resources/empty.fdb new file mode 100644 index 0000000000000000000000000000000000000000..1a0cdf17d154119f8d21ef5b78bff90b178126c9 GIT binary patch literal 1064960 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 aAV7cs0RjXF5FkK+009C72oRVLf&TysdLEeo literal 0 HcmV?d00001 diff --git a/resources/exit.png b/resources/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5607a31fbfa4652fb3dc9ea96cbafc479e3181 GIT binary patch literal 4266 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 Cp(m~Y literal 0 HcmV?d00001 diff --git a/resources/printer.png b/resources/printer.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebe0b0022bfc2aef00a001b53817014c519765c GIT binary patch literal 21323 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 QD5SN!_Zxru;r1{74^31woB#j- literal 0 HcmV?d00001 diff --git a/resources/settings.png b/resources/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..5babeadd34cdedcb4a487e86135544e0189c7b10 GIT binary patch literal 21122 zcmeHP&1)mc6>l$LNF0`E$stQFX|x13B<=3jhb1+#?1?oKn?w`G<1n7ns?}Yxn~~It zx@~KG8IwRDr}5@6EFt&Y@(<)NCXiDCJ9`g|b4)JdgpRBE;4lI_j1PzBHR zy6X3SRrRZnE(xsPZ9VwO+l${_lqBix&5imtaCUb6-Nw%h%k3_iw%a00!)_nYl2lzC_D$;v@#PlTb9yV;H-CAVl^uH} z`>5E^8vS*$?`#|o$iw3YJJ#_Nt72zYYm3#P0R&y*oAR*R>3PO*B^&S>;A63xl>>nS8PN9W5Q@m)yags#hu%Rm-WloB{~Nd)o8Oq0;l-3rS+0 zI`OQ5)At>>CnK-fau58KY!(}$DH>O|PaEoak#?Y>IyC#LzND#XLAFI>`Uitf&^6mq zNr!Yv&-WlsPmSyEyT0q~yHlE^)l(aWIcYR#+o}ESc2k@7{CkHWK_qEvq_^|5Pt+<`LoSy9-c|WMCN%UyVjEG3x^hpiY^s=HAm0V#*FBtifk=K5x z1_euwV;gpr|2f^ zWU^c+E2iDbE0w~s*&-yT<(7ecB7B0n?pg=9<05Jss9VI$5u)o#1zf0Q;I3WC#@m)2g!G)lm|*uCriCYB&BDDv?5a9eI_egUjKZAB3FK2bMM%>O>jC7S!$Hy}5G`+>1*&4U($k-zb!=PKG|79m-ZG zLr0On>^Xid7qylsW}@(eZTQjaA$*xbYRko9zF1Y0#mR^*XGl7`bq78pd3f{BLrXzS zvLZF`@w7muA_@#Q3iGu~Ffm~%e5nK9C#m!cC1%d(Cym>8MkBg?ZptVcp;GWTLM|Sa zC`QOdrQmUdTs$gKjF5{;!Q%+IcvPYoAs3Z`#}RVzs6;VBE-D3&Bjn;yiDHCYR0ADR>+q7mrF5Bjln|@Hj#)9+fCY$VH{#afDnvDp8D(i%P-c2)TGvq8K3;m4e5a zDc9oYCmKi(ewX10et_ZK&)@$Xe!M}pHntm*bo_luI{A$xeRc`?za{BFlcfJNCCT_m zlD^~q{)4~Wm!yogS--n8T#)3<>o?Nnz4h(%vO|aO<=kat4 z9f%w31M?bK{ER-9#n0fTq-%CS11dS9JBJ(_c?0%3^6?pcEJObs43i9ov7>a24j=&% zqdfz|hOm)YhL~qyaongA*XV!@L>FMQ8k|*!vB(jmw_<0G{2Z{SbKsLuj6IJF7f=D7 zw6L&{0USzr9^vIEXR}Y?;Z;?m+&T$NZn`sZM4V3~Ooz`54Iz6Hi6TpK5BLBc;x zJmVvBs9?y+otl75j)Z-FmcoRMvzVmcTu2F;R)ix(x&IXbzBdJU7L~6}sb}NgnSu$5 zU%=nE$LO;O?i{o(#_;AREK$BZKTbg5|p z`SZ24(Gh_@pr2zMV!;0_>I5or4u)m33^6BQ7m?v0$I=!Of3XhjT|GsiBaa$w_7_XrLBG~O^47DZYmXW7?)BsIZYW5P~+;VGB` z+-k30jRy1baUhm!QkCvo3GAIq=~F^Gi}{tevQ`NJN?r#R2C66iw{r_51IUrrPh zgXheXUEhKN4Q$rS2r)F>b_XaiII~{I6nE1OEJ&dAM?d}R-~ajBKm7t(H}5^D|M|zw GU;ht!wKR1A literal 0 HcmV?d00001 diff --git a/resources/splash-ar.png b/resources/splash-ar.png new file mode 100644 index 0000000000000000000000000000000000000000..904a7d266e6fb9df8a098d56ffdae5f4cabfc066 GIT binary patch literal 1021425 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�VMBLcD!>X|~WygH=v)@MxNmb@Aog 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 literal 0 HcmV?d00001 diff --git a/resources/splash-en.png b/resources/splash-en.png new file mode 100644 index 0000000000000000000000000000000000000000..69bc7010ea435a3f11a99396318789326c0123eb GIT binary patch literal 1021425 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 literal 0 HcmV?d00001 diff --git a/resources/table_print.png b/resources/table_print.png new file mode 100644 index 0000000000000000000000000000000000000000..965819c51551c36d9b41460f07d8e3c758225f36 GIT binary patch literal 21122 zcmeI4O>Er86@W)hV7qD(80euzeF(8Zixe$Ia(B7AWLKNITB{P!b!}Ni9zI(-t?FDLVSJi%Bs6})3vCeZClfJc6R1=a&tkrp&6ECX?j-6W>wHoquo~QbktV# zTcLh#pUIGhSnAzZv&|Z6MLl*vQR_Hu&6v}*aYmlYY}#94 zBk7vwYPf-$xD`iWXNfWb!Hm?TW=Tw?LtO@F z_CkoAI0#pRpixP~^(q|;Wnn>i{zbp#1v}CA%G$7YKW6%laMg)%1!B6O>ZY2_uNpa9 zFW9F3eH{dybCPNf`KSe+zrH)@qqJ(kq{!Na!TaDehkd{t^qklc^1|zKemvJ+55lGs zSNx{4fwgvPqpbA{IZYOs_CnAILg*H*#ZJq`%hd`L%=x}&*R!Q! zzFy3!bzJvU?Bq?gGFbd}#w>;)rRUIvlhZ_FUG;!=vHmF*ZHvP;);1kM|lm+m9A) zMXTV{a~4*uf}U3kUfxnI-73Ms&FZ?T=j%C4Z}DW&mWTa_oo7q$sYF|Up1PY(YXf@~ zjouV3_$m!r9veB!%jMOgm37lK-g1fs)h!vOr8~u9F>lcOJHeohJ}>29S>fG}qucTrduXHBKNvWh8fWciD-8_!&+Q|C> zY*?#lU@nq}G}%8u;2p6^gMAjfBH0{px=|KgM2E}=o)bOq-bwe$Y3Dfeao&SR-7crC zjB(R%jgsd8b33y#d1tg?zYTl8WFu68$ID0==PjvQBm3sYR>`rhN6V z>5b{8eD$zt-}2`zKd!(FNz$32V$O=Z*ru;u*WqIht`tl&XO^|$;$e%ceg`+!sy@6U zMP%ongO(DT;fk?_HzpZ!6+OdrqHv#Gl7UG};iC?GPtw>2C2q{vo5tf8`gipBeKU`; z5r#rUkhnxBF&&AEp%4)yE)hyhN8(~ALKN5kcY-p~Q3~E`~xxkhnxBF&&AEp%4)yE)hyhN8(~AL0YM zsC)M=>VEdw$q5`Djt+rP2R``Vex@XTOe#n36Xa|V1v!tBV6FuJU_U*nNZ!oO~RPWBki>OO8#;E)0 zr>J}GT;lNDPzTPDa#Bz9s0}&udh}vi5)hp(EH*Ggh)ic{4zQN ztJ`lm2Z{V7v_R^K9;83_a&kcqdp4K{b`RdQ4!(QWxlOvaeECZCFF$_i*Z&3Q C?yOq? literal 0 HcmV?d00001 diff --git a/resources/table_remove.png b/resources/table_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..b43463e9284a8cc35ea0f63b63505e49556090f7 GIT binary patch literal 21122 zcmeHP&uiS+9e*ihXz}(#n!%q_HK&6H-r78#-xlysQHYjYfL5MP{U_ zB->-d($Xb?!k&5vZQ~qzFZ~C4=&AJ5Tmm`lsizIQd)Z4by>$BhYNR)BW;FIo?A9zi z!5e+&z0dda{p$06Y7X<8JGX!G=EBtlLdcuzYpo5qD_Fkv27D$*NB@G`*ZXVt5<jRpQ#`Qtp^&Zev>Cl}ZT&aBVm%mn& zz+b7nXSMZqf0gbAYezA?dvtr#J9^;Re&u>|p)qiPphr_z8T7hg;tW_x*e%w^+8N>w*%nqJe4nrc)X-F6I1$*)Rt z0jx&sZ#x^UTX{J6wo=(m)4ro=2L}g>2erj0-q8%(wl%$~RjVo>)Z{Qs-GLe=*G41- zPm3mA9Q4y53KisaJJDXcQmJ4dcID62>$5;%l4}PlY6G{g8H>7B=Hz?Kr@t3>v($V~ zqg~pgVVZ!SQR>&{G5jsO+FONr88dkzn_%oTwSf;n#3GIGnt)TpZ)AeyrpQ#Xy` z%_!j*Y4mu^jEQK=O=%OxbY0agwQ6n}HAk;Imi|K> z44oqxA*VRnksoXyPI4@78ZarUPR-;wIOH@3%t7BxT_F}8%klW0vmM1fH*E$zcZX{I zaHpY-D>)<^na*m|jbccPHfs&7teW%6Mysv^Vc=%#;a&QR$=af! z8)WNR-;EQBvv#FYOk1`PvULu9vf1yr9^t4LldSSKAN$d>doav*>D$J>s$JJj zweFj?YU}nge0Wt|w{){pqs1e>-e@!7JmQ!}vGiWZXdBN{Z`TcXsNd9zhbk(*Or2)h zR@GYW*sAW;Ox38FRdv}jb(Ol*su`y5xi0J=uf0Uf?w7LDn%z!@7rxkzUcK(Zk2$nix2&4g(59=WJ?;bp+TCge@Q#$=$-f4XGN0*& zQpbDq9Jz+vaWql5pIx$!8P&p%I`Dgv#(q%Z`i#A4oWC)CqVwlwj4}w5Ld1}AiKxUd zQZ6Qih#}bg^q+Co2 z5ktx)q7uVMxtJ6phLlT0C5Dl5F)2h0DVK;!3?t=YQivE*E)kU&M#{yc5HX}&A}TSA zl#59rVo13}RALw@7n4H7kaCHr#4u7WCWVM0Ns_H;r%zfXwsJ3_t{ z{r2a7yG6)b`g-fe=HL=h-umYkmxe=tUf}hW3yhtGz675aD#3*-AQSj1HwbY&oOBgq z*H3#0-Uu7F$#ao*$nF6Q`Y>p&T<3r;Vf;I3>!na5X!wkJ@YLkW1?JO{u`TxGca z<;!IF;sqH#eVPTvB+78tp#I5|CuI2iIT@l4k1M`RL@W6+jr-v0RWkheV}eJDtbFv* zByrAx!5?E=fkPkkg?cPw1HYVbF^3%U^5x4hX+h2$w(I*c+p#Wd`O7^@Yih%rmD){*%fKMZm zL`m?81c2wnt5Bs3g#XX>`2PKJ$x#8%%VfuKfmpmUzVq4(t{~$(@8D z7QU{q^CTD_Gx%sF_B8JJ__#bkKH9T|Xx{9=eF0)%VMb9QeE;;**#yd_T3HgGe8S=~ zLpX4e^pz`unjSYMW5_~GvRP}{f~eD{lYK*^C8x(-@M)W^N;WU F`oB=5IW+(P literal 0 HcmV?d00001 diff --git a/resources/underline.png b/resources/underline.png new file mode 100644 index 0000000000000000000000000000000000000000..31324d98f306d1855819f3dfcb7be5b1bada95c3 GIT binary patch literal 21122 zcmeI4%Wvbx8NkN{TC^^LEYJWAaw4=S&>%~Z6h+A-WG%MVZfv018eSLip0X44!!iGe8b0RL{j#6y~$#M zAx!hr%=en#JUF9+{=9wj)#p}UT15ywx3$^Zfu}_7AO8scM<*x$gU3%Mo3|r`e)=zHosYIn6WwZOp`$F?*bkNn7*uGbR37RaPnsY!`S ze0RNejRchT`rFb*5Ms%w8?vKnO{s0xHA8EzX;-9%s_BZVE1E8A4NEmG&5*LI)?Edu z6S_ldr*|U@2cOn!2XQ>H6y^B%xPGkHgK%HbOw&};=9={Mv)yFkY|KNFaJ;?HW&LAV1330YznMPZX`LDpf|VLv1F9;V4PXbrd|p zW9-Kf*lCq^lY<}*qJv;bNLsx#F!V{kPh(f+J04etj^gV_fFMI!X&LR_n_y)JN5Ns} z;Oj@wl*?7EkK!FX?;Q?TpkC=H_J&LRkea0s@YGvkMru;CWK5-9-2rIUMu_b=2zP^E z)J=!$cHS4##)kCE*F4`1j-!`5N>O`0X6BA?&yH~y#&kBzJ;f>97cTDYrsl&WIJDjBWTmLJ8o@8GRo7Ygd0=URr-vRmy|Th?98kzKv1$);)y zK(Z&3k>}W?dzB;K&0b@4dgfit`1l^%8req|8*M{<;11WC4Ot(ynzCWQ zoHmC|Tec0?XxVndZ0k60;$x3CSbCfJ()(0K+kBon2e!YD-L8^1Dld4ZI&IJ}by#ra zq0`i5y9wR5X5fLWs*Tn_H<~7_^m+R((rNU4DLSp|TzFMEV<91H4PAKh-g`Q$ii<<< zJnIURCB-BqE9tY-<_oW+d>gNHCW%QYr5k|7U0A+(EbrRL`2aSoy>wvSATMdMe}I8^ z#wHE+S#U(M7~uIvdC0kl7R(pk6Pb7Sareq;a*TPE_u!)2|Hr834_QnyF;&7;F)U)*k}a48!3pP91NMbq1-o3hnK)4AnueJ}39 zfh0+$P|R47gKc{Bx&>e6;BLz>bT}aui;EW9-V~4adLEpSBC_+>AyQ&ftf(}+z08oQ z$PCko!hG$LbWBIhsE1&<(b z@lc{V0vAQWBM4kPl&FrtMN#kw0v8V@sv~ew6g+~!#Y2he2wW5ek05aIP@*~l7e&D% z2wXgrsE)uzQSb-?7Y`+>BXCg^Jc7W*Ly77LToeV5AaLMZqHoTs)Mhj=)7x z@CX7I4<)K2a8VRIg22T?iRuVk6a|kUaPd&0Isz9(!6OJIhsE1&<(b@lc{V0vAQWBM4kPl&FrtMN#kwr{Y?j|3m}!;ddF1;RhK0 z_R8-+h97T`oXwp+LMOjK=>8uO`u_}`|3&CfMd+(L2w8tc=;y)PuYY<2p-bvk@7nHk z1xc6w^9apmvxOUcU4fhU1Ro1GDZ5hCFMcLEaC6%)1Sigx80X1+Tnt$Jd|vyNEGP+_ zTq`RpNfv1?c_~6GE2#|nnKZ9srSsbVfHi&^vPeJ>5CjAPLEzaV056*tmc27ht6OGM zMd05=`O7aCO}4k`=eMa;7LqzfH_`a$BdYibm2#otef}4yo4xtw;#T4F&(ZACCAvZR z2k30%wnT=TlqEVum)++OU!)H1w-zeMJHJ$b&@NF{)l${$!Gnb)a;Nl35+pioa3T|5 zSpvJo%Ca`e3Zc)4!F%tOs~k zqWHK$&ax|=E4a@Ekko~)W#@{jrT9XD&TA|Zs3MTOu}Ggi$vf+s#P>os73V2bey`II c+Bus&-)aBw>-xh7B(tsSH+z5o)tx_l3&{JRxBvhE literal 0 HcmV?d00001 diff --git a/resources/zoom-in.png b/resources/zoom-in.png new file mode 100644 index 0000000000000000000000000000000000000000..3483e864a04b6ea5d0fb16dc29afa0f1165e3eda GIT binary patch literal 21122 zcmeHP&2Qtz6{m|LNE`%l&_jz}LMSMZBBlAEZ$ehEwRUR<)yD9;i1$=e=75 zwMGs>dMbMBAt{Oi@n2AE&pjlU0!2}v+rOZ>wig>kS|BI)J(4pT)092792pDD1D^Oe z^WN`0{^o-t9rUY>hd+63@%xL4qP(`g*4l)tiu&?P@EIN*eFc|ShHH;QMS1l*s0+&P ze*Zm1x%W4JYdhL*|I~Ja{<7l*9kM*`55Zee8t;yWj{Af}YKQFlgO$R`pFS_BzPD2N zpxidv!&S29uN{rZqoapg?$Hys?iJo`E;hzC0Q5=ZsN;Tb5ZdFFLX2yJjm>&Nja{NA zD}{TQP~C2CsH?$xYMj%ZJ6~V6>~7^?F@5EZwp+@X*4igUA_cgYc~cgyOVF z=#KnhT+SGze4ffJJ@m40Uta(DQ;km&FYCN4>Z-&(%qf z^vNI!AB5bgz2QnK!;iD69IZI(N?-hMwfbr{`0018q{b0fp8r$eG|k}%jG zx#a!nPaj5`WHLGeP~e^m6#3mLIM_3l1Tyxggket-7SE|M>joVQb#+yJ`vZUA1&84e8+z7zGG``0q~%1U33Ixl8D-6?ZCM6PXuD{=V-#(} z;6M`33`RTf{O;2n49l{uI*-A5W-(w5dQRjBq42&Oj_2ClVAOY_rr&pVi9Q_cHuOm& z=gDTKy&Cj_5tK!m#fF~O%tghs)m|Tjkuz|~daDTy%f9c~W~bDx7?rYCD|TvH*(e!W ztz#0+a!RFAt=cJhbvGul-R8qDK(_*SA6Hxo?E$n?>6*1J@w95iG&IXBm9=`g?r9cr zT+1t0>h&6f=E5&Pzd!O}w{&`(4_1HO6ge;#Qmy$ROwFgUGU< zDz4V;mg-u~@(hhQ)mpV~)k>DjwxFAC5$E2Qa?qOY%)81J8wu_;Y~!J`^KNz(kBt25 z>?>TAj3zbSNnf02o_Qw~J9y2$ld?nXi@hk51Hk!H7(JI>JhkEX130j@l8N~MU($Gf zfQfg-Aq~!1@D<7Cc0qbj7TrWM;pg5HDY|#lvvN`#7oLY6%z9i-vgE)_vQg$ag1M7f z1HUucaNdTqUwja1nhpIz8;2J6ZR5GQw;!L2tCj(xoA{ZA^4;0c$Crol-PzDdUy&l1jIiy)Bmy6|wo^8%XZ1`i++iv;r9Vx_EAhNMe`CFUdPVpND2k}eUJn2)53Q6XYTx0(rf7?Lg#mY9#Ei%}tBNV-H=Vm^{CMumtW=@May`AE7L6(WYDON1rnBk5vP zh!~PC5tf*bq>E7@Vo16~SYkesE=GljA?XrfiTOyn7!@Lhq)UV)<|FB1REQXt(zQ7G ziv}`)|7AFYKVXPXKK>B?yg_x>HrtAF^aDlt=$DG}^%-3Mr6~J`qWpVDQS9F;%6Eg` z{QS=k6lKX+Z{6D(FDUBLKTj6$pC2v}75d%>-2hzz1-w|E!{;gJGtfVRehGT3q5|4y zpzt6q`KAM_QPblMetQeTXr@z-WTg#eT$6 zL51ZQJSi|fIZK{WPIIv<`m>wKuwX33IR;xuRPdrfe+Byj?bx3VKf5Mv$(*2#7z>IR z6i)^FN*RI&4S0`&@mK5@DFB^7aAHzC#J*C#01q1QMhbFa%<~H1;xIm*6L7^9L-C%0 zeWm;zJZL~X_IRI7c-4IpgD~-gqTa z6fFX;H#v~dc-#dI&}$1aaSBR-M6Ve0Q6}yL?h)_WqC&(msAzKZRY6gngJ$D`xaS5R zD#Q#ypMmngXk*(DR0ZY5fSXg$Y!RRFPT#b>lT!c|^f~Af=v)NZ$+Cd=I5}0&xyUhO z$twaUCl1wIR|K}rr3f7J=TnNn;h2l4kmVFKkBPYyfJu<amOV{`MLbUn g!Q@K|P}JGC--%v+^FROnH9D=|f7trNk9R))KQX%D9{>OV literal 0 HcmV?d00001 diff --git a/resources/zoom-out.png b/resources/zoom-out.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba37f3e9aff03c747f17298868f22fefde8e23d GIT binary patch literal 20449 zcmeHP&u`<#6{d@zNSvfF&_j!!1_}x^NM(|exE2Xni>lvh*G0UinkGj!vy#Y? zw5|0iXivTNkQ7CL_%A57KyN)Hm!7);dT*}nWqs%+MFHnMiZdF~k~~^FS`?T8p67Aq zeeXSf^OFbpciRtt{`T^ZmNiX#duy|`12sW;{k!ltIXn9gRBuF^j}uLM^ZO`E+8;mt zp{Ct^FWB8n_u9X3ys)?G`r!dx9rPlw*0jdmLF9T*Xi5&~VbEVMz4+_rB@+1Sr4OvO z(T+CgQLuRy(?@3ycfGSGp6!?JHkTU%2ORWh>XJdP+fSUqdMWekfR4?2iDV|}ll9U) z3`q9c+hik*DX~_qvS*kzvSzQEmRYNtKP45ztm;NpH>+i{;uyALS|l%}<}zrF*zY(y ztp|BHcv>$VrD^2o`swNE>S=W~j1P6wwr$<0=#@$tEXv8#e(Da&{p6jY6XvHy6E6;; zGzj|y{kjL?ak^eAVIW@e_v%GFP(R7J0~Ymx8|mh%p-%$&9>+w-aW_lN_jKB&J=#wb zz?loyw;vavya@TH;f@I+N?J8NzDQ(o2|}PKS|xbN4Hu{Xjlyb->KEDHP^gTE7MNhEm!@TU9Q)C zx9nSn>suY$rnZ}r*lvsPE3R9icZ@48ckP4gx>u>%_CdYu-ZA~MPit#s+c#lD>ePJL zi%et9sx#LD{EF-M;{bL`w=39S_Vb3A;O0uG%^-oP`Ba#)Fmbc}@Dcs>cq{AZ2HCzA zxp6{q)vlM=vgI2g-{%mMt$xS#a7S!nu@3$6~J9Lq!h0(^Rm(<9oS zwV;NsGOOuMlCYDWx-q?X2y^0^Wj=H`jwpI==y-T^gKuFB68Ge0BVZhOCM=VBdCjiS zGBs-TvTgbmICu@qu&g!Pv|t~)*$9knN3UcAMswFYa{GtWZ|dx&Si=Gb%?tY{G@fVa zzyfvQwnXEk*@?p*aigdkcrGqO{iN^b*A2dnk~Ad3Ry?F!@Ug&m^=TZ;Gew0gIZfpM z?457CDCN#IwJ7rwX1KqOA9Cz$zIrI)^$YF;t>MIcfXfND=j+cvIL6=x>Iml$yNAeb zq6PTaGR(dEFMAakCMUorc@J-T8yQBK;ARw!F)t7-9DEJDk~?snful9sznW%4ztSdn z%lh{4TGBnvt{rO?1B!0q-yAA-7om@5L&feQbcFn6KS-OEJX)byK;d`8@Mil6zLjb7 zj%8J?hF)wgBDRA8?e4V#xPm5lv8qC(3{&iw2z)#ZD0Jk&;X)CvdPKAu3=#pWH z+bFs?6*7vVONJ$Gqv+yP$S8^~8J4(>qKi`@qbRy$SmHK{E>4AvqUe%giQ6c;I2AIA zqDzJ)ZlmbpRLCfbE*X}%jiQTFA)_d|WLV-hiY`utjH2k0VTs!)x;PawilR$~C2phW z;#9~eiY^(JxQ(KVQz4@$x@1`5Hi|Azg^V(juI14$;AtOz_I?V#Z$JBT?;r5nc;apD zv^DMQ$C~!hZ#C`fOQ`>)X~%}9{d-^2oIhyV55nL7>TeG;ZN=DX-P;{3X=LS}FP89! z^)m{AzV|`4K~_M(Usj&O-wTjuAb$q=3glJ`0dJpyz>7!;+OB}yO4$Z4FF<62Gdsi} z_C{qN(99v$e*v*U-U3;=yu8#I)4Tf{K@ z+)NMvGupof9sg^@Ytw=j+tD`1AQqEAUj#(DoP#CH{t4*P!C5kh0YNPDa}K&xAz;No zIG)$i&Vm+e#Da)(g23~&B?1eUfL(Mt?=$$qiOKw-?`z8!V8H-yVL&J!3vI0Ly87cB ziz|lNK0{~MmA``l17u4LpYs(bT@NwnCR?J+ANrnIa6M-zw1Q~a*1WXD@|cMo>s$h) zh!;9DpThH)`kk?-SMY!de97X%o6pRa+0Cj8KDh5`7);soS-tXQNFY5nYhTGmg!G&XNi2LT#smlm&IM%RHVz~7ML^~%+hEOx;-<$j&a0Oy z`+#CeV2yJE_x5=%Bn*$cpaC*>K_)Ihm?PO5F&`ChcrQSIa~A@La}e3!XiGq_JO?S_ z!mQ^d{t&=KAkRQV$Eagl1VTW>V!*=%NHK}eM5Aw8-=B~GCiFST3dlkVvQuOMpK)>$ zkcE_Uh%zY&oSZmR3n^bflu1co+d`7SF@HWK2^@}v6arB$KqfJ +#include + +class PrintOption : public QObject +{ + Q_OBJECT + +public: + explicit PrintOption(QObject *parent = 0); + +public slots: + QString preamble() const; + void setPreamble(const QString &preamble); + + QString commentary() const; + void setCommentary(const QString &commentary); + + void setColumnHidden(int column, bool isHidden); + bool isColumnHidden(int column) const; + + int hiddenColumnCount(); + + void setColumnAggregative(int column, bool isAggregative); + bool isColumnAggregative(int column) const; + + void setRowHidden(int row, bool isHidden); + bool isRowHidden(int row) const; + + void setAggregationEntryHidden(const QString &entry, bool isHidden); + bool isAggregationEntryHidden(const QString &) const; + + void setColumnRemoved(int column, bool isRemoved); + bool isColumnRemoved(int column) const; + + void setCurrentAggregativeColumn(int column); + int currentAggregativeColumn() const; + + void setMajorColumn(int column); + int majorColumn() const; + +private: + QString m_preamble; + QString m_commentary; + + QMap m_hiddenRowMap; + QMap m_hiddenColumnMap; + QMap m_aggregativeColumnMap; + QMap m_removedColumnMap; + + QMap m_hiddenAggregationEntryMap; + + int m_majorColumn; + int m_currentAggregativeColumn; +}; + +#endif // PRINTOPTION_H diff --git a/structures/printoption.cpp b/structures/printoption.cpp new file mode 100644 index 0000000..78ce66b --- /dev/null +++ b/structures/printoption.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "printoption.h" + +PrintOption::PrintOption(QObject *parent) : + QObject(parent), + m_majorColumn(1), + m_currentAggregativeColumn(-1) +{} + +QString PrintOption::preamble() const +{ + return m_preamble; +} + +void PrintOption::setPreamble(const QString &preamble) +{ + m_preamble = preamble; +} + +QString PrintOption::commentary() const +{ + return m_commentary; +} + +void PrintOption::setCommentary(const QString &commentary) +{ + m_commentary = commentary; +} + +void PrintOption::setColumnHidden(int column, bool isHidden) +{ + m_hiddenColumnMap.insert(column, isHidden); +} + +bool PrintOption::isColumnHidden(int column) const +{ + return m_hiddenColumnMap.value(column, false); +} + +int PrintOption::hiddenColumnCount() +{ + return m_hiddenColumnMap.keys(true).size(); +} + +void PrintOption::setColumnAggregative(int column, bool isAggregative) +{ + m_aggregativeColumnMap.insert(column, isAggregative); +} + +bool PrintOption::isColumnAggregative(int column) const +{ + return m_aggregativeColumnMap.value(column, false); +} + +void PrintOption::setRowHidden(int row, bool isHidden) +{ + m_hiddenRowMap.insert(row, isHidden); +} + +bool PrintOption::isRowHidden(int row) const +{ + return m_hiddenRowMap.value(row, false); +} + +void PrintOption::setAggregationEntryHidden(const QString &entry, bool isHidden) +{ + m_hiddenAggregationEntryMap.insert(entry, isHidden); +} + +bool PrintOption::isAggregationEntryHidden(const QString &entry) const +{ + return m_hiddenAggregationEntryMap.value(entry, false); +} + +void PrintOption::setColumnRemoved(int column, bool isRemoved) +{ + m_removedColumnMap.insert(column, isRemoved); +} + +bool PrintOption::isColumnRemoved(int column) const +{ + return m_removedColumnMap.value(column, false); +} + +void PrintOption::setCurrentAggregativeColumn(int column) +{ + m_currentAggregativeColumn = column; + + m_hiddenAggregationEntryMap.clear(); +} + +int PrintOption::currentAggregativeColumn() const +{ + return m_currentAggregativeColumn; +} + +void PrintOption::setMajorColumn(int column) +{ + m_majorColumn = column; +} + +int PrintOption::majorColumn() const +{ + return m_majorColumn; +} diff --git a/structures/richsqlmodel.cpp b/structures/richsqlmodel.cpp new file mode 100644 index 0000000..cb7c0e6 --- /dev/null +++ b/structures/richsqlmodel.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "richsqlmodel.h" + +#include "abstractrelation.h" + +RichSqlModel::RichSqlModel(QObject *parent, QSqlDatabase db) : + QSqlTableModel(parent, db) +{} + +void RichSqlModel::setRelation(int column, AbstractRelation *relation) +{ + m_relationMap.insert(column, relation); +} + +AbstractRelation *RichSqlModel::relation(int column) const +{ + return m_relationMap.value(column, NULL); +} + +QVariant RichSqlModel::data(const QModelIndex &idx, int role) const +{ + if (role == Qt::DisplayRole) { + if (m_relationMap.find(idx.column()) == m_relationMap.end()) { + return QSqlTableModel::data(idx, role); + } else { + return m_relationMap.value(idx.column())->forwardLookup(QSqlTableModel::data(idx).toLongLong()); + } + } else { + return QSqlTableModel::data(idx, role); + } + return QVariant(); +} diff --git a/structures/richsqlmodel.h b/structures/richsqlmodel.h new file mode 100644 index 0000000..31da46d --- /dev/null +++ b/structures/richsqlmodel.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef RICHSQLMODEL_H +#define RICHSQLMODEL_H + +#include + +class AbstractRelation; + +class RichSqlModel : public QSqlTableModel +{ + Q_OBJECT + +public: + explicit RichSqlModel(QObject *parent = 0, QSqlDatabase db = QSqlDatabase()); + + void setRelation(int column, AbstractRelation *); + + AbstractRelation *relation(int column) const; + + QVariant data(const QModelIndex &idx, int role) const; + +private: + QMap m_relationMap; + QList m_hiddenColumnList; + int m_columnCollapsed; +}; + +#endif // RICHSQLMODEL_H diff --git a/translations/ar.ts b/translations/ar.ts new file mode 100644 index 0000000..4258a60 --- /dev/null +++ b/translations/ar.ts @@ -0,0 +1,825 @@ + + + + + CompetitorWidget + + + Competition + المسابقة + + + + Competitor + المتسابق + + + + Please select a competition first. + أولاً اختر منافسة من فضلك + + + + EmployeeWidget + + + Job + الوظيفة + + + + Employee + الموظف + + + + Please select a job first. + أولاً اختر وظيفة من فضلك + + + + MainWidget + + + + Furqan + فرقان + + + + &Add + &إضافة + + + + &Modify + &تعديل + + + + &Remove + &حذف + + + + &Print + &طباعة + + + + Classes + الصفوف + + + + Courses + المواد + + + + Students + الطلاب + + + + Teachers + المعلمون + + + + Teaching + التعليم + + + + Results of Courses + نتائج المواد + + + + Studies of Quran + دراسات القرآن + + + + Competitions + المسابقات + + + + Competitors + المتسابقون + + + + Jobs + الوظائف + + + + Employees + الموظفون + + + + Setting + الضبط + + + + MapHandler + + + + + + + None + بلا + + + + Male + ذكر + + + + Female + أنثى + + + + Basic + مبتدئ + + + + Intermediate + متوسط + + + + Advanced + متقدم + + + + First + الأول + + + + Second + الثاني + + + + Daily + يومية + + + + Weekly + أسبوعية + + + + Quarterly + فصلية + + + + Reading + قراءة + + + + Memorizing + حفظ + + + + Reviewing + مراجعة + + + + ModelHandler + + + + + + + + + + + + + ID + معرف + + + + + + + Name + الاسم + + + + + Level + المستوى + + + + Semester + الفصل + + + + + + Full Name + الاسم الكامل + + + + + + Father Name + اسم الأب + + + + + + Gender + الجنس + + + + + + Birth Place + مكان الولادة + + + + + + Birth Date + تاريخ الولادة + + + + + + Residency + مكان الإقامة + + + + + + Nationality + الجنسية + + + + + + National Number + الرقم الوطني + + + + + + Mobile + موبايل + + + + Father Job + عمل الأب + + + + + Class + الصف + + + + Qualification + المؤهلات + + + + Experience + الخبرة + + + + Teacher + المعلم + + + + + Course + المادة + + + + + + Student + الطالب + + + + Result + النتيجة + + + + Recital Type + التلاوة + + + + From Page + من صفحة + + + + To Page + إلى صفحة + + + + + Date + التاريخ + + + + Type + النوع + + + + Part(s) + الأجزاء + + + + Competition + المسابقة + + + + Rank + الترتيب + + + + Job + الوظيفة + + + + Other Job + عمل آخر + + + + Header + رأسية + + + + Cell + خلية + + + + PrintDialog + + + + Print + طباعة + + + + Close + إغلاق + + + + Shown Columns + الأعمدة المرئية + + + + Aggregative Columns + تجميع وفق عمود + + + + Aggragative Column Entries + مفردات عمود التجميع المرئية + + + + Shown Rows + الأسطر المرئية + + + + None + بلا + + + + Preamble + التوطئة + + + + Table + الجدول + + + + Commentary + التعقيب + + + + QObject + + + Program couldn't open the current database, please select another one + تعثر فتح قاعدة البيانات الحالية ، يرجى اختيار أخرى أو إنشاء جديدة + + + + Database is damaged, Program cannot proceed + قاعدة البيانات معطوبة ، لا يمكن إتمام العملية + + + + QuranWidget + + + Student + الطالب + + + + Recital + المتابعة + + + + Please select a student first. + أولاً اختر طالباً من فضلك + + + + RelationalDelegate + + + Database Error + خطأ متعلق بقاعدة البيانات + + + + ResultWidget + + + Course + المادة + + + + Result + النتيجة + + + + SettingWidget + + + General + عام + + + + + Printer + الطابعة + + + + Report + التقرير + + + + Database + قاعدة البيانات + + + + Path: + المسار: + + + + + + ... + ... + + + + Backup + نسخ + + + + Change + ربط + + + + Create + إنشاء + + + + Language + اللغة + + + + Paper Size + حجم الورق + + + + A4 + A4 + + + + A5 + A5 + + + + Color Mode + نمط اللون + + + + Grayscale + تدرج الرمادي + + + + Color + ملون + + + + Orientation + التوجيه + + + + Portrait + طولي + + + + Landscape + عرضي + + + + Margins + الهامش + + + + Top + أعلى + + + + + + + + + mm + مم + + + + Bottom + أسفل + + + + Right + يمين + + + + Left + يسار + + + + Header + رأسية + + + + None + بلا + + + + Image + صورة + + + + Width + عرض + + + + Height + ارتفاع + + + + Arabic + عربي + + + + English + إنكليزي + + + + Select a database + إختر قاعدة بيانات + + + + Program cannot use the selected database + لا يمكن استخدام قاعدة البيانات المختارة + + + + Database Changed + تم تغيير قاعدة البيانات + + + + A database with the same name exists ! + يوجد قاعدة بيانات بنفس الاسم ! + + + + Select where to save the back up + إختر مكاناً لحفظ النسخة الإحتياطية + + + + + Process cannot complete, an error occured + Process couldn't complete, an error occured + حدث خطأ ، لا يمكن إتمام العملية + + + + Backup Created + تم أخذ نسخة إحتياطية + + + + Select where to save the new database + إختر مكاناً لحفظ قاعدة البيانات الجديدة + + + + Database Created + تم إنشاء قاعدة البيانات + + + + StudentWidget + + + Class + الصف + + + + Student + الطالب + + + + Please select a class first. + أولاً اختر صفاً من فضلك + + + + TeacherWidget + + + Teacher + المعلم + + + + TeachingWidget + + + Teacher + المعلم + + + + Teaching + التعليم + + + + Please select a teacher first. + أولاً اختر معلماً من فضلك + + + + TextEditor + + + Bold + غامق + + + + Ctrl+B + + + + + Italic + مائل + + + + Ctrl+I + + + + + Underline + خط تحتي + + + + Ctrl+U + + + + + Color + لون + + + + UniqueDelegate + + + Database Error + خطأ متعلق بقاعدة البيانات + + + diff --git a/translations/en.ts b/translations/en.ts new file mode 100644 index 0000000..1e19ecb --- /dev/null +++ b/translations/en.ts @@ -0,0 +1,825 @@ + + + + + CompetitorWidget + + + Competition + + + + + Competitor + + + + + Please select a competition first. + + + + + EmployeeWidget + + + Job + + + + + Employee + + + + + Please select a job first. + + + + + MainWidget + + + + Furqan + + + + + &Add + + + + + &Modify + + + + + &Remove + + + + + &Print + + + + + Classes + + + + + Courses + + + + + Students + + + + + Teachers + + + + + Teaching + + + + + Results of Courses + + + + + Studies of Quran + + + + + Competitions + + + + + Competitors + + + + + Jobs + + + + + Employees + + + + + Setting + + + + + MapHandler + + + + + + + None + + + + + Male + + + + + Female + + + + + Basic + + + + + Intermediate + + + + + Advanced + + + + + First + + + + + Second + + + + + Daily + + + + + Weekly + + + + + Quarterly + + + + + Reading + + + + + Memorizing + + + + + Reviewing + + + + + ModelHandler + + + + + + + + + + + + + ID + + + + + + + + Name + + + + + + Level + + + + + Semester + + + + + + + Full Name + + + + + + + Father Name + + + + + + + Gender + + + + + + + Birth Place + + + + + + + Birth Date + + + + + + + Residency + + + + + + + Nationality + + + + + + + National Number + + + + + + + Mobile + + + + + Father Job + + + + + + Class + + + + + Qualification + + + + + Experience + + + + + Teacher + + + + + + Course + + + + + + + Student + + + + + Result + + + + + Recital Type + + + + + From Page + + + + + To Page + + + + + + Date + + + + + Type + + + + + Part(s) + + + + + Competition + + + + + Rank + + + + + Job + + + + + Other Job + + + + + Header + + + + + Cell + + + + + PrintDialog + + + + Print + + + + + Close + + + + + Shown Columns + + + + + Aggregative Columns + + + + + Aggragative Column Entries + + + + + Shown Rows + + + + + None + + + + + Preamble + + + + + Table + + + + + Commentary + + + + + QObject + + + Program couldn't open the current database, please select another one + + + + + Database is damaged, Program cannot proceed + + + + + QuranWidget + + + Student + + + + + Recital + + + + + Please select a student first. + + + + + RelationalDelegate + + + Database Error + + + + + ResultWidget + + + Course + + + + + Result + + + + + SettingWidget + + + + + ... + + + + + General + + + + + + Printer + + + + + Report + + + + + Database + + + + + Path: + + + + + Backup + + + + + Change + + + + + Create + + + + + Language + + + + + Paper Size + + + + + A4 + + + + + A5 + + + + + Color Mode + + + + + Grayscale + + + + + Color + + + + + Orientation + + + + + Portrait + + + + + Landscape + + + + + Margins + + + + + Top + + + + + + + + + + mm + + + + + Bottom + + + + + Right + + + + + Left + + + + + Header + + + + + None + + + + + Image + + + + + Width + + + + + Height + + + + + Arabic + + + + + English + + + + + Select a database + + + + + Program cannot use the selected database + + + + + Database Changed + + + + + A database with the same name exists ! + + + + + Select where to save the back up + + + + + + Process cannot complete, an error occured + Process couldn't complete, an error occured + + + + + Backup Created + + + + + Select where to save the new database + + + + + Database Created + + + + + StudentWidget + + + Class + + + + + Student + + + + + Please select a class first. + + + + + TeacherWidget + + + Teacher + + + + + TeachingWidget + + + Teacher + + + + + Teaching + + + + + Please select a teacher first. + + + + + TextEditor + + + Bold + + + + + Ctrl+B + + + + + Italic + + + + + Ctrl+I + + + + + Underline + + + + + Ctrl+U + + + + + Color + + + + + UniqueDelegate + + + Database Error + + + + diff --git a/utility/enumeration.h b/utility/enumeration.h new file mode 100644 index 0000000..e3dda93 --- /dev/null +++ b/utility/enumeration.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef ENUMERATION_H +#define ENUMERATION_H + +#include "generalenumeration.h" +#include "sqlenumeration.h" +#include "mapenumeration.h" + +enum HeaderType { + None, + Image +}; + +enum Language { + Arabic, + English +}; + +#endif // ENUMERATION_H diff --git a/utility/generalenumeration.h b/utility/generalenumeration.h new file mode 100644 index 0000000..f1ffb36 --- /dev/null +++ b/utility/generalenumeration.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef GENERALENUMERATION_H +#define GENERALENUMERATION_H + +namespace NS_HeaderType { +enum HeaderType { + None, + Image +}; +} + +namespace NS_Language { +enum Language { + Arabic, + English +}; +} + +#endif // GENERALENUMERATION_H diff --git a/utility/mapenumeration.h b/utility/mapenumeration.h new file mode 100644 index 0000000..dbd20b2 --- /dev/null +++ b/utility/mapenumeration.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef MAPENUMERATION_H +#define MAPENUMERATION_H + +namespace NS_MAP { +enum MAP{ + GENDER, + LEVEL, + SEMESTER, + COMPETITION, + RECITAL +}; +} + +namespace NS_GENDER { +enum { + NONE, + MALE, + FEMALE +}; +} + +namespace NS_LEVEL { +enum { + NONE, + BASIC, + INTERMEDIATE, + ADVANCED +}; +} + +namespace NS_SEMESTER { +enum { + NONE, + FIRST, + SECOND +}; +} + +namespace NS_COMPETITION_TYPE { +enum { + NONE, + DAILY, + WEEKLY, + QUARTERLY +}; +} + +namespace NS_RECITAL { +enum { + NONE, + READING, + MEMORIZING, + REVIEWING +}; +} + +#endif // MAPENUMERATION_H diff --git a/utility/resourcemanager.cpp b/utility/resourcemanager.cpp new file mode 100644 index 0000000..f81f30c --- /dev/null +++ b/utility/resourcemanager.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "resourcemanager.h" + +#include +#include +#include + +TranslatorHandler *RscMgr::translatorHandler() +{ + return TranslatorHandler::singleton(); +} + +SettingHandler *RscMgr::settingHandler() +{ + return SettingHandler::singleton(); +} + +DatabaseHandler *RscMgr::databaseHandler() +{ + return DatabaseHandler::singleton(); +} + +MapHandler *RscMgr::mapHandler() +{ + return MapHandler::singleton(); +} + +ModelHandler *RscMgr::modelHandler() +{ + return ModelHandler::singleton(); +} + +PrinterHandler *RscMgr::printHandler() +{ + return PrinterHandler::singleton(); +} + +Qt::LayoutDirection RscMgr::dir() +{ + switch (RscMgr::settingHandler()->interfaceLanguage()) { + case NS_Language::Arabic: + return Qt::RightToLeft; + case NS_Language::English: + return Qt::LeftToRight; + default: + break; + } + + return Qt::LeftToRight; +} + +void RscMgr::issueMessage(const QString &text, bool ok) +{ + QMessageBox msg; + msg.setLayoutDirection(RscMgr::dir()); + msg.setText(QString("%1").arg(text)); + msg.setWindowFlags(Qt::Window | Qt::CustomizeWindowHint); + msg.setIconPixmap(ok ? QPixmap(":/emotion-happy") : QPixmap(":/emotion-sad")); + msg.setStyleSheet("QMessageBox {" + " background-color: lightgray;" + "}" + "QPushButton {" + " background: transparent;" + " padding: 5px;" + "}" + "QPushButton:hover {" + " color: white;" + " border: 1px solid darkgray;" + "}" + ); + + QPushButton *backButton = new QPushButton("OK"); + backButton->setFocusPolicy(Qt::NoFocus); + backButton->setIconSize(QSize(32, 32)); + backButton->setToolTip("Enter"); + + msg.addButton(backButton, QMessageBox::AcceptRole); + msg.exec(); +} + + +QSplashScreen *RscMgr::createSplashScreen() +{ + QSplashScreen *splashScreen = new QSplashScreen; + splashScreen->setAttribute(Qt::WA_DeleteOnClose); + splashScreen->setWindowFlags(Qt::Window | Qt::CustomizeWindowHint); + switch (RscMgr::settingHandler()->interfaceLanguage()) { + case NS_Language::Arabic: + splashScreen->setPixmap(QPixmap(":/splash-ar")); + break; + case NS_Language::English: + splashScreen->setPixmap(QPixmap(":/splash-en")); + break; + default: + break; + } + splashScreen->setWindowModality(Qt::ApplicationModal); + return splashScreen; +} diff --git a/utility/resourcemanager.h b/utility/resourcemanager.h new file mode 100644 index 0000000..3ed6cac --- /dev/null +++ b/utility/resourcemanager.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef RESOURCEMANAGER_H +#define RESOURCEMANAGER_H + +#include "settinghandler.h" +#include "translatorhandler.h" +#include "databasehandler.h" +#include "maphandler.h" +#include "modelhandler.h" +#include "printerhandler.h" + +class QSqlDatabase; +class QSplashScreen; + +namespace RscMgr { + +SettingHandler *settingHandler(); + +TranslatorHandler *translatorHandler(); + +DatabaseHandler *databaseHandler(); + +MapHandler *mapHandler(); + +ModelHandler *modelHandler(); + +PrinterHandler *printHandler(); + +Qt::LayoutDirection dir(); + +void issueMessage(const QString &text, bool ok); + +QSplashScreen *createSplashScreen(); +} + +#endif // RESOURCEMANAGER_H diff --git a/utility/settingenumeration.h b/utility/settingenumeration.h new file mode 100644 index 0000000..72bed4d --- /dev/null +++ b/utility/settingenumeration.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef SETTINGENUMERATION_H +#define SETTINGENUMERATION_H + +namespace NS_Setting { +enum SettingEntry { + InterfaceLanguage, + + DatabasePath, + + PrinterName, + PrinterPaperSize, + PrinterColorMode, + PrinterOrientation, + PrinterTopMargin, + PrinterBottomMargin, + PrinterRightMargin, + PrinterLeftMargin, + + HeaderType, + HeaderImagePath, + HeaderWidth, + HeaderHeight, + HeaderAlignment, + + PreambleFontFamily, + PreambleFontSize, + PreambleFontColor, + + CommentaryFontFamily, + CommentaryFontSize, + CommentaryFontColor, + + TableFontFamily, + TableFontSize, + TableFontColor +}; +} + +#endif // SETTINGENUMERATION_H diff --git a/utility/sqlenumeration.h b/utility/sqlenumeration.h new file mode 100644 index 0000000..2c7d2d1 --- /dev/null +++ b/utility/sqlenumeration.h @@ -0,0 +1,159 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef SQLENUMERATION_H +#define SQLENUMERATION_H + +namespace NS_TABLE { +enum TABLE { + CLASS, + COURSE, + STUDENT, + TEACHER, + TEACHING, + RESULT, + QURAN, + COMPETITION, + COMPETITOR, + JOB, + EMPLOYEE +}; +} + +namespace NS_CLASS { +enum { + ID, + NAME, + LEVEL +}; +} + +namespace NS_COURSE { +enum { + ID, + NAME, + SEMESTER +}; +} + +namespace NS_STUDENT { +enum { + ID, + FULL_NAME, + FATHER_NAME, + GENDER, + BIRTH_PLACE, + BIRTH_DATE, + RESIDENCY, + NATIONALITY, + NATIONAL_ID, + MOBILE, + FATHER_JOB, + LEVEL, + CLASS, +}; +} + +namespace NS_QURAN { +enum { + ID, + STUDENT, + RECITAL_TYPE, + FROM_PAGE, + TO_PAGE, + DATE +}; +} + +namespace NS_TEACHER { +enum { + ID, + FULL_NAME, + FATHER_NAME, + GENDER, + BIRTH_PLACE, + BIRTH_DATE, + RESIDENCY, + NATIONALITY, + NATIONAL_ID, + MOBILE, + QUALIFICATION, + EXPERIENCE +}; +} + +namespace NS_JOB { +enum { + ID, + NAME +}; +} + +namespace NS_EMPLOYEE { +enum { + ID, + FULL_NAME, + FATHER_NAME, + GENDER, + BIRTH_PLACE, + BIRTH_DATE, + RESIDENCY, + NATIONALITY, + NATIONAL_ID, + MOBILE, + JOB, + OTHER_JOB +}; +} + +namespace NS_TEACHING { +enum { + ID, + TEACHER, + CLASS, + COURSE +}; +} + +namespace NS_RESULT { +enum { + ID, + COURSE, + STUDENT, + RESULT +}; +} + +namespace NS_COMPETITION { +enum { + ID, + NAME, + TYPE, + PARTS, + DATE +}; +} + +namespace NS_COMPETITOR { +enum { + ID, + COMPETITION, + STUDENT, + RANK +}; +} + +#endif // SQLENUMERATION_H diff --git a/widgets/classwidget.cpp b/widgets/classwidget.cpp new file mode 100644 index 0000000..eddf04c --- /dev/null +++ b/widgets/classwidget.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "classwidget.h" +#include "ui_classwidget.h" + +#include "resourcemanager.h" +#include "uniquedelegate.h" +#include "mapdelegate.h" +#include "printdialog.h" +#include "printoption.h" + +#include + +ClassWidget::ClassWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ClassWidget) +{ + ui->setupUi(this); + + ui->classView->setModel(RscMgr::modelHandler()->model(NS_TABLE::CLASS)); + ui->classView->hideColumn(NS_CLASS::ID); + ui->classView->setItemDelegateForColumn(NS_CLASS::NAME, new UniqueDelegate(ui->classView)); + ui->classView->setItemDelegateForColumn(NS_CLASS::LEVEL, new MapDelegate(ui->classView)); + ui->classView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); +} + +ClassWidget::~ClassWidget() +{ + delete ui; +} + +void ClassWidget::add() +{ + QMap map; + map.insert(NS_CLASS::LEVEL, NS_LEVEL::NONE); + + RscMgr::modelHandler()->insertRow(NS_TABLE::CLASS, map); + + const QModelIndex &idx = ui->classView->model()->index(0, NS_CLASS::NAME); + + ui->classView->setCurrentIndex(idx); + ui->classView->edit(idx); +} + +void ClassWidget::modify() +{ + if (!ui->classView->currentIndex().isValid()) + return; + + ui->classView->edit(ui->classView->currentIndex()); +} + +void ClassWidget::remove() +{ + if (!ui->classView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::CLASS, ui->classView->currentIndex().row()); + + ui->classView->setFocus(); + ui->classView->setCurrentIndex(ui->classView->model()->index(0, NS_CLASS::NAME)); +} + +void ClassWidget::print() +{ + PrintOption opt; + + opt.setColumnRemoved(NS_CLASS::ID, true); + opt.setColumnHidden(NS_CLASS::ID, true); + opt.setMajorColumn(NS_CLASS::NAME); + opt.setColumnAggregative(NS_CLASS::LEVEL, true); + opt.setCurrentAggregativeColumn(-1); + + PrintDialog dlg(ui->classView->model(), &opt); + + dlg.exec(); +} diff --git a/widgets/classwidget.h b/widgets/classwidget.h new file mode 100644 index 0000000..bbe74ef --- /dev/null +++ b/widgets/classwidget.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef CLASSWIDGET_H +#define CLASSWIDGET_H + +#include + +namespace Ui { +class ClassWidget; +} + +class ClassWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ClassWidget(QWidget *parent = 0); + + ~ClassWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private: + Ui::ClassWidget *ui; +}; + +#endif // CLASSWIDGET_H diff --git a/widgets/competitionwidget.cpp b/widgets/competitionwidget.cpp new file mode 100644 index 0000000..a424641 --- /dev/null +++ b/widgets/competitionwidget.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "competitionwidget.h" +#include "ui_competitionwidget.h" + +#include "resourcemanager.h" +#include "uniquedelegate.h" +#include "mapdelegate.h" +#include "datedelegate.h" +#include "printdialog.h" +#include "printoption.h" + +CompetitionWidget::CompetitionWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::CompetitionWidget) +{ + ui->setupUi(this); + + ui->competitionView->setModel(RscMgr::modelHandler()->model(NS_TABLE::COMPETITION)); + ui->competitionView->hideColumn(NS_COMPETITION::ID); + ui->competitionView->setItemDelegateForColumn(NS_COMPETITION::NAME, new UniqueDelegate(ui->competitionView)); + ui->competitionView->setItemDelegateForColumn(NS_COMPETITION::TYPE, new MapDelegate(ui->competitionView)); + ui->competitionView->setItemDelegateForColumn(NS_COMPETITION::DATE, new DateDelegate(ui->competitionView)); + ui->competitionView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + ui->competitionView->horizontalHeader()->setSectionResizeMode(NS_COMPETITION::NAME, QHeaderView::Stretch); +} + +CompetitionWidget::~CompetitionWidget() +{ + delete ui; +} + +void CompetitionWidget::add() +{ + RscMgr::modelHandler()->insertRow(NS_TABLE::COMPETITION); + + const QModelIndex &idx = ui->competitionView->model()->index(0, NS_COMPETITION::NAME); + + ui->competitionView->setCurrentIndex(idx); + ui->competitionView->edit(idx); +} + +void CompetitionWidget::modify() +{ + if (!ui->competitionView->currentIndex().isValid()) + return; + + ui->competitionView->edit(ui->competitionView->currentIndex()); +} + +void CompetitionWidget::remove() +{ + if (!ui->competitionView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::COMPETITION, ui->competitionView->currentIndex().row()); + + ui->competitionView->setFocus(); + ui->competitionView->setCurrentIndex(ui->competitionView->model()->index(0, NS_COMPETITION::NAME)); +} + +void CompetitionWidget::print() +{ + PrintOption opt; + + opt.setColumnRemoved(NS_COMPETITION::ID, true); + opt.setColumnHidden(NS_COMPETITION::ID, true); + opt.setMajorColumn(NS_COMPETITION::NAME); + opt.setColumnAggregative(NS_COMPETITION::TYPE, true); + opt.setCurrentAggregativeColumn(-1); + + PrintDialog dlg(ui->competitionView->model(), &opt); + dlg.exec(); +} diff --git a/widgets/competitionwidget.h b/widgets/competitionwidget.h new file mode 100644 index 0000000..d88c184 --- /dev/null +++ b/widgets/competitionwidget.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef COMPETITIONWIDGET_H +#define COMPETITIONWIDGET_H + +#include + +namespace Ui { +class CompetitionWidget; +} + +class CompetitionWidget : public QWidget +{ + Q_OBJECT + +public: + explicit CompetitionWidget(QWidget *parent = 0); + + ~CompetitionWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private: + Ui::CompetitionWidget *ui; +}; + +#endif // COMPETITIONWIDGET_H diff --git a/widgets/competitorwidget.cpp b/widgets/competitorwidget.cpp new file mode 100644 index 0000000..e3bb060 --- /dev/null +++ b/widgets/competitorwidget.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "competitorwidget.h" +#include "ui_competitorwidget.h" + +#include "resourcemanager.h" +#include "sqldelegate.h" +#include "numericdelegate.h" +#include "printdialog.h" +#include "printoption.h" + +#include +#include + +CompetitorWidget::CompetitorWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::CompetitorWidget) +{ + ui->setupUi(this); + + m_competitorProxyModel = new QSortFilterProxyModel(this); + m_competitorProxyModel->setSourceModel(RscMgr::modelHandler()->model(NS_TABLE::COMPETITOR)); + m_competitorProxyModel->setFilterKeyColumn(NS_COMPETITOR::COMPETITION); + + ui->competitorView->setModel(m_competitorProxyModel); + ui->competitorView->hideColumn(NS_COMPETITOR::ID); + ui->competitorView->hideColumn(NS_COMPETITOR::COMPETITION); + ui->competitorView->setItemDelegateForColumn(NS_COMPETITOR::STUDENT, new SqlDelegate(true, ui->competitorView)); + ui->competitorView->setItemDelegateForColumn(NS_COMPETITOR::RANK, new NumericDelegate(new QIntValidator(0, INT_MAX, this), this)); + ui->competitorView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + ui->competitorView->horizontalHeader()->setSectionResizeMode(NS_COMPETITOR::STUDENT, QHeaderView::Stretch); + + ui->competitionView->setModel(RscMgr::modelHandler()->model(NS_TABLE::COMPETITION)); + ui->competitionView->setModelColumn(NS_COMPETITION::NAME); + ui->competitionView->setCurrentIndex(ui->competitionView->model()->index(0, NS_COMPETITION::NAME)); + ui->competitionView->setFixedWidth(ui->competitionView->minimumSizeHint().width() + + ui->competitionView->verticalScrollBar()->sizeHint().width() + + 7); + + connect(ui->competitionView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(adjustToCompetition())); + connect(ui->competitionView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + + adjustToCompetition(); +} + +CompetitorWidget::~CompetitorWidget() +{ + delete ui; +} + +void CompetitorWidget::adjustToCompetition() +{ + m_competitorProxyModel->setFilterRegExp(QString("^%1$").arg(ui->competitionView->currentIndex().data().toString())); +} + +void CompetitorWidget::refresh() +{ + RscMgr::modelHandler()->model(NS_TABLE::COMPETITOR)->select(); + adjustToCompetition(); +} + +void CompetitorWidget::add() +{ + if (!ui->competitionView->currentIndex().isValid()) { + RscMgr::issueMessage(tr("Please select a competition first."), false); + return; + } + + QMap map; + map.insert(NS_COMPETITOR::COMPETITION, + ui->competitionView->currentIndex() + .sibling(ui->competitionView->currentIndex().row(), NS_COMPETITION::ID).data()); + + RscMgr::modelHandler()->insertRow(NS_TABLE::COMPETITOR, map); + + const QModelIndex &idx = ui->competitorView->model()->index(0, NS_COMPETITOR::STUDENT); + + ui->competitorView->setCurrentIndex(idx); + ui->competitorView->edit(idx); +} + +void CompetitorWidget::modify() +{ + if (!ui->competitorView->currentIndex().isValid()) + return; + + ui->competitorView->edit(ui->competitorView->currentIndex()); +} + +void CompetitorWidget::remove() +{ + if (!ui->competitorView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::COMPETITOR, ui->competitorView->currentIndex().row()); + + ui->competitorView->setFocus(); + ui->competitorView->setCurrentIndex(ui->competitorView->model()->index(0, NS_COMPETITOR::STUDENT)); +} + +void CompetitorWidget::print() +{ + PrintOption opt; + + opt.setColumnRemoved(NS_COMPETITOR::ID, true); + opt.setColumnHidden(NS_COMPETITOR::ID, true); + opt.setColumnHidden(NS_COMPETITOR::COMPETITION, true); + opt.setMajorColumn(NS_COMPETITOR::STUDENT); + opt.setColumnAggregative(NS_COMPETITOR::COMPETITION, true); + opt.setColumnAggregative(NS_COMPETITOR::RANK, true); + opt.setCurrentAggregativeColumn(NS_COMPETITOR::COMPETITION); + + PrintDialog dlg(m_competitorProxyModel->sourceModel(), &opt); + + dlg.exec(); +} diff --git a/widgets/competitorwidget.h b/widgets/competitorwidget.h new file mode 100644 index 0000000..56529fa --- /dev/null +++ b/widgets/competitorwidget.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef COMPETITORWIDGET_H +#define COMPETITORWIDGET_H + +#include + +class QSortFilterProxyModel; + +namespace Ui { +class CompetitorWidget; +} + +class CompetitorWidget : public QWidget +{ + Q_OBJECT + +public: + explicit CompetitorWidget(QWidget *parent = 0); + + ~CompetitorWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private slots: + void adjustToCompetition(); + + void refresh(); + +private: + Ui::CompetitorWidget *ui; + + QSortFilterProxyModel *m_competitorProxyModel; +}; + +#endif // COMPETITORWIDGET_H diff --git a/widgets/coursewidget.cpp b/widgets/coursewidget.cpp new file mode 100644 index 0000000..a17d1cf --- /dev/null +++ b/widgets/coursewidget.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "coursewidget.h" +#include "ui_coursewidget.h" + +#include "resourcemanager.h" +#include "mapdelegate.h" +#include "uniquedelegate.h" +#include "printdialog.h" +#include "printoption.h" + +CourseWidget::CourseWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::CourseWidget) +{ + ui->setupUi(this); + + ui->courseView->setModel(RscMgr::modelHandler()->model(NS_TABLE::COURSE)); + ui->courseView->hideColumn(NS_COURSE::ID); + ui->courseView->setItemDelegateForColumn(NS_COURSE::NAME, new UniqueDelegate(ui->courseView)); + ui->courseView->setItemDelegateForColumn(NS_COURSE::SEMESTER, new MapDelegate(ui->courseView)); + ui->courseView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); +} + +CourseWidget::~CourseWidget() +{ + delete ui; +} + +void CourseWidget::add() +{ + QMap map; + map.insert(NS_COURSE::SEMESTER, NS_SEMESTER::NONE); + + RscMgr::modelHandler()->insertRow(NS_TABLE::COURSE, map); + + const QModelIndex &idx = ui->courseView->model()->index(0, NS_COURSE::NAME); + + ui->courseView->setCurrentIndex(idx); + ui->courseView->edit(idx); +} + +void CourseWidget::modify() +{ + if (!ui->courseView->currentIndex().isValid()) + return; + + ui->courseView->edit(ui->courseView->currentIndex()); +} + +void CourseWidget::remove() +{ + if (!ui->courseView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::COURSE, ui->courseView->currentIndex().row()); + + ui->courseView->setFocus(); + ui->courseView->setCurrentIndex(ui->courseView->model()->index(0, NS_COURSE::NAME)); +} + +void CourseWidget::print() +{ + PrintOption opt; + + opt.setColumnRemoved(NS_COURSE::ID, true); + opt.setColumnHidden(NS_COURSE::ID, true); + opt.setMajorColumn(NS_COURSE::NAME); + opt.setColumnAggregative(NS_COURSE::SEMESTER, true); + opt.setCurrentAggregativeColumn(-1); + + PrintDialog dlg(ui->courseView->model(), &opt); + dlg.exec(); +} diff --git a/widgets/coursewidget.h b/widgets/coursewidget.h new file mode 100644 index 0000000..aaf098c --- /dev/null +++ b/widgets/coursewidget.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef COURSEWIDGET_H +#define COURSEWIDGET_H + +#include + +namespace Ui { +class CourseWidget; +} + +class CourseWidget : public QWidget +{ + Q_OBJECT + +public: + explicit CourseWidget(QWidget *parent = 0); + + ~CourseWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private: + Ui::CourseWidget *ui; +}; + +#endif // COURSEWIDGET_H diff --git a/widgets/employeewidget.cpp b/widgets/employeewidget.cpp new file mode 100644 index 0000000..958b739 --- /dev/null +++ b/widgets/employeewidget.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "employeewidget.h" +#include "ui_employeewidget.h" + +#include "resourcemanager.h" +#include "uniquedelegate.h" +#include "mapdelegate.h" +#include "datedelegate.h" +#include "printdialog.h" +#include "printoption.h" + +#include +#include + +EmployeeWidget::EmployeeWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::EmployeeWidget) +{ + ui->setupUi(this); + + m_employeeProxyModel = new QSortFilterProxyModel(this); + m_employeeProxyModel->setSourceModel(RscMgr::modelHandler()->model(NS_TABLE::EMPLOYEE)); + m_employeeProxyModel->setFilterKeyColumn(NS_EMPLOYEE::JOB); + + ui->employeeView->setModel(m_employeeProxyModel); + ui->employeeView->hideColumn(NS_EMPLOYEE::ID); + ui->employeeView->hideColumn(NS_EMPLOYEE::JOB); + ui->employeeView->setItemDelegateForColumn(NS_EMPLOYEE::FULL_NAME, new UniqueDelegate(ui->employeeView)); + ui->employeeView->setItemDelegateForColumn(NS_EMPLOYEE::FATHER_NAME, new UniqueDelegate(ui->employeeView)); + ui->employeeView->setItemDelegateForColumn(NS_EMPLOYEE::GENDER, new MapDelegate(ui->employeeView)); + ui->employeeView->setItemDelegateForColumn(NS_EMPLOYEE::BIRTH_DATE, new DateDelegate(ui->employeeView)); + ui->employeeView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + ui->employeeView->horizontalHeader()->setSectionResizeMode(NS_EMPLOYEE::FULL_NAME, QHeaderView::Stretch); + + ui->jobView->setModel(RscMgr::modelHandler()->model(NS_TABLE::JOB)); + ui->jobView->setModelColumn(NS_JOB::NAME); + ui->jobView->setCurrentIndex(ui->jobView->model()->index(0, NS_JOB::NAME)); + ui->jobView->setFixedWidth(ui->jobView->minimumSizeHint().width() + + ui->jobView->verticalScrollBar()->sizeHint().width() + + 7); + + connect(ui->jobView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(adjustToJob())); + connect(ui->jobView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + + adjustToJob(); +} + +EmployeeWidget::~EmployeeWidget() +{ + delete ui; +} + +void EmployeeWidget::adjustToJob() +{ + m_employeeProxyModel->setFilterRegExp(QString("^%1$").arg(ui->jobView->currentIndex().data().toString())); +} + +void EmployeeWidget::refresh() +{ + RscMgr::modelHandler()->model(NS_TABLE::EMPLOYEE)->select(); + adjustToJob(); +} + +void EmployeeWidget::add() +{ + if (!ui->jobView->currentIndex().isValid()) { + RscMgr::issueMessage(tr("Please select a job first."), false); + return; + } + + QMap map; + map.insert(NS_EMPLOYEE::JOB, + ui->jobView->currentIndex() + .sibling(ui->jobView->currentIndex().row(), NS_JOB::ID).data()); + + RscMgr::modelHandler()->insertRow(NS_TABLE::EMPLOYEE, map); + + const QModelIndex &idx = ui->employeeView->model()->index(0, NS_EMPLOYEE::FULL_NAME); + + ui->employeeView->setCurrentIndex(idx); + ui->employeeView->edit(idx); +} + +void EmployeeWidget::modify() +{ + if (!ui->employeeView->currentIndex().isValid()) + return; + + ui->employeeView->edit(ui->employeeView->currentIndex()); +} + +void EmployeeWidget::remove() +{ + if (!ui->employeeView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::EMPLOYEE, ui->employeeView->currentIndex().row()); + + ui->employeeView->setFocus(); + ui->employeeView->setCurrentIndex(ui->employeeView->model()->index(0, NS_EMPLOYEE::FULL_NAME)); +} + +void EmployeeWidget::print() +{ + PrintOption opt; + opt.setColumnRemoved(NS_EMPLOYEE::ID, true); + opt.setColumnHidden(NS_EMPLOYEE::ID, true); + opt.setColumnHidden(NS_EMPLOYEE::JOB, true); + opt.setMajorColumn(NS_EMPLOYEE::FULL_NAME); + opt.setColumnAggregative(NS_EMPLOYEE::GENDER, true); + opt.setColumnAggregative(NS_EMPLOYEE::JOB, true); + opt.setColumnAggregative(NS_EMPLOYEE::NATIONALITY, true); + opt.setColumnAggregative(NS_EMPLOYEE::RESIDENCY, true); + opt.setCurrentAggregativeColumn(NS_EMPLOYEE::JOB); + + PrintDialog dlg(m_employeeProxyModel->sourceModel(), &opt); + + dlg.exec(); +} diff --git a/widgets/employeewidget.h b/widgets/employeewidget.h new file mode 100644 index 0000000..93793aa --- /dev/null +++ b/widgets/employeewidget.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef EMPLOYEEWIDGET_H +#define EMPLOYEEWIDGET_H + +#include + +class QSortFilterProxyModel; + +namespace Ui { +class EmployeeWidget; +} + +class EmployeeWidget : public QWidget +{ + Q_OBJECT + +public: + explicit EmployeeWidget(QWidget *parent = 0); + + ~EmployeeWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private slots: + void adjustToJob(); + + void refresh(); + +private: + Ui::EmployeeWidget *ui; + + QSortFilterProxyModel *m_employeeProxyModel; +}; + +#endif // EMPLOYEEWIDGET_H diff --git a/widgets/jobwidget.cpp b/widgets/jobwidget.cpp new file mode 100644 index 0000000..c51c184 --- /dev/null +++ b/widgets/jobwidget.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "jobwidget.h" +#include "ui_jobwidget.h" + +#include "resourcemanager.h" +#include "uniquedelegate.h" +#include "printdialog.h" +#include "printoption.h" + +JobWidget::JobWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::JobWidget) +{ + ui->setupUi(this); + + ui->jobView->setModel(RscMgr::modelHandler()->model(NS_TABLE::JOB)); + ui->jobView->hideColumn(NS_JOB::ID); + ui->jobView->setItemDelegateForColumn(NS_JOB::NAME, new UniqueDelegate(ui->jobView)); + ui->jobView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); +} + +JobWidget::~JobWidget() +{ + delete ui; +} + +void JobWidget::add() +{ + RscMgr::modelHandler()->insertRow(NS_TABLE::JOB); + + const QModelIndex &idx = ui->jobView->model()->index(0, NS_JOB::NAME); + + ui->jobView->setCurrentIndex(idx); + ui->jobView->edit(idx); +} + +void JobWidget::modify() +{ + if (!ui->jobView->currentIndex().isValid()) + return; + + ui->jobView->edit(ui->jobView->currentIndex()); +} + +void JobWidget::remove() +{ + if (!ui->jobView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::JOB, ui->jobView->currentIndex().row()); + + ui->jobView->setFocus(); + ui->jobView->setCurrentIndex(ui->jobView->model()->index(0, NS_JOB::NAME)); +} + +void JobWidget::print() +{ + PrintOption opt; + + opt.setColumnRemoved(NS_JOB::ID, true); + opt.setColumnHidden(NS_JOB::ID, true); + opt.setMajorColumn(NS_JOB::NAME); + + PrintDialog dlg(ui->jobView->model(), &opt); + dlg.exec(); +} diff --git a/widgets/jobwidget.h b/widgets/jobwidget.h new file mode 100644 index 0000000..229d854 --- /dev/null +++ b/widgets/jobwidget.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef JOBWIDGET_H +#define JOBWIDGET_H + +#include + +namespace Ui { +class JobWidget; +} + +class JobWidget : public QWidget +{ + Q_OBJECT + +public: + explicit JobWidget(QWidget *parent = 0); + + ~JobWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private: + Ui::JobWidget *ui; +}; + +#endif // JOBWIDGET_H diff --git a/widgets/mainwidget.cpp b/widgets/mainwidget.cpp new file mode 100644 index 0000000..56529e2 --- /dev/null +++ b/widgets/mainwidget.cpp @@ -0,0 +1,250 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "mainwidget.h" +#include "ui_mainwidget.h" + +#include "resourcemanager.h" +#include "classwidget.h" +#include "coursewidget.h" +#include "studentwidget.h" +#include "teacherwidget.h" +#include "teachingwidget.h" +#include "resultwidget.h" +#include "quranwidget.h" +#include "competitionwidget.h" +#include "competitorwidget.h" +#include "jobwidget.h" +#include "employeewidget.h" +#include "settingwidget.h" + +#include + +MainWidget::MainWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::MainWidget) +{ + ui->setupUi(this); + + // no need to initialize here beacause a ChangeEvent will be posted during the startup, + // however, to for the main widget to show up complete at the very beginning we initialize it here. + initialize(); + + connect(ui->listWidget, SIGNAL(currentRowChanged(int)), + ui->stackedWidget, SLOT(setCurrentIndex(int))); + + connect(ui->listWidget, SIGNAL(currentRowChanged(int)), + this, SLOT(setControlFrameVisible(int))); + + setWindowTitle(tr("Furqan")); + setWindowFlags(Qt::FramelessWindowHint); + setWindowState(Qt::WindowFullScreen); +} + +MainWidget::~MainWidget() +{ + delete ui; +} + +void MainWidget::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + //the layout direction doesn't change automatically (maybe due to a bug), + //so we manually change it. + setLayoutDirection(RscMgr::dir()); + + ui->retranslateUi(this); + + initialize(); + + break; + default: + break; + } +} + +void MainWidget::setControlFrameVisible(int index) +{ + if (index == ui->listWidget->count() - 1) { + ui->controlFrame->hide(); + } else { + ui->controlFrame->show(); + ui->addButton->setVisible(ui->listWidget->currentRow() != NS_TABLE::RESULT); + ui->modifyButton->setVisible(ui->listWidget->currentRow() != NS_TABLE::RESULT); + ui->removeButton->setVisible(ui->listWidget->currentRow() != NS_TABLE::RESULT); + } +} + +void MainWidget::initialize() +{ + allocateWidgets(); + populateListWidget(); + populateStackWidget(); + + ui->listWidget->setCurrentRow(0); + ui->stackedWidget->setCurrentIndex(0); + + ui->listWidget->setMinimumWidth(ui->listWidget->sizeHintForColumn(0) + 7); +} + +void MainWidget::allocateWidgets() +{ + m_classWidget = new ClassWidget; + m_courseWidget = new CourseWidget; + m_studentWidget = new StudentWidget; + m_teacherWidget = new TeacherWidget; + m_teachingWidget = new TeachingWidget; + m_resultWidget = new ResultWidget; + m_quranWidget = new QuranWidget; + m_competitionWidget = new CompetitionWidget; + m_competitorWidget = new CompetitorWidget; + m_jobWidget = new JobWidget; + m_employeeWidget = new EmployeeWidget; + m_settingWidget = new SettingWidget; +} + +void MainWidget::populateListWidget() +{ + //the listWidget might contain items, + //actually this function would be invoked once the user requests to change language. + ui->listWidget->clear(); + + ui->listWidget->insertItem(NS_TABLE::CLASS, tr("Classes")); + ui->listWidget->insertItem(NS_TABLE::COURSE, tr("Courses")); + ui->listWidget->insertItem(NS_TABLE::STUDENT, tr("Students")); + ui->listWidget->insertItem(NS_TABLE::TEACHER, tr("Teachers")); + ui->listWidget->insertItem(NS_TABLE::TEACHING, tr("Teaching")); + ui->listWidget->insertItem(NS_TABLE::RESULT, tr("Results of Courses")); + ui->listWidget->insertItem(NS_TABLE::QURAN, tr("Studies of Quran")); + ui->listWidget->insertItem(NS_TABLE::COMPETITION, tr("Competitions")); + ui->listWidget->insertItem(NS_TABLE::COMPETITOR, tr("Competitors")); + ui->listWidget->insertItem(NS_TABLE::JOB, tr("Jobs")); + ui->listWidget->insertItem(NS_TABLE::EMPLOYEE, tr("Employees")); + ui->listWidget->addItem(tr("Setting")); +} + +void MainWidget::populateStackWidget() +{ + while (ui->stackedWidget->count() > 0) { + QWidget *page = ui->stackedWidget->widget(ui->stackedWidget->count() - 1); + ui->stackedWidget->removeWidget(page); + page->close(); + page->deleteLater(); + } + + ui->stackedWidget->insertWidget(NS_TABLE::CLASS, m_classWidget); + ui->stackedWidget->insertWidget(NS_TABLE::COURSE, m_courseWidget); + ui->stackedWidget->insertWidget(NS_TABLE::STUDENT, m_studentWidget); + ui->stackedWidget->insertWidget(NS_TABLE::TEACHER, m_teacherWidget); + ui->stackedWidget->insertWidget(NS_TABLE::TEACHING, m_teachingWidget); + ui->stackedWidget->insertWidget(NS_TABLE::RESULT, m_resultWidget); + ui->stackedWidget->insertWidget(NS_TABLE::QURAN, m_quranWidget); + ui->stackedWidget->insertWidget(NS_TABLE::COMPETITION, m_competitionWidget); + ui->stackedWidget->insertWidget(NS_TABLE::COMPETITOR, m_competitorWidget); + ui->stackedWidget->insertWidget(NS_TABLE::JOB, m_jobWidget); + ui->stackedWidget->insertWidget(NS_TABLE::EMPLOYEE, m_employeeWidget); + ui->stackedWidget->addWidget(m_settingWidget); +} + +// the result case is excluded because the database's trigger who inserts the corresponding +// rows when a new course or student is added to the database. +void MainWidget::on_addButton_clicked() +{ + switch (ui->listWidget->currentRow()) { + case NS_TABLE::CLASS: m_classWidget->add(); break; + case NS_TABLE::COURSE: m_courseWidget->add(); break; + case NS_TABLE::STUDENT: m_studentWidget->add(); break; + case NS_TABLE::TEACHER: m_teacherWidget->add(); break; + case NS_TABLE::TEACHING: m_teachingWidget->add(); break; + // case NS_TABLE::RESULT: mResultWidget->add(); break; + case NS_TABLE::QURAN: m_quranWidget->add(); break; + case NS_TABLE::COMPETITION: m_competitionWidget->add(); break; + case NS_TABLE::COMPETITOR: m_competitorWidget->add(); break; + case NS_TABLE::JOB: m_jobWidget->add(); break; + case NS_TABLE::EMPLOYEE: m_employeeWidget->add(); break; + + default: + break; + } +} + +void MainWidget::on_modifyButton_clicked() +{ + switch (ui->listWidget->currentRow()) { + case NS_TABLE::CLASS: m_classWidget->modify(); break; + case NS_TABLE::COURSE: m_courseWidget->modify(); break; + case NS_TABLE::STUDENT: m_studentWidget->modify(); break; + case NS_TABLE::TEACHER: m_teacherWidget->modify(); break; + case NS_TABLE::TEACHING: m_teachingWidget->modify(); break; + // case NS_TABLE::RESULT: mResultWidget->modify(); break; + case NS_TABLE::QURAN: m_quranWidget->modify(); break; + case NS_TABLE::COMPETITION: m_competitionWidget->modify(); break; + case NS_TABLE::COMPETITOR: m_competitorWidget->modify(); break; + case NS_TABLE::JOB: m_jobWidget->modify(); break; + case NS_TABLE::EMPLOYEE: m_employeeWidget->modify(); break; + + default: + break; + } +} + +void MainWidget::on_removeButton_clicked() +{ + switch (ui->listWidget->currentRow()) { + case NS_TABLE::CLASS: m_classWidget->remove(); break; + case NS_TABLE::COURSE: m_courseWidget->remove(); break; + case NS_TABLE::STUDENT: m_studentWidget->remove(); break; + case NS_TABLE::TEACHER: m_teacherWidget->remove(); break; + case NS_TABLE::TEACHING: m_teachingWidget->remove(); break; + // case NS_TABLE::RESULT: mResultWidget->remove(); break; + case NS_TABLE::QURAN: m_quranWidget->remove(); break; + case NS_TABLE::COMPETITION: m_competitionWidget->remove(); break; + case NS_TABLE::COMPETITOR: m_competitorWidget->remove(); break; + case NS_TABLE::JOB: m_jobWidget->remove(); break; + case NS_TABLE::EMPLOYEE: m_employeeWidget->remove(); break; + + default: + break; + } +} + +void MainWidget::on_printButton_clicked() +{ + switch (ui->listWidget->currentRow()) { + case NS_TABLE::CLASS: m_classWidget->print(); break; + case NS_TABLE::COURSE: m_courseWidget->print(); break; + case NS_TABLE::STUDENT: m_studentWidget->print(); break; + case NS_TABLE::TEACHER: m_teacherWidget->print(); break; + case NS_TABLE::TEACHING: m_teachingWidget->print(); break; + case NS_TABLE::RESULT: m_resultWidget->print(); break; + case NS_TABLE::QURAN: m_quranWidget->print(); break; + case NS_TABLE::COMPETITION: m_competitionWidget->print(); break; + case NS_TABLE::COMPETITOR: m_competitorWidget->print(); break; + case NS_TABLE::JOB: m_jobWidget->print(); break; + case NS_TABLE::EMPLOYEE: m_employeeWidget->print(); break; + + default: + break; + } +} + +void MainWidget::on_furqanButton_clicked() +{ + QSplashScreen *splashScreen = RscMgr::createSplashScreen(); + splashScreen->show(); +} diff --git a/widgets/mainwidget.h b/widgets/mainwidget.h new file mode 100644 index 0000000..1b34869 --- /dev/null +++ b/widgets/mainwidget.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef MAINWIDGET_H +#define MAINWIDGET_H + +#include + +class ClassWidget; +class CourseWidget; +class StudentWidget; +class TeacherWidget; +class TeachingWidget; +class ResultWidget; +class QuranWidget; +class CompetitionWidget; +class CompetitorWidget; +class JobWidget; +class EmployeeWidget; +class SettingWidget; + +class QSqlTableModel; + +namespace Ui { +class MainWidget; +} + +class MainWidget : public QWidget +{ + Q_OBJECT + +public: + explicit MainWidget(QWidget *parent = 0); + ~MainWidget(); + +protected: + void changeEvent(QEvent *); + +private slots: + void initialize(); + + void allocateWidgets(); + + void populateListWidget(); + + void populateStackWidget(); + + void setControlFrameVisible(int); + + void on_addButton_clicked(); + + void on_modifyButton_clicked(); + + void on_removeButton_clicked(); + + void on_printButton_clicked(); + + void on_furqanButton_clicked(); + +private: + Ui::MainWidget *ui; + + ClassWidget *m_classWidget; + CourseWidget *m_courseWidget; + StudentWidget *m_studentWidget; + TeacherWidget *m_teacherWidget; + TeachingWidget *m_teachingWidget; + ResultWidget *m_resultWidget; + QuranWidget *m_quranWidget; + CompetitionWidget *m_competitionWidget; + CompetitorWidget *m_competitorWidget; + JobWidget *m_jobWidget; + EmployeeWidget *m_employeeWidget; + SettingWidget *m_settingWidget; +}; + +#endif // MAINWIDGET_H diff --git a/widgets/printdialog.cpp b/widgets/printdialog.cpp new file mode 100644 index 0000000..81ab152 --- /dev/null +++ b/widgets/printdialog.cpp @@ -0,0 +1,373 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "printdialog.h" + +#include "resourcemanager.h" +#include "texteditor.h" +#include "printOption.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +PrintDialog::PrintDialog(QAbstractItemModel *model, PrintOption *printOption, QWidget *parent) : + QDialog(parent), + m_model(model), + m_printOption(printOption), + m_preambleTextEdit(new TextEditor), + m_commentaryTextEdit(new TextEditor), + m_tableFontNameCombo(new QFontComboBox), + m_tableFontSizeCombo(new QComboBox), + m_tableColorButton(new QPushButton), + m_columnVisibilityListWidget(new QListWidget), + m_aggregativeColumnListWidget(new QListWidget), + m_aggregativeColumnEntryListWidget(new QListWidget), + m_rowVisibilityListWidget(new QListWidget), + m_tabWidget(new QTabWidget), + m_preview(new QPrintPreviewWidget(RscMgr::printHandler()->previewPrinter())), + m_buttonGroup(new QButtonGroup(this)), + m_zoomIn(new QPushButton), + m_zoomOut(new QPushButton), + m_printButton(new QPushButton(tr("Print"))), + m_closeButton(new QPushButton(tr("Close"))) +{ + setWindowTitle(tr("Print")); + setWindowFlags(Qt::FramelessWindowHint); + + setLayoutDirection(RscMgr::dir()); + + initialize(); + createLayouts(); + loadSettings(); + createConnections(); + + m_tabWidget->setFixedWidth(m_columnVisibilityListWidget->sizeHint().width()); + m_preview->setFixedWidth(m_preview->width()); + + showFullScreen(); +} + +PrintDialog::~PrintDialog() +{} + +void PrintDialog::print() const +{ + m_printOption->setPreamble(m_preambleTextEdit->toHtml()); + m_printOption->setCommentary(m_commentaryTextEdit->toHtml()); + + RscMgr::printHandler()->print(m_model, m_printOption, RscMgr::printHandler()->nativePrinter()); +} + +void PrintDialog::preview(QPrinter *printer) const +{ + m_printOption->setPreamble(m_preambleTextEdit->toHtml()); + m_printOption->setCommentary(m_commentaryTextEdit->toHtml()); + + RscMgr::printHandler()->print(m_model, m_printOption, printer); +} + +void PrintDialog::initialize() +{ + m_tableFontSizeCombo->setEditable(true); + + QFontDatabase db; + foreach(int size, db.standardSizes()) + m_tableFontSizeCombo->addItem(QString::number(size)); + + m_tableColorButton->setFlat(true); + m_tableColorButton->setMaximumWidth(25); + m_tableColorButton->setCursor(Qt::PointingHandCursor); + m_tableColorButton->setStyleSheet(QString("border: 1px solid black; background-color: %1;").arg(RscMgr::settingHandler()->tableFontColor())); + + m_tabWidget->setTabPosition(RscMgr::dir() == Qt::RightToLeft ? QTabWidget::East : QTabWidget::West); + m_tabWidget->addTab(m_columnVisibilityListWidget, tr("Shown Columns")); + m_tabWidget->addTab(m_aggregativeColumnListWidget, tr("Aggregative Columns")); + m_tabWidget->addTab(m_aggregativeColumnEntryListWidget, tr("Aggragative Column Entries")); + m_tabWidget->addTab(m_rowVisibilityListWidget, tr("Shown Rows")); + + for (int i = 0; i < m_model->columnCount(); ++i) { + if (m_printOption->isColumnRemoved(i)) + continue; + + QListWidgetItem *item = new QListWidgetItem(m_model->headerData(i, Qt::Horizontal).toString()); + item->setCheckState(m_printOption->isColumnHidden(i) ? Qt::Unchecked : Qt::Checked); + item->setData(Qt::UserRole, i); + item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); + + //if it's the name column, then disable it. + if (i == m_printOption->majorColumn()) + item->setFlags(Qt::NoItemFlags); + + m_columnVisibilityListWidget->addItem(item); + } + + QRadioButton *noneRadioButton = new QRadioButton(tr("None")); + noneRadioButton->setChecked(true); + m_buttonGroup->addButton(noneRadioButton); + QListWidgetItem *item = new QListWidgetItem; + item->setFlags(Qt::ItemIsEnabled); + m_aggregativeColumnListWidget->addItem(item); + m_aggregativeColumnListWidget->setItemWidget(item, noneRadioButton); + + for (int i = 0; i < m_model->columnCount(); ++i) { + if (m_printOption->isColumnAggregative(i)) { + QRadioButton *radioButton = new QRadioButton(m_model->headerData(i, Qt::Horizontal).toString()); + m_buttonGroup->addButton(radioButton); + radioButton->setChecked(i == m_printOption->currentAggregativeColumn()); + QListWidgetItem *item = new QListWidgetItem; + item->setFlags(Qt::ItemIsEnabled); + item->setData(Qt::UserRole, i); + m_aggregativeColumnListWidget->addItem(item); + m_aggregativeColumnListWidget->setItemWidget(item, radioButton); + } + } + + emit currentAggregationChanged(m_buttonGroup->checkedButton()); +} + +void PrintDialog::createLayouts() +{ + QString styleSheet = "QFrame {" + "background: lightgray;" + "border: 1px solid black;" + "padding: 1px;" + "}" + "QPushButton {" + " padding: 3px;" + "}" + "QPushButton:hover {" + " color: white;" + " border: 1px solid gray;" + "}"; + + QFrame *zoomFrame = new QFrame; + zoomFrame->setStyleSheet(styleSheet); + + m_zoomIn->setIcon(QIcon(":/zoom-in")); + m_zoomIn->setFlat(true); + m_zoomIn->setIconSize(QSize(24, 24)); + m_zoomIn->setCursor(QCursor(Qt::PointingHandCursor)); + + m_zoomOut->setIcon(QIcon(":/zoom-out")); + m_zoomOut->setFlat(true); + m_zoomOut->setIconSize(QSize(24, 24)); + m_zoomOut->setCursor(QCursor(Qt::PointingHandCursor)); + + m_preview->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_preview->fitToWidth(); + + QFrame *printFrame = new QFrame; + printFrame->setStyleSheet(styleSheet); + + m_printButton->setFlat(true); + m_printButton->setIcon(QIcon(":/printer")); + m_printButton->setIconSize(QSize(32, 32)); + m_printButton->setCursor(QCursor(Qt::PointingHandCursor)); + + m_closeButton->setFlat(true); + m_closeButton->setIcon(RscMgr::dir() == Qt::LeftToRight ? QIcon(":/close-ltr") : QIcon(":/close-rtl")); + m_closeButton->setIconSize(QSize(32, 32)); + m_closeButton->setCursor(QCursor(Qt::PointingHandCursor)); + + QHBoxLayout *tableHLayout = new QHBoxLayout; + tableHLayout->addWidget(m_tableFontNameCombo); + tableHLayout->addWidget(m_tableFontSizeCombo); + tableHLayout->addWidget(m_tableColorButton); + tableHLayout->addStretch(); + + QVBoxLayout *editVLayout = new QVBoxLayout; + editVLayout->addWidget(new QLabel(QString("%1
").arg(tr("Preamble")))); + editVLayout->addWidget(m_preambleTextEdit); + editVLayout->addSpacing(7); + editVLayout->addWidget(new QLabel(QString("%1
").arg(tr("Table")))); + editVLayout->addLayout(tableHLayout); + editVLayout->addSpacing(7); + editVLayout->addWidget(new QLabel(QString("%1
").arg(tr("Commentary")))); + editVLayout->addWidget(m_commentaryTextEdit); + + QHBoxLayout *zoomHLayout = new QHBoxLayout(zoomFrame); + zoomHLayout->setContentsMargins(QMargins(0, 0, 0, 0)); + zoomHLayout->setSpacing(3); + zoomHLayout->addStretch(); + zoomHLayout->addWidget(m_zoomIn); + zoomHLayout->addWidget(m_zoomOut); + + QVBoxLayout *previewVLayout = new QVBoxLayout; + previewVLayout->setSpacing(1); + previewVLayout->addWidget(m_preview); + previewVLayout->addWidget(zoomFrame); + + QHBoxLayout *mainHLayout = new QHBoxLayout; + mainHLayout->addLayout(editVLayout); + mainHLayout->addWidget(m_tabWidget); + mainHLayout->addLayout(previewVLayout); + + QHBoxLayout *printHLayout = new QHBoxLayout(printFrame); + printHLayout->setContentsMargins(QMargins(0, 0, 0, 0)); + printHLayout->setSpacing(15); + printHLayout->addStretch(); + printHLayout->addWidget(m_printButton); + printHLayout->addWidget(m_closeButton); + + QVBoxLayout *mainVLayout = new QVBoxLayout(this); + mainVLayout->addWidget(printFrame); + mainVLayout->addLayout(mainHLayout); +} + +void PrintDialog::createConnections() +{ + connect(m_preambleTextEdit, SIGNAL(fontFamilyChanged(QString)), RscMgr::settingHandler(), SLOT(setPreambleFontFamily(QString))); + connect(m_preambleTextEdit, SIGNAL(fontSizeChanged(QString)), RscMgr::settingHandler(), SLOT(setPreambleFontSize(QString))); + connect(m_preambleTextEdit, SIGNAL(fontColorChanged(QString)), RscMgr::settingHandler(), SLOT(setPreambleFontColor(QString))); + + connect(m_commentaryTextEdit, SIGNAL(fontFamilyChanged(QString)), RscMgr::settingHandler(), SLOT(setCommentaryFontFamily(QString))); + connect(m_commentaryTextEdit, SIGNAL(fontSizeChanged(QString)), RscMgr::settingHandler(), SLOT(setCommentaryFontSize(QString))); + connect(m_commentaryTextEdit, SIGNAL(fontColorChanged(QString)), RscMgr::settingHandler(), SLOT(setCommentaryFontColor(QString))); + + connect(m_tableFontNameCombo, SIGNAL(currentIndexChanged(QString)), RscMgr::settingHandler(), SLOT(setTableFontFamily(QString))); + connect(m_tableFontSizeCombo, SIGNAL(currentTextChanged(QString)), RscMgr::settingHandler(), SLOT(setTableFontSize(QString))); + connect(m_tableColorButton, SIGNAL(clicked()), SLOT(setTableFontColor())); + + connect(m_buttonGroup, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(currentAggregationChanged(QAbstractButton*))); + + connect(m_columnVisibilityListWidget, SIGNAL(itemChanged(QListWidgetItem*)), SLOT(columnVisibilityChanged(QListWidgetItem*))); + connect(m_aggregativeColumnEntryListWidget, SIGNAL(itemChanged(QListWidgetItem*)), SLOT(aggregationEntryVisibilityChanged(QListWidgetItem*))); + connect(m_rowVisibilityListWidget, SIGNAL(itemChanged(QListWidgetItem*)), SLOT(rowVisibilityChanged(QListWidgetItem*))); + + connect(m_buttonGroup, SIGNAL(buttonClicked(QAbstractButton*)), m_preview, SLOT(updatePreview())); + connect(m_columnVisibilityListWidget, SIGNAL(itemChanged(QListWidgetItem*)), m_preview, SLOT(updatePreview())); + connect(m_aggregativeColumnEntryListWidget, SIGNAL(itemChanged(QListWidgetItem*)), m_preview, SLOT(updatePreview())); + connect(m_rowVisibilityListWidget, SIGNAL(itemChanged(QListWidgetItem*)), m_preview, SLOT(updatePreview())); + connect(m_preambleTextEdit, SIGNAL(textChanged()), m_preview, SLOT(updatePreview())); + connect(m_commentaryTextEdit, SIGNAL(textChanged()), m_preview, SLOT(updatePreview())); + connect(m_tableFontNameCombo, SIGNAL(currentFontChanged(QFont)), m_preview, SLOT(updatePreview())); + connect(m_tableFontSizeCombo, SIGNAL(currentIndexChanged(int)), m_preview, SLOT(updatePreview())); + connect(RscMgr::settingHandler(), SIGNAL(settingChanged()), m_preview, SLOT(updatePreview())); + + connect(m_preview, SIGNAL(paintRequested(QPrinter*)), SLOT(preview(QPrinter*))); + + connect(m_zoomIn, SIGNAL(clicked()), m_preview, SLOT(zoomIn())); + connect(m_zoomOut, SIGNAL(clicked()), m_preview, SLOT(zoomOut())); + + connect(m_printButton, SIGNAL(clicked()), SLOT(print())); + connect(m_printButton, SIGNAL(clicked()), SLOT(accept())); + connect(m_closeButton, SIGNAL(clicked()), SLOT(reject())); + +} + +void PrintDialog::loadSettings() +{ + m_preambleTextEdit->setFontFamily(RscMgr::settingHandler()->preambleFontFamily()); + m_preambleTextEdit->setFontColor(RscMgr::settingHandler()->preambleFontColor()); + m_preambleTextEdit->setFontSize(RscMgr::settingHandler()->preambleFontSize()); + + m_commentaryTextEdit->setFontFamily(RscMgr::settingHandler()->commentaryFontFamily()); + m_commentaryTextEdit->setFontColor(RscMgr::settingHandler()->commentaryFontColor()); + m_commentaryTextEdit->setFontSize(RscMgr::settingHandler()->commentaryFontSize()); + + m_tableFontNameCombo->setCurrentText(RscMgr::settingHandler()->tableFontFamily()); + + m_tableFontSizeCombo->setCurrentText(RscMgr::settingHandler()->tableFontSize()); + +} + +void PrintDialog::setTableFontColor() const +{ + QColor color = QColorDialog::getColor(Qt::black); + if (!color.isValid()) + return; + + RscMgr::settingHandler()->setTableFontColor(color.name()); + m_tableColorButton->setStyleSheet(QString("border: 1px solid black; background-color: %1;").arg(color.name(QColor::HexRgb))); +} + +void PrintDialog::columnVisibilityChanged(QListWidgetItem *item) +{ + //the addition by on is for the ID column of each table. + m_printOption->setColumnHidden(item->data(Qt::UserRole).toInt(), item->checkState() == Qt::Unchecked); +} + +void PrintDialog::rowVisibilityChanged(QListWidgetItem *item) +{ + m_printOption->setRowHidden(item->data(Qt::UserRole).toInt(), item->checkState() == Qt::Unchecked); +} + +void PrintDialog::currentAggregationChanged(QAbstractButton *button) +{ + m_aggregativeColumnEntryListWidget->clear(); + + for (int i = 0; i < m_model->columnCount(); ++i) { + if (m_model->headerData(i, Qt::Horizontal).toString() == button->text()) { + m_printOption->setCurrentAggregativeColumn(i); + + for (int j = 0; j < m_model->rowCount(); ++j) { + const QString &itemText = m_model->index(j, i).data().toString(); + + QList itemList = m_aggregativeColumnEntryListWidget->findItems(itemText, Qt::MatchExactly); + if (itemList.isEmpty()) { + QListWidgetItem *item = new QListWidgetItem(itemText); + item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); + item->setCheckState(Qt::Checked); + m_aggregativeColumnEntryListWidget->addItem(item); + } + } + + emit aggregationEntryVisibilityChanged(0); + + return; + } + } + + m_printOption->setCurrentAggregativeColumn(-1); + + emit aggregationEntryVisibilityChanged(0); +} + +void PrintDialog::aggregationEntryVisibilityChanged(QListWidgetItem *item) +{ + if (item) + m_printOption->setAggregationEntryHidden(item->text(), item->checkState() == Qt::Unchecked); + + m_rowVisibilityListWidget->clear(); + + if (m_printOption->currentAggregativeColumn() >= 0) + m_model->sort(m_printOption->currentAggregativeColumn(), Qt::AscendingOrder); + else + m_model->sort(0, Qt::AscendingOrder); + + for (int i = 0; i < m_model->rowCount(); ++i) { + if (m_printOption->currentAggregativeColumn() >= 0) { + const QString &entry = m_model->index(i, m_printOption->currentAggregativeColumn()).data().toString(); + if (m_printOption->isAggregationEntryHidden(entry)) + continue; + } + QListWidgetItem *rowItem = new QListWidgetItem(QString("[%1] %2").arg(i + 1).arg(m_model->index(i, m_printOption->majorColumn()).data().toString())); + rowItem->setCheckState(m_printOption->isRowHidden(m_model->index(i, 0).data().toInt()) ? Qt::Unchecked : Qt::Checked); + rowItem->setData(Qt::UserRole, m_model->index(i, 0).data().toInt()); + rowItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); + m_rowVisibilityListWidget->addItem(rowItem); + } +} diff --git a/widgets/printdialog.h b/widgets/printdialog.h new file mode 100644 index 0000000..93ba104 --- /dev/null +++ b/widgets/printdialog.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef PRINTDIALOG_H +#define PRINTDIALOG_H + +#include + +namespace Ui { +class PrintDialog; +} + +class TextEditor; +class PrintOption; + +class QAbstractItemModel; +class QPrintPreviewWidget; +class QPrinter; +class QListWidget; +class QTabWidget; +class QButtonGroup; +class QListWidgetItem; +class QAbstractButton; +class QFontComboBox; +class QComboBox; + +class PrintDialog : public QDialog +{ + Q_OBJECT + +public: + explicit PrintDialog(QAbstractItemModel *model, PrintOption *printOption, QWidget *parent = 0); + ~PrintDialog(); + +private slots: + void print() const; + + void preview(QPrinter *) const; + + void initialize(); + void createLayouts(); + void createConnections(); + void loadSettings(); + + void setTableFontColor() const; + + void columnVisibilityChanged(QListWidgetItem *); + + void rowVisibilityChanged(QListWidgetItem *); + + void currentAggregationChanged(QAbstractButton *); + + void aggregationEntryVisibilityChanged(QListWidgetItem *); + +private: + QAbstractItemModel *m_model; + + PrintOption *m_printOption; + + TextEditor *m_preambleTextEdit; + TextEditor *m_commentaryTextEdit; + + QFontComboBox *m_tableFontNameCombo; + QComboBox *m_tableFontSizeCombo; + QPushButton *m_tableColorButton; + + QListWidget *m_columnVisibilityListWidget; + QListWidget *m_aggregativeColumnListWidget; + QListWidget *m_aggregativeColumnEntryListWidget; + QListWidget *m_rowVisibilityListWidget; + + QTabWidget *m_tabWidget; + + QPrintPreviewWidget *m_preview; + + QButtonGroup *m_buttonGroup; + + QPushButton *m_zoomIn; + QPushButton *m_zoomOut; + QPushButton *m_printButton; + QPushButton *m_closeButton; +}; + +#endif // PRINTDIALOG_H diff --git a/widgets/quranwidget.cpp b/widgets/quranwidget.cpp new file mode 100644 index 0000000..7c571ab --- /dev/null +++ b/widgets/quranwidget.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "quranwidget.h" +#include "ui_quranwidget.h" + +#include "resourcemanager.h" +#include "mapdelegate.h" +#include "numericdelegate.h" +#include "datedelegate.h" +#include "printdialog.h" +#include "printoption.h" + +#include +#include + +QuranWidget::QuranWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::QuranWidget) +{ + ui->setupUi(this); + + m_quranProxyModel = new QSortFilterProxyModel(this); + m_quranProxyModel->setSourceModel(RscMgr::modelHandler()->model(NS_TABLE::QURAN)); + m_quranProxyModel->setFilterKeyColumn(NS_QURAN::STUDENT); + + ui->quranView->setModel(m_quranProxyModel); + ui->quranView->hideColumn(NS_QURAN::ID); + ui->quranView->hideColumn(NS_QURAN::STUDENT); + ui->quranView->setItemDelegateForColumn(NS_QURAN::RECITAL_TYPE, new MapDelegate(ui->quranView)); + ui->quranView->setItemDelegateForColumn(NS_QURAN::FROM_PAGE, new NumericDelegate(new QIntValidator(0, 604, this), this)); + ui->quranView->setItemDelegateForColumn(NS_QURAN::TO_PAGE, new NumericDelegate(new QIntValidator(0, 604, this), this)); + ui->quranView->setItemDelegateForColumn(NS_QURAN::DATE, new DateDelegate(ui->quranView)); + ui->quranView->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); + ui->quranView->horizontalHeader()->setSectionResizeMode(NS_QURAN::RECITAL_TYPE, QHeaderView::Stretch); + + ui->studentView->setModel(RscMgr::modelHandler()->model(NS_TABLE::STUDENT)); + ui->studentView->setModelColumn(NS_STUDENT::FULL_NAME); + ui->studentView->setCurrentIndex(ui->studentView->model()->index(0, NS_STUDENT::FULL_NAME)); + ui->studentView->setFixedWidth(ui->studentView->minimumSizeHint().width() + + ui->studentView->verticalScrollBar()->sizeHint().width() + + 7); + + connect(ui->studentView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(adjustToStudent())); + //maintaining the foreign key's relations between tables + connect(ui->studentView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + connect(RscMgr::modelHandler()->model(NS_TABLE::CLASS), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + + adjustToStudent(); +} + +QuranWidget::~QuranWidget() +{ + delete ui; +} + +void QuranWidget::adjustToStudent() +{ + m_quranProxyModel->setFilterRegExp(QString("^%1$").arg(ui->studentView->currentIndex().data().toString())); +} + +void QuranWidget::refresh() +{ + RscMgr::modelHandler()->model(NS_TABLE::QURAN)->select(); + adjustToStudent(); +} + +void QuranWidget::add() +{ + if (!ui->studentView->currentIndex().isValid()) { + RscMgr::issueMessage(tr("Please select a student first."), false); + return; + } + + QMap map; + map.insert(NS_QURAN::STUDENT, + ui->studentView->currentIndex() + .sibling(ui->studentView->currentIndex().row(), NS_STUDENT::ID).data()); + + RscMgr::modelHandler()->insertRow(NS_TABLE::QURAN, map); + + const QModelIndex &idx = ui->quranView->model()->index(0, NS_QURAN::RECITAL_TYPE); + + ui->quranView->setCurrentIndex(idx); + ui->quranView->edit(idx); +} + +void QuranWidget::modify() +{ + if (!ui->quranView->currentIndex().isValid()) + return; + + ui->quranView->edit(ui->quranView->currentIndex()); +} + +void QuranWidget::remove() +{ + if (!ui->quranView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::QURAN, ui->quranView->currentIndex().row()); + + ui->quranView->setFocus(); + ui->quranView->setCurrentIndex(ui->quranView->model()->index(0, NS_QURAN::STUDENT)); +} + +void QuranWidget::print() +{ + PrintOption opt; + opt.setColumnRemoved(NS_QURAN::ID, true); + opt.setColumnHidden(NS_QURAN::ID, true); + opt.setMajorColumn(NS_QURAN::STUDENT); + opt.setColumnAggregative(NS_QURAN::DATE, true); + opt.setColumnAggregative(NS_QURAN::RECITAL_TYPE, true); + opt.setCurrentAggregativeColumn(-1); + + PrintDialog dlg(m_quranProxyModel->sourceModel(), &opt); + + dlg.exec(); +} diff --git a/widgets/quranwidget.h b/widgets/quranwidget.h new file mode 100644 index 0000000..774d8b6 --- /dev/null +++ b/widgets/quranwidget.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef QURANWIDGET_H +#define QURANWIDGET_H + +#include + +class QSortFilterProxyModel; + +namespace Ui { +class QuranWidget; +} + +class QuranWidget : public QWidget +{ + Q_OBJECT + +public: + explicit QuranWidget(QWidget *parent = 0); + + ~QuranWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private slots: + void adjustToStudent(); + + void refresh(); + +private: + Ui::QuranWidget *ui; + + QSortFilterProxyModel *m_quranProxyModel; +}; + +#endif // QURANWIDGET_H diff --git a/widgets/resultwidget.cpp b/widgets/resultwidget.cpp new file mode 100644 index 0000000..32dcaef --- /dev/null +++ b/widgets/resultwidget.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "resultwidget.h" +#include "ui_resultwidget.h" + +#include "resourcemanager.h" +#include "sqldelegate.h" +#include "numericdelegate.h" +#include "printdialog.h" +#include "printoption.h" + +#include +#include + +ResultWidget::ResultWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ResultWidget) +{ + ui->setupUi(this); + + m_resultProxyModel = new QSortFilterProxyModel(this); + m_resultProxyModel->setSourceModel(RscMgr::modelHandler()->model(NS_TABLE::RESULT)); + m_resultProxyModel->setFilterKeyColumn(NS_RESULT::COURSE); + + ui->resultView->setModel(m_resultProxyModel); + ui->resultView->hideColumn(NS_RESULT::ID); + ui->resultView->hideColumn(NS_RESULT::COURSE); + ui->resultView->setItemDelegateForColumn(NS_RESULT::STUDENT, new SqlDelegate(false, ui->resultView)); + + QDoubleValidator *validator = new QDoubleValidator(0, 100, 2, this); + validator->setNotation(QDoubleValidator::StandardNotation); + + ui->resultView->setItemDelegateForColumn(NS_RESULT::RESULT, new NumericDelegate(validator, this)); + ui->resultView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + ui->courseView->setModel(RscMgr::modelHandler()->model(NS_TABLE::COURSE)); + ui->courseView->setModelColumn(NS_COURSE::NAME); + ui->courseView->setCurrentIndex(ui->courseView->model()->index(0, NS_COURSE::NAME)); + ui->courseView->setFixedWidth(ui->courseView->minimumSizeHint().width() + + ui->courseView->verticalScrollBar()->sizeHint().width() + + 7); + + connect(ui->courseView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(adjustToCourse())); + //maintaining the foreign key's relations between tables + connect(ui->courseView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + connect(RscMgr::modelHandler()->model(NS_TABLE::CLASS), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + connect(RscMgr::modelHandler()->model(NS_TABLE::STUDENT), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + + adjustToCourse(); +} + +ResultWidget::~ResultWidget() +{ + delete ui; +} + +void ResultWidget::adjustToCourse() +{ + m_resultProxyModel->setFilterRegExp(QString("^%1$").arg(ui->courseView->currentIndex().data().toString())); +} + +void ResultWidget::refresh() +{ + RscMgr::modelHandler()->model(NS_TABLE::RESULT)->select(); + adjustToCourse(); +} + +void ResultWidget::print() +{ + PrintOption opt; + opt.setColumnRemoved(NS_RESULT::ID, true); + opt.setColumnHidden(NS_RESULT::ID, true); + opt.setColumnHidden(NS_RESULT::COURSE, true); + opt.setMajorColumn(NS_RESULT::STUDENT); + opt.setColumnAggregative(NS_RESULT::COURSE, true); + opt.setColumnAggregative(NS_RESULT::STUDENT, true); + opt.setCurrentAggregativeColumn(NS_RESULT::COURSE); + + PrintDialog dlg(m_resultProxyModel->sourceModel(), &opt); + + dlg.exec(); +} diff --git a/widgets/resultwidget.h b/widgets/resultwidget.h new file mode 100644 index 0000000..1b5e06a --- /dev/null +++ b/widgets/resultwidget.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef RESULTWIDGET_H +#define RESULTWIDGET_H + +#include + +class QSortFilterProxyModel; + +namespace Ui { +class ResultWidget; +} + +class ResultWidget : public QWidget +{ + Q_OBJECT + +public: + explicit ResultWidget(QWidget *parent = 0); + + ~ResultWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private slots: + void adjustToCourse(); + + void refresh(); + +private: + Ui::ResultWidget *ui; + + QSortFilterProxyModel *m_resultProxyModel; +}; + +#endif // RESULTWIDGET_H diff --git a/widgets/settingwidget.cpp b/widgets/settingwidget.cpp new file mode 100644 index 0000000..5be3f66 --- /dev/null +++ b/widgets/settingwidget.cpp @@ -0,0 +1,264 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "settingwidget.h" +#include "ui_settingwidget.h" + +#include "resourcemanager.h" +#include "printoption.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +SettingWidget::SettingWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingWidget) +{ + ui->setupUi(this); + + initialize(); + createConnections(); + loadSettings(); + + m_previewWidget->updatePreview(); + m_previewWidget->setFixedWidth(m_previewWidget->sizeHint().width()); + + ui->settingListWidget->setCurrentRow(0); + + ui->languageComboBox->insertItem(NS_Language::Arabic, tr("Arabic")); + ui->languageComboBox->insertItem(NS_Language::English, tr("English")); + + // No need to indicate the current language in the combo box other than here, + // because SettingWidget is reconstructed upon each language change. + ui->languageComboBox->setCurrentIndex(RscMgr::settingHandler()->interfaceLanguage()); + + // To avoid infinite language change, we connect the "languageComboBox" here (after population). + connect(ui->languageComboBox, SIGNAL(currentIndexChanged(int)), SLOT(postLanguageChangeEvent(int))); +} + +SettingWidget::~SettingWidget() +{ + delete ui; +} + +bool SettingWidget::changeTheCurrentDatabase() +{ + QString newDatabasePath = QFileDialog::getOpenFileName(0, tr("Select a database"), + QDir::currentPath(), + "Furqan Database (*.fdb)"); + + if (newDatabasePath.isEmpty()) + return false; + + if (!RscMgr::databaseHandler()->ChangeCurrentDatabase(newDatabasePath)) { + RscMgr::issueMessage(tr("Program cannot use the selected database"), false); + return false; + } + + RscMgr::issueMessage(tr("Database Changed"), true); + + return true; +} + +void SettingWidget::initialize() +{ + ui->headerImageFrame->hide(); + + m_previewWidget = new QPrintPreviewWidget(RscMgr::printHandler()->settingPreviewPrinter()); + m_previewWidget->fitToWidth(); + + ui->previewFrame->layout()->addWidget(m_previewWidget); + ui->previewFrame->setMinimumWidth(500); + + foreach (const QString printerName, QPrinterInfo::availablePrinterNames()) + ui->printerComboBox->addItem(printerName); + + m_pageSizeGroup = new QButtonGroup(this); + m_pageSizeGroup->addButton(ui->a4RadioButton, QPrinter::A4); + m_pageSizeGroup->addButton(ui->a5RadioButton, QPrinter::A5); + + m_orientationGroup = new QButtonGroup(this); + m_orientationGroup->addButton(ui->portraitRadioButton, QPrinter::Portrait); + m_orientationGroup->addButton(ui->landscapeRadioButton, QPrinter::Landscape); + + m_colorGroup = new QButtonGroup(this); + m_colorGroup->addButton(ui->grayScaleRadioButton, QPrinter::GrayScale); + m_colorGroup->addButton(ui->colorRadioButton, QPrinter::Color); + + m_headerTypeGroup = new QButtonGroup(this); + m_headerTypeGroup->addButton(ui->headerNoneRadioButton, NS_HeaderType::None); + m_headerTypeGroup->addButton(ui->headerImageRadioButton, NS_HeaderType::Image); + + m_headerAlignmentGroup = new QButtonGroup(this); + m_headerAlignmentGroup->addButton(ui->headerAlignLeftButton, Qt::AlignLeft); + m_headerAlignmentGroup->addButton(ui->headerAlignCenterButton, Qt::AlignHCenter); + m_headerAlignmentGroup->addButton(ui->headerAlignRightButton, Qt::AlignRight); +} + +void SettingWidget::createConnections() const +{ + connect(ui->printerComboBox, SIGNAL(currentIndexChanged(QString)), RscMgr::settingHandler(), SLOT(setPrinterName(QString))); + connect(m_previewWidget, SIGNAL(paintRequested(QPrinter*)), SLOT(print(QPrinter*))); + + connect(RscMgr::databaseHandler(), SIGNAL(currentDatabaseChanged(QString)), RscMgr::settingHandler(), SLOT(setDatabasePath(QString))); + connect(RscMgr::databaseHandler(), SIGNAL(currentDatabaseChanged(QString)), ui->dbPathLabel, SLOT(setText(QString))); + + connect(m_pageSizeGroup, SIGNAL(buttonClicked(int)), RscMgr::settingHandler(), SLOT(setPrinterPageSize(int))); + connect(m_orientationGroup, SIGNAL(buttonClicked(int)), RscMgr::settingHandler(), SLOT(setPrinterOrientation(int))); + connect(m_colorGroup, SIGNAL(buttonClicked(int)), RscMgr::settingHandler(), SLOT(setPrinterColorMode(int))); + connect(m_headerTypeGroup, SIGNAL(buttonClicked(int)), RscMgr::settingHandler(), SLOT(setHeaderType(int))); + connect(m_headerAlignmentGroup, SIGNAL(buttonClicked(int)), RscMgr::settingHandler(), SLOT(setHeaderAlignment(int))); + + connect(ui->leftSpinBox, SIGNAL(valueChanged(int)), RscMgr::settingHandler(), SLOT(setPrinterLeftMargin(int))); + connect(ui->topSpinBox, SIGNAL(valueChanged(int)), RscMgr::settingHandler(), SLOT(setPrinterTopMargin(int))); + connect(ui->rightSpinBox, SIGNAL(valueChanged(int)), RscMgr::settingHandler(), SLOT(setPrinterRightMargin(int))); + connect(ui->bottomSpinBox, SIGNAL(valueChanged(int)), RscMgr::settingHandler(), SLOT(setPrinterBottomMargin(int))); + + connect(ui->headerWidthSpinBox, SIGNAL(valueChanged(int)), RscMgr::settingHandler(), SLOT(setHeaderWidthMM(int))); + connect(ui->headerHeightSpinBox, SIGNAL(valueChanged(int)), RscMgr::settingHandler(), SLOT(setHeaderHeightMM(int))); + + connect(RscMgr::settingHandler(), SIGNAL(settingChanged()), SLOT(loadSettings())); + connect(RscMgr::settingHandler(), SIGNAL(settingChanged()), m_previewWidget, SLOT(updatePreview())); +} + +void SettingWidget::on_headerImageButton_clicked() +{ + QString imagePath = QFileDialog::getOpenFileName(this, + QString(), + QDir::currentPath(), + "Image Files (*.png *.jpg *.jpeg *.bmp)"); + if (!imagePath.isEmpty()) { + imagePath = QDir::toNativeSeparators(imagePath); + ui->headerImagePathLabel->setText(imagePath); + RscMgr::settingHandler()->setHeaderImagePath(imagePath); + } +} + +void SettingWidget::loadSettings() +{ + ui->printerComboBox->setCurrentText(RscMgr::settingHandler()->printerName()); + ui->dbPathLabel->setText(RscMgr::settingHandler()->databasePath()); + + m_pageSizeGroup->button(RscMgr::settingHandler()->printerPageSize())->setChecked(true); + m_orientationGroup->button(RscMgr::settingHandler()->printerOrientation())->setChecked(true); + m_colorGroup->button(RscMgr::settingHandler()->printerColorMode())->setChecked(true); + m_headerTypeGroup->button(RscMgr::settingHandler()->headerType())->setChecked(true); + m_headerAlignmentGroup->button(RscMgr::settingHandler()->headerAlignment())->setChecked(true); + + ui->leftSpinBox->setValue(RscMgr::settingHandler()->printerLeftMargin()); + ui->topSpinBox->setValue(RscMgr::settingHandler()->printerTopMargin()); + ui->rightSpinBox->setValue(RscMgr::settingHandler()->printerRightMargin()); + ui->bottomSpinBox->setValue(RscMgr::settingHandler()->printerBottomMargin()); + + ui->headerWidthSpinBox->setValue(RscMgr::settingHandler()->headerWidthMM()); + ui->headerHeightSpinBox->setValue(RscMgr::settingHandler()->headerHeightMM()); + + ui->headerImagePathLabel->setText(RscMgr::settingHandler()->headerImagePath()); +} + +void SettingWidget::postLanguageChangeEvent(int lang) const +{ + if (lang < 0 || lang > NS_Language::English || lang == RscMgr::settingHandler()->interfaceLanguage()) + return; + + // Beacause subsequent operations depend on the settingHandler's new language, + // we set the new language here. + RscMgr::settingHandler()->setInterfaceLanguage(lang); + + RscMgr::translatorHandler()->translate(static_cast(lang)); + + // Post a language change to re-initialize the main widget. + qApp->postEvent(qApp, new QEvent(QEvent::LanguageChange)); +} + +void SettingWidget::updatePreview() const +{ + m_previewWidget->updatePreview(); +} + +void SettingWidget::print(QPrinter *printer) +{ + PrintOption opt; + RscMgr::printHandler()->print(RscMgr::modelHandler()->previewModel(), &opt, printer); +} + +QString SettingWidget::getPathToSave(const QString &text) +{ + QString path = QFileDialog::getSaveFileName(this, text, + QDir::currentPath(), + "Furqan Database (*.fdb)", + 0, + QFileDialog::DontConfirmOverwrite); + + if (QFile(path).exists()) { + RscMgr::issueMessage(tr("A database with the same name exists !"), false); + return QString(); + } + + if (!path.isEmpty() && !path.endsWith(".fdb", Qt::CaseInsensitive)) + path.append(".fdb"); + + return path; +} + +void SettingWidget::on_backupDBButton_clicked() +{ + const QString &path = getPathToSave(tr("Select where to save the back up")); + if (path.isEmpty()) + return; + + if (!RscMgr::databaseHandler()->backupCurrentDatabase(path)) { + RscMgr::issueMessage(tr("Process cannot complete, an error occured"), false); + return; + } + + RscMgr::issueMessage(tr("Backup Created"), true); +} + +void SettingWidget::on_changeDBButton_clicked() +{ + changeTheCurrentDatabase(); +} + +void SettingWidget::on_zoomOutButton_clicked() +{ + m_previewWidget->zoomOut(); +} + +void SettingWidget::on_zoomInButton_clicked() +{ + m_previewWidget->zoomIn(); +} + +void SettingWidget::on_createDBButton_clicked() +{ + const QString &path = getPathToSave(tr("Select where to save the new database")); + if (path.isEmpty()) + return; + + if (!RscMgr::databaseHandler()->createNewDatabase(path)) { + RscMgr::issueMessage(tr("Process cannot complete, an error occured"), false); + return; + } + + RscMgr::issueMessage(tr("Database Created"), true); +} diff --git a/widgets/settingwidget.h b/widgets/settingwidget.h new file mode 100644 index 0000000..4fb56f4 --- /dev/null +++ b/widgets/settingwidget.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef SETTINGWIDGET_H +#define SETTINGWIDGET_H + +#include + +class QButtonGroup; +class QPrintPreviewWidget; +class QPrinter; + +namespace Ui { +class SettingWidget; +} + +class SettingWidget : public QWidget +{ + Q_OBJECT + +public: + explicit SettingWidget(QWidget *parent = 0); + ~SettingWidget(); + + static bool changeTheCurrentDatabase(); + + void updatePreview() const; + +private slots: + void on_headerImageButton_clicked(); + void on_createDBButton_clicked(); + void on_backupDBButton_clicked(); + void on_changeDBButton_clicked(); + void on_zoomOutButton_clicked(); + void on_zoomInButton_clicked(); + + void print(QPrinter *printer); + + QString getPathToSave(const QString &text); + + void loadSettings(); + + void postLanguageChangeEvent(int) const; + +private: + void initialize(); + + void createConnections() const; + + Ui::SettingWidget *ui; + + QPrintPreviewWidget *m_previewWidget; + + QButtonGroup *m_pageSizeGroup; + QButtonGroup *m_orientationGroup; + QButtonGroup *m_colorGroup; + QButtonGroup *m_headerTypeGroup; + QButtonGroup *m_headerAlignmentGroup; +}; + +#endif // SETTINGWIDGET_H diff --git a/widgets/studentwidget.cpp b/widgets/studentwidget.cpp new file mode 100644 index 0000000..5d0c7cd --- /dev/null +++ b/widgets/studentwidget.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "studentwidget.h" +#include "ui_studentwidget.h" + +#include "resourcemanager.h" +#include "uniquedelegate.h" +#include "datedelegate.h" +#include "sqldelegate.h" +#include "mapdelegate.h" +#include "printdialog.h" +#include "printoption.h" + +#include +#include + +StudentWidget::StudentWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::StudentWidget) +{ + ui->setupUi(this); + + m_studentProxyModel = new QSortFilterProxyModel(this); + m_studentProxyModel->setSourceModel(RscMgr::modelHandler()->model(NS_TABLE::STUDENT)); + m_studentProxyModel->setFilterKeyColumn(NS_STUDENT::CLASS); + + ui->studentView->setModel(m_studentProxyModel); + ui->studentView->hideColumn(NS_STUDENT::ID); + ui->studentView->hideColumn(NS_STUDENT::CLASS); + ui->studentView->setItemDelegateForColumn(NS_STUDENT::FULL_NAME, new UniqueDelegate(ui->studentView)); + ui->studentView->setItemDelegateForColumn(NS_STUDENT::FATHER_NAME, new UniqueDelegate(ui->studentView)); + ui->studentView->setItemDelegateForColumn(NS_STUDENT::GENDER, new MapDelegate(ui->studentView)); + ui->studentView->setItemDelegateForColumn(NS_STUDENT::LEVEL, new MapDelegate(ui->studentView)); + ui->studentView->setItemDelegateForColumn(NS_STUDENT::BIRTH_DATE, new DateDelegate(ui->studentView)); + ui->studentView->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); + ui->studentView->horizontalHeader()->setSectionResizeMode(NS_STUDENT::FULL_NAME, QHeaderView::Stretch); + + ui->classView->setModel(RscMgr::modelHandler()->model(NS_TABLE::CLASS)); + ui->classView->setModelColumn(NS_CLASS::NAME); + ui->classView->setCurrentIndex(ui->classView->model()->index(0, NS_CLASS::NAME)); + ui->classView->setFixedWidth(ui->classView->minimumSizeHint().width() + + ui->classView->verticalScrollBar()->sizeHint().width() + + 7); + + connect(ui->classView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(adjustToClass())); + //maintaining the foreign key's relations between tables + connect(ui->classView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + + adjustToClass(); +} + +StudentWidget::~StudentWidget() +{ + delete ui; +} + +void StudentWidget::adjustToClass() +{ + m_studentProxyModel->setFilterRegExp(QString("^%1$").arg(ui->classView->currentIndex().data().toString())); +} + +void StudentWidget::refresh() +{ + RscMgr::modelHandler()->model(NS_TABLE::STUDENT)->select(); + adjustToClass(); +} + +void StudentWidget::add() +{ + if (!ui->classView->currentIndex().isValid()) { + RscMgr::issueMessage(tr("Please select a class first."), false); + return; + } + + QMap map; + map.insert(NS_STUDENT::CLASS, + ui->classView->currentIndex() + .sibling(ui->classView->currentIndex().row(), NS_CLASS::ID).data()); + + RscMgr::modelHandler()->insertRow(NS_TABLE::STUDENT, map); + + const QModelIndex &idx = ui->studentView->model()->index(0, NS_STUDENT::FULL_NAME); + + ui->studentView->setCurrentIndex(idx); + ui->studentView->edit(idx); +} + +void StudentWidget::modify() +{ + if (!ui->studentView->currentIndex().isValid()) + return; + + ui->studentView->edit(ui->studentView->currentIndex()); +} + +void StudentWidget::remove() +{ + if (!ui->studentView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::STUDENT, ui->studentView->currentIndex().row()); + + ui->studentView->setFocus(); + ui->studentView->setCurrentIndex(ui->studentView->model()->index(0, NS_STUDENT::FULL_NAME)); +} + +void StudentWidget::print() +{ + PrintOption opt; + opt.setColumnRemoved(NS_STUDENT::ID, true); + opt.setColumnHidden(NS_STUDENT::ID, true); + opt.setColumnHidden(NS_STUDENT::CLASS, true); + opt.setMajorColumn(NS_STUDENT::FULL_NAME); + opt.setColumnAggregative(NS_STUDENT::LEVEL, true); + opt.setColumnAggregative(NS_STUDENT::CLASS, true); + opt.setCurrentAggregativeColumn(NS_STUDENT::CLASS); + + PrintDialog dlg(m_studentProxyModel->sourceModel(), &opt); + + dlg.exec(); +} diff --git a/widgets/studentwidget.h b/widgets/studentwidget.h new file mode 100644 index 0000000..4961ab1 --- /dev/null +++ b/widgets/studentwidget.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef STUDENTWIDGET_H +#define STUDENTWIDGET_H + +#include + +class QSortFilterProxyModel; + +namespace Ui { +class StudentWidget; +} + +class StudentWidget : public QWidget +{ + Q_OBJECT + +public: + explicit StudentWidget(QWidget *parent = 0); + + ~StudentWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private slots: + void adjustToClass(); + + void refresh(); + +private: + Ui::StudentWidget *ui; + + QSortFilterProxyModel *m_studentProxyModel; +}; + +#endif // STUDENTWIDGET_H diff --git a/widgets/teacherwidget.cpp b/widgets/teacherwidget.cpp new file mode 100644 index 0000000..97d4a9b --- /dev/null +++ b/widgets/teacherwidget.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "teacherwidget.h" +#include "ui_teacherwidget.h" + +#include "resourcemanager.h" +#include "uniquedelegate.h" +#include "mapdelegate.h" +#include "datedelegate.h" +#include "printdialog.h" +#include "printOption.h" + +TeacherWidget::TeacherWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TeacherWidget) +{ + ui->setupUi(this); + + ui->teacherView->setModel(RscMgr::modelHandler()->model(NS_TABLE::TEACHER)); + ui->teacherView->hideColumn(NS_TEACHER::ID); + ui->teacherView->setItemDelegateForColumn(NS_TEACHER::FULL_NAME, new UniqueDelegate(ui->teacherView)); + ui->teacherView->setItemDelegateForColumn(NS_TEACHER::FATHER_NAME, new UniqueDelegate(ui->teacherView)); + ui->teacherView->setItemDelegateForColumn(NS_TEACHER::GENDER, new MapDelegate(ui->teacherView)); + ui->teacherView->setItemDelegateForColumn(NS_TEACHER::BIRTH_DATE, new DateDelegate(ui->teacherView)); + ui->teacherView->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); + ui->teacherView->horizontalHeader()->setSectionResizeMode(NS_TEACHER::FULL_NAME, QHeaderView::Stretch); + ui->teacherView->setCurrentIndex(ui->teacherView->model()->index(0, NS_TEACHER::FULL_NAME)); +} + +TeacherWidget::~TeacherWidget() +{ + delete ui; +} + +void TeacherWidget::add() +{ + RscMgr::modelHandler()->insertRow(NS_TABLE::TEACHER); + + const QModelIndex &idx = ui->teacherView->model()->index(0, NS_TEACHER::FULL_NAME); + + ui->teacherView->setCurrentIndex(idx); + ui->teacherView->edit(idx); +} + +void TeacherWidget::modify() +{ + if (!ui->teacherView->currentIndex().isValid()) + return; + + ui->teacherView->edit(ui->teacherView->currentIndex()); +} + +void TeacherWidget::remove() +{ + if (!ui->teacherView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::TEACHER, ui->teacherView->currentIndex().row()); + + ui->teacherView->setFocus(); + ui->teacherView->setCurrentIndex(ui->teacherView->model()->index(0, NS_TEACHER::FATHER_NAME)); +} + +void TeacherWidget::print() +{ + PrintOption opt; + opt.setColumnRemoved(NS_TEACHER::ID, true); + opt.setColumnHidden(NS_TEACHER::ID, true); + opt.setMajorColumn(NS_TEACHER::FULL_NAME); + opt.setColumnAggregative(NS_TEACHER::GENDER, true); + opt.setColumnAggregative(NS_TEACHER::NATIONALITY, true); + opt.setColumnAggregative(NS_TEACHER::RESIDENCY, true); + + PrintDialog dlg(ui->teacherView->model(), &opt); + dlg.exec(); +} diff --git a/widgets/teacherwidget.h b/widgets/teacherwidget.h new file mode 100644 index 0000000..9606820 --- /dev/null +++ b/widgets/teacherwidget.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef TEACHERWIDGET_H +#define TEACHERWIDGET_H + +#include + +namespace Ui { +class TeacherWidget; +} + +class TeacherWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TeacherWidget(QWidget *parent = 0); + + ~TeacherWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private: + Ui::TeacherWidget *ui; +}; + +#endif // TEACHERWIDGET_H diff --git a/widgets/teachingwidget.cpp b/widgets/teachingwidget.cpp new file mode 100644 index 0000000..e7c1197 --- /dev/null +++ b/widgets/teachingwidget.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "teachingwidget.h" +#include "ui_teachingwidget.h" + +#include "resourcemanager.h" +#include "sqldelegate.h" +#include "printdialog.h" +#include "printoption.h" + +#include +#include + +TeachingWidget::TeachingWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::TeachingWidget) +{ + ui->setupUi(this); + + m_teachingProxyModel = new QSortFilterProxyModel(this); + m_teachingProxyModel->setSourceModel(RscMgr::modelHandler()->model(NS_TABLE::TEACHING)); + m_teachingProxyModel->setFilterKeyColumn(NS_TEACHING::TEACHER); + + ui->teachingView->setModel(m_teachingProxyModel); + ui->teachingView->hideColumn(NS_TEACHING::ID); + ui->teachingView->hideColumn(NS_TEACHING::TEACHER); + ui->teachingView->setItemDelegateForColumn(NS_TEACHING::TEACHER, new SqlDelegate(true, ui->teachingView)); + ui->teachingView->setItemDelegateForColumn(NS_TEACHING::CLASS, new SqlDelegate(true, ui->teachingView)); + ui->teachingView->setItemDelegateForColumn(NS_TEACHING::COURSE, new SqlDelegate(true, ui->teachingView)); + ui->teachingView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + ui->teacherView->setModel(RscMgr::modelHandler()->model(NS_TABLE::TEACHER)); + ui->teacherView->setModelColumn(NS_TEACHER::FULL_NAME); + ui->teacherView->setCurrentIndex(ui->teacherView->model()->index(0, NS_TEACHER::FULL_NAME)); + ui->teacherView->setFixedWidth(ui->teacherView->minimumSizeHint().width() + + ui->teacherView->verticalScrollBar()->sizeHint().width() + + 7); + + connect(ui->teacherView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(adjustToTeacher())); + //maintaining the foreign key's relations between tables + connect(ui->teacherView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + connect(RscMgr::modelHandler()->model(NS_TABLE::CLASS), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + connect(RscMgr::modelHandler()->model(NS_TABLE::COURSE), SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(refresh())); + + adjustToTeacher(); +} + +TeachingWidget::~TeachingWidget() +{ + delete ui; +} + +void TeachingWidget::adjustToTeacher() +{ + m_teachingProxyModel->setFilterRegExp(QString("^%1$").arg(ui->teacherView->currentIndex().data().toString())); +} + +void TeachingWidget::refresh() +{ + RscMgr::modelHandler()->model(NS_TABLE::TEACHING)->select(); + adjustToTeacher(); +} + +void TeachingWidget::add() +{ + if (!ui->teacherView->currentIndex().isValid()) { + RscMgr::issueMessage(tr("Please select a teacher first."), false); + return; + } + + QMap map; + map.insert(NS_TEACHING::TEACHER, + ui->teacherView->currentIndex() + .sibling(ui->teacherView->currentIndex().row(), NS_TEACHER::ID).data()); + + RscMgr::modelHandler()->insertRow(NS_TABLE::TEACHING, map); + + const QModelIndex &idx = ui->teachingView->model()->index(0, NS_TEACHING::CLASS); + + ui->teachingView->setCurrentIndex(idx); + ui->teachingView->edit(idx); +} + +void TeachingWidget::modify() +{ + if (!ui->teachingView->currentIndex().isValid()) + return; + + ui->teachingView->edit(ui->teachingView->currentIndex()); +} + +void TeachingWidget::remove() +{ + if (!ui->teachingView->currentIndex().isValid()) + return; + + RscMgr::modelHandler()->removeRow(NS_TABLE::TEACHING, ui->teachingView->currentIndex().row()); + + ui->teachingView->setFocus(); + ui->teachingView->setCurrentIndex(ui->teachingView->model()->index(0, NS_TEACHING::CLASS)); +} + +void TeachingWidget::print() +{ + PrintOption opt; + + opt.setColumnRemoved(NS_TEACHING::ID, true); + opt.setColumnHidden(NS_TEACHING::ID, true); + opt.setMajorColumn(-1); + opt.setColumnAggregative(NS_TEACHING::TEACHER, true); + opt.setColumnAggregative(NS_TEACHING::CLASS, true); + opt.setColumnAggregative(NS_TEACHING::COURSE, true); + + opt.setCurrentAggregativeColumn(NS_TEACHING::TEACHER); + + PrintDialog dlg(m_teachingProxyModel->sourceModel(), &opt); + + dlg.exec(); +} diff --git a/widgets/teachingwidget.h b/widgets/teachingwidget.h new file mode 100644 index 0000000..b5f6133 --- /dev/null +++ b/widgets/teachingwidget.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef TEACHINGWIDGET_H +#define TEACHINGWIDGET_H + +#include + +class QSortFilterProxyModel; + +namespace Ui { +class TeachingWidget; +} + +class TeachingWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TeachingWidget(QWidget *parent = 0); + + ~TeachingWidget(); + + void add(); + + void modify(); + + void remove(); + + void print(); + +private slots: + void adjustToTeacher(); + + void refresh(); + +private: + Ui::TeachingWidget *ui; + + QSortFilterProxyModel *m_teachingProxyModel; +}; + +#endif // TEACHINGWIDGET_H diff --git a/widgets/texteditor.cpp b/widgets/texteditor.cpp new file mode 100644 index 0000000..713debe --- /dev/null +++ b/widgets/texteditor.cpp @@ -0,0 +1,158 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#include "texteditor.h" + +#include "resourcemanager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +TextEditor::TextEditor(QWidget *parent) + : QWidget(parent), m_colorDialog(0) +{ + createWidgets(); + createLayout(); + createConnections(); + + updateColorSwatch(); + + m_textEdit->setFocus(); +} + +void TextEditor::createWidgets() +{ + QFont font("Arial", 14); + + m_textEdit = new QTextEdit; + m_textEdit->setAcceptRichText(true); + m_textEdit->setAlignment(RscMgr::dir() == Qt::LeftToRight ? Qt::AlignLeft : Qt::AlignRight); + m_textEdit->setTabChangesFocus(true); + m_textEdit->setCurrentFont(font); + + m_fontToolBar = new QToolBar; + m_fontToolBar->setIconSize(QSize(20, 20)); + + m_fontFamilyCombo = new QFontComboBox; + m_fontFamilyCombo->setCurrentFont(font); + + m_fontToolBar->addWidget(m_fontFamilyCombo); + + m_fontSizeSpin = new QDoubleSpinBox; + m_fontSizeSpin->setFixedHeight(20); + m_fontSizeSpin->setDecimals(0); + m_fontSizeSpin->setRange(6, 280); + m_fontSizeSpin->setValue(font.pointSize()); + + m_fontToolBar->addWidget(m_fontSizeSpin); + + m_boldAction = m_fontToolBar->addAction(QIcon(":/bold"), tr("Bold")); + m_boldAction->setCheckable(true); + m_boldAction->setShortcut(tr("Ctrl+B")); + + m_italicAction = m_fontToolBar->addAction(QIcon(":/italic"), tr("Italic")); + m_italicAction->setCheckable(true); + m_italicAction->setShortcut(tr("Ctrl+I")); + + m_underlineAction = m_fontToolBar->addAction(QIcon(":/underline"), tr("Underline")); + m_underlineAction->setCheckable(true); + m_underlineAction->setShortcut(tr("Ctrl+U")); + + m_colorAction = m_fontToolBar->addAction(tr("Color")); +} + +void TextEditor::createLayout() +{ + QHBoxLayout *toolbarLayout = new QHBoxLayout; + toolbarLayout->setContentsMargins(2, 2, 2, 2); + toolbarLayout->addWidget(m_fontToolBar); + + QFrame *frame = new QFrame; + frame->setFrameShape(QFrame::StyledPanel); + frame->setFrameShadow(QFrame::Raised); + frame->setLayout(toolbarLayout); + + QVBoxLayout *layout = new QVBoxLayout; + layout->setSpacing(3); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(frame); + layout->addWidget(m_textEdit); + setLayout(layout); +} + +void TextEditor::createConnections() +{ + connect(m_fontFamilyCombo, SIGNAL(currentFontChanged(const QFont&)), + this, SLOT(setFontFamily(const QFont&))); + connect(m_fontSizeSpin, SIGNAL(valueChanged(double)), + this, SLOT(setFontPointSize(double))); + connect(m_boldAction, SIGNAL(toggled(bool)), + this, SLOT(setBold(bool))); + connect(m_italicAction, SIGNAL(toggled(bool)), + m_textEdit, SLOT(setFontItalic(bool))); + connect(m_underlineAction, SIGNAL(toggled(bool)), + m_textEdit, SLOT(setFontUnderline(bool))); + connect(m_colorAction, SIGNAL(triggered()), + this, SLOT(setColor())); + connect(m_textEdit, SIGNAL(currentCharFormatChanged(const QTextCharFormat&)), + this, SLOT(currentCharFormatChanged(const QTextCharFormat&))); + connect(m_textEdit, SIGNAL(textChanged()), + this, SIGNAL(textChanged())); +} + +void TextEditor::currentCharFormatChanged(const QTextCharFormat &format) +{ + m_fontFamilyCombo->setCurrentFont(format.font()); + m_fontSizeSpin->setValue(format.fontPointSize()); + m_boldAction->setChecked(format.fontWeight() == QFont::Bold); + m_italicAction->setChecked(format.fontItalic()); + m_underlineAction->setChecked(format.fontUnderline()); + + updateColorSwatch(); +} + +void TextEditor::setColor() +{ + if (!m_colorDialog) { + m_colorDialog = new QColorDialog(this); + connect(m_colorDialog, SIGNAL(colorSelected(const QColor&)), + this, SLOT(updateColor(const QColor&))); + } + m_colorDialog->setCurrentColor(m_textEdit->textColor()); + m_colorDialog->open(); +} + +void TextEditor::updateColor(const QColor &color) +{ + m_textEdit->setTextColor(color); + updateColorSwatch(); + emit fontColorChanged(color.name(QColor::HexRgb)); +} + +void TextEditor::updateColorSwatch() +{ + QPixmap colorSwatch(32, 32); + colorSwatch.fill(m_textEdit->textColor()); + m_colorAction->setIcon(QIcon(colorSwatch)); +} diff --git a/widgets/texteditor.h b/widgets/texteditor.h new file mode 100644 index 0000000..43ec55d --- /dev/null +++ b/widgets/texteditor.h @@ -0,0 +1,100 @@ +/* + * Copyright (C) 30-8-2016 Abdullateef Qallaa + * + * This file is part of Furqan project, + * hosted on GitHub: https://github.com/laateef/furqan, + * licensed under GPLv3. + * + * GNU General Public License Usage + * This file may be used under the terms of the GNU + * General Public License version 3.0 as published by the Free Software + * Foundation and appearing in the file LICENSE.md included in the + * packaging of this file. Please review the following information to + * ensure the GNU General Public License version 3.0 requirements will be + * met: http://www.gnu.org/copyleft/gpl.html. + */ + +#ifndef TEXTEDITOR_H +#define TEXTEDITOR_H + +#include +#include + +class QColorDialog; +class QDoubleSpinBox; +class QFontComboBox; +class QTextCharFormat; +class QToolBar; + +class TextEditor : public QWidget +{ + Q_OBJECT + +public: + explicit TextEditor(QWidget *parent=0); + + QString toHtml() const { return m_textEdit->toHtml(); } + QString toPlainText() const { return m_textEdit->toPlainText(); } + QTextDocument *document() const { return m_textEdit->document(); } + + void setFontFamily(const QString &family) { m_textEdit->setFontFamily(family); } + + void setFontSize(const QString &size) { m_textEdit->setFontPointSize(size.toInt()); } + + void setFontColor(const QString &color) { + m_textEdit->setTextColor(QColor(color)); + updateColorSwatch(); + } + +signals: + void textChanged(); + + void fontFamilyChanged(const QString &fontFamily) const; + void fontSizeChanged(const QString &fontSize) const; + void fontColorChanged(const QString &fontColor) const; + +public slots: + void setHtml(const QString &html) { m_textEdit->setHtml(html); } + +private slots: + void setBold(bool on) { m_textEdit->setFontWeight(on ? QFont::Bold : QFont::Normal); } + + void setColor(); + + void updateColor(const QColor &color); + + void setFontPointSize(double points) { + m_textEdit->setFontPointSize(static_cast(points)); + emit fontSizeChanged(QString::number(points)); + } + + void setFontFamily(const QFont &font) { + m_textEdit->setFontFamily(font.family()); + emit fontFamilyChanged(font.family()); + } + + void currentCharFormatChanged(const QTextCharFormat &format); + +private: + void createWidgets(); + void createLayout(); + void createConnections(); + void updateColorSwatch(); + + QToolBar *m_fontToolBar; + + QAction *m_boldAction; + QAction *m_italicAction; + QAction *m_underlineAction; + QAction *m_colorAction; + + QColorDialog *m_colorDialog; + + QFontComboBox *m_fontFamilyCombo; + + QDoubleSpinBox *m_fontSizeSpin; + + QTextEdit *m_textEdit; +}; + +#endif // TEXTEDITOR_H