From 536be4557efc039465253584a64507700bafbb77 Mon Sep 17 00:00:00 2001 From: DecimalTurn <31558169+DecimalTurn@users.noreply.github.com> Date: Fri, 3 Nov 2017 03:26:15 -0400 Subject: [PATCH] Initial commit --- .gitattributes | 2 + LICENSE | 674 ++++++++++++++++++ Pomodoro_Timer.xlsb | Bin 0 -> 87596 bytes README.md | 14 + src/Pomodoro_Timer.xlsb/API_AlwaysOnTop.bas | 113 +++ src/Pomodoro_Timer.xlsb/API_Maximize.bas | 32 + src/Pomodoro_Timer.xlsb/API_Pixel.bas | 70 ++ src/Pomodoro_Timer.xlsb/API_Sleep.bas | 16 + src/Pomodoro_Timer.xlsb/API_WorkArea.bas | 43 ++ src/Pomodoro_Timer.xlsb/Main.bas | 34 + src/Pomodoro_Timer.xlsb/NamedRanges.csv | 18 + src/Pomodoro_Timer.xlsb/OpenItself.bas | 185 +++++ src/Pomodoro_Timer.xlsb/PomodoroTimer.frm | 269 +++++++ src/Pomodoro_Timer.xlsb/PomodoroTimer.frx | Bin 0 -> 3096 bytes src/Pomodoro_Timer.xlsb/Records.bas | 70 ++ .../ThisWorkbook.sheet.cls | 12 + src/Pomodoro_Timer.xlsb/UDF_ExcelIntances.bas | 52 ++ src/Pomodoro_Timer.xlsb/UDF_LastCell.bas | 22 + src/Pomodoro_Timer.xlsb/UDF_RGB.bas | 19 + src/Pomodoro_Timer.xlsb/VBA_Optimize.bas | 16 + 20 files changed, 1661 insertions(+) create mode 100644 .gitattributes create mode 100644 LICENSE create mode 100644 Pomodoro_Timer.xlsb create mode 100644 README.md create mode 100644 src/Pomodoro_Timer.xlsb/API_AlwaysOnTop.bas create mode 100644 src/Pomodoro_Timer.xlsb/API_Maximize.bas create mode 100644 src/Pomodoro_Timer.xlsb/API_Pixel.bas create mode 100644 src/Pomodoro_Timer.xlsb/API_Sleep.bas create mode 100644 src/Pomodoro_Timer.xlsb/API_WorkArea.bas create mode 100644 src/Pomodoro_Timer.xlsb/Main.bas create mode 100644 src/Pomodoro_Timer.xlsb/NamedRanges.csv create mode 100644 src/Pomodoro_Timer.xlsb/OpenItself.bas create mode 100644 src/Pomodoro_Timer.xlsb/PomodoroTimer.frm create mode 100644 src/Pomodoro_Timer.xlsb/PomodoroTimer.frx create mode 100644 src/Pomodoro_Timer.xlsb/Records.bas create mode 100644 src/Pomodoro_Timer.xlsb/ThisWorkbook.sheet.cls create mode 100644 src/Pomodoro_Timer.xlsb/UDF_ExcelIntances.bas create mode 100644 src/Pomodoro_Timer.xlsb/UDF_LastCell.bas create mode 100644 src/Pomodoro_Timer.xlsb/UDF_RGB.bas create mode 100644 src/Pomodoro_Timer.xlsb/VBA_Optimize.bas diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..eba1110 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9cecc1d --- /dev/null +++ b/LICENSE @@ -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/Pomodoro_Timer.xlsb b/Pomodoro_Timer.xlsb new file mode 100644 index 0000000000000000000000000000000000000000..06abf4d0e53f6f55844ef8c862df9fbe02433c2c GIT binary patch literal 87596 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�Sr>HE#k(AXVl~LJXf>?0azOQ67b{x|<0cAE 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%0DXYx0WSc) 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 Office 2010 + 'PtrSafe means function works in 32-bit and 64-bit Office + 'LongPtr type alias resolves to Long (32 bits) in 32-bit Office, or LongLong (64 bits) in 64-bit Office + + Public Declare PtrSafe Function SetWindowPos Lib "user32" _ + (ByVal hWnd As LongPtr, _ + ByVal hWndInsertAfter As LongPtr, _ + ByVal x As Long, _ + ByVal Y As Long, _ + ByVal cx As Long, _ + ByVal cy As Long, _ + ByVal uFlags As Long) As Long + + Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _ + (ByVal lpClassName As String, _ + ByVal lpWindowName As String) As LongPtr + + 'GetWindowLongPtr (Uses different alias (true name) between 32-bit and 64-bit) + #If Win64 Then + '64-bit Office + Public Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongPtrA" _ + (ByVal hWnd As LongPtr, _ + ByVal nIndex As Long) As LongPtr + #Else + '32-bit Office + Public Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" _ + (ByVal hWnd As LongPtr, _ + ByVal nIndex As Long) As LongPtr + #End If + + 'Set WindowsLongPtr (Uses different alias (true name) between 32-bit and 64-bit) + #If Win64 Then + Public Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" _ + (ByVal hWnd As LongPtr, _ + ByVal nIndex As Long, _ + ByVal dwNewLong As LongPtr) As LongPtr + #Else + Public Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongA" _ + (ByVal hWnd As LongPtr, _ + ByVal nIndex As Long, _ + ByVal dwNewLong As LongPtr) As LongPtr + #End If + + Public Declare PtrSafe Function DrawMenuBar Lib "user32" _ + (ByVal hWnd As LongPtr) As Long + +#Else + + 'VBA version 6 or earlier compiler, therefore <= Office 2007 + + Public Declare Function SetWindowPos Lib "user32" _ + (ByVal hWnd As Long, _ + ByVal hWndInsertAfter As Long, _ + ByVal X As Long, _ + ByVal Y As Long, _ + ByVal cx As Long, _ + ByVal cy As Long, _ + ByVal uFlags As Long) As Long + + Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ + (ByVal lpClassName As String, _ + ByVal lpWindowName As String) As Long + + Public Declare Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" _ + (ByVal hWnd As Long, _ + ByVal nIndex As Long) As Long + + Public Declare Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongA" _ + (ByVal hWnd As Long, _ + ByVal nIndex As Long, _ + ByVal dwNewLong As Long) As Long + + Public Declare Function DrawMenuBar Lib "user32" _ + (ByVal hWnd As Long) As Long + +#End If diff --git a/src/Pomodoro_Timer.xlsb/API_Maximize.bas b/src/Pomodoro_Timer.xlsb/API_Maximize.bas new file mode 100644 index 0000000..07340d0 --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/API_Maximize.bas @@ -0,0 +1,32 @@ +Attribute VB_Name = "API_Maximize" +'PURPOSE: Contain function that allows to maximize or minimize a window. +'REFERENCE: http://www.vbaexpress.com/forum/archive/index.php/t-36677.html + +Option Explicit + +#If VBA7 Then + + Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hWnd As LongPtr, ByVal nCmdShow As Long) As Long + Declare PtrSafe Function GetForegroundWindow Lib "user32" () As LongPtr +#Else + Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long + Declare Function GetForegroundWindow Lib "user32" () As Long +#End If + +' ShowWindow() Commands +Public Const SW_HIDE = 0 +Public Const SW_SHOWNORMAL = 1 +Public Const SW_NORMAL = 1 +Public Const SW_SHOWMINIMIZED = 2 +Public Const SW_SHOWMAXIMIZED = 3 +Public Const SW_MAXIMIZE = 3 +Public Const SW_SHOWNOACTIVATE = 4 +Public Const SW_SHOW = 5 +Public Const SW_MINIMIZE = 6 +Public Const SW_SHOWMINNOACTIVE = 7 +Public Const SW_SHOWNA = 8 +Public Const SW_RESTORE = 9 +Public Const SW_SHOWDEFAULT = 10 +Public Const SW_MAX = 10 + + diff --git a/src/Pomodoro_Timer.xlsb/API_Pixel.bas b/src/Pomodoro_Timer.xlsb/API_Pixel.bas new file mode 100644 index 0000000..3d243e3 --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/API_Pixel.bas @@ -0,0 +1,70 @@ +Attribute VB_Name = "API_Pixel" +'PURPOSE: This module have functions to help convert pixels to points in Excel, allowing to scale things. +'REFERENCE: http://www.vbaexpress.com/forum/showthread.php?21896-Pixel-to-Point-ratio + +Option Explicit + +#If VBA7 Then + Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr + Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As LongPtr, ByVal hdc As LongPtr) As Long + Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hdc As LongPtr, ByVal nIndex As Long) As Long +#Else + Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long + Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long + Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long +#End If + +Private Const LOGPIXELSX As Long = 88 +Private Const LOGPIXELSY As Long = 90 + +Function PointPerPixelX() As Double + #If VBA7 Then + Dim hdc As LongPtr + #Else + Dim hdc As Long + #End If + hdc = GetDC(0) + PointPerPixelX = 1 / (GetDeviceCaps(hdc, LOGPIXELSX) / 72) +End Function + +Function PointPerPixelY() As Double + #If VBA7 Then + Dim hdc As LongPtr + #Else + Dim hdc As Long + #End If + hdc = GetDC(0) + PointPerPixelY = 1 / (GetDeviceCaps(hdc, LOGPIXELSY) / 72) +End Function + +Sub Example() + #If VBA7 Then + Dim hdc As LongPtr + #Else + Dim hdc As Long + #End If + Dim PixPerInchX As Long + Dim PixPerInchY As Long + Dim PixPerPtX As Double + Dim PixPerPtY As Double + Dim PtPerPixX As Double + Dim PtPerPixY As Double + + hdc = GetDC(0) + + PixPerInchX = GetDeviceCaps(hdc, LOGPIXELSX) + PixPerInchY = GetDeviceCaps(hdc, LOGPIXELSY) + + 'there are 72 points per inch + PixPerPtX = PixPerInchX / 72 + PixPerPtY = PixPerInchY / 72 + + Debug.Print "PixPerPtX: " & PixPerPtX, "PixPerPtY: " & PixPerPtY + + PtPerPixX = 1 / PixPerPtX + PtPerPixY = 1 / PixPerPtY + + Debug.Print "PtPerPixX: " & PtPerPixX, "PtPerPixY: " & PtPerPixX + ReleaseDC 0, hdc +End Sub + diff --git a/src/Pomodoro_Timer.xlsb/API_Sleep.bas b/src/Pomodoro_Timer.xlsb/API_Sleep.bas new file mode 100644 index 0000000..ddb43aa --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/API_Sleep.bas @@ -0,0 +1,16 @@ +Attribute VB_Name = "API_Sleep" +'PURPOSE: Define the sleep function to stop the code from running and releasing CPU usage. + +Option Explicit + +#If VBA7 Then + Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 64 Bit Systems +#Else + Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems +#End If + +Sub SleepTest() +'MsgBox "Execution is started" +Sleep 10000 'delay in milliseconds +MsgBox "Waiting completed" +End Sub diff --git a/src/Pomodoro_Timer.xlsb/API_WorkArea.bas b/src/Pomodoro_Timer.xlsb/API_WorkArea.bas new file mode 100644 index 0000000..93c9757 --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/API_WorkArea.bas @@ -0,0 +1,43 @@ +Attribute VB_Name = "API_WorkArea" +'PURPOSE: Get screen size in pixels +'REFERENCE: https://www.excelforum.com/excel-programming-vba-macros/565556-why-does-spi_getworkarea-come-in-too-large.html + +Option Explicit + +Private Const SPI_GETWORKAREA = 48 + +#If VBA7 Then + Private Declare PtrSafe Function SystemParametersInfo Lib "user32" _ + Alias "SystemParametersInfoA" (ByVal uAction As Long, _ + ByVal uParam As Long, ByRef lpvParam As Any, _ + ByVal fuWinIni As Long) As Long +#Else + Private Declare Function SystemParametersInfo Lib "user32" _ + Alias "SystemParametersInfoA" (ByVal uAction As Long, _ + ByVal uParam As Long, ByRef lpvParam As Any, _ + ByVal fuWinIni As Long) As Long +#End If + +Private Type RECT +Left As Long +Top As Long +Right As Long +Bottom As Long +End Type + +Function GETWORKAREA_HEIGHT() As Double +'PURPOSE: Get the screen size exluding the taskbar + Dim nRect As RECT + SystemParametersInfo SPI_GETWORKAREA, 0, nRect, 0 + GETWORKAREA_HEIGHT = (nRect.Bottom - nRect.Top) +End Function + + +Function GETWORKAREA_WIDTH() As Double +'PURPOSE: Get the screen size exluding the taskbar + Dim nRect As RECT + SystemParametersInfo SPI_GETWORKAREA, 0, nRect, 0 + GETWORKAREA_WIDTH = (nRect.Right - nRect.Left) +End Function + + diff --git a/src/Pomodoro_Timer.xlsb/Main.bas b/src/Pomodoro_Timer.xlsb/Main.bas new file mode 100644 index 0000000..def37c8 --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/Main.bas @@ -0,0 +1,34 @@ +Attribute VB_Name = "Main" +'Infos: different modes for userform: +'https://www.mrexcel.com/forum/excel-questions/465425-minimize-excel-leave-userform-showing.html + + +Public AllowedTime As Integer 'Number of minutes to count down +Public AllowedTimeSec As Integer 'Number of seconds to count down +Public BreakTime As Double +Public BreakTimeSec As Integer +Public AutoLaunch As Boolean +Public TaskName As String +Public StopTimer As Boolean 'User stopped timer +Public CloseTimer As Boolean 'User clicked the X +Public OngoingTimer As Boolean 'Take the value true after the timer has started (was initialized) +Public StartTime As Variant +Public TodaysDate As Variant + +Sub PomodoroSession() + AllowedTime = Range("Pomodoro") + AllowedTimeSec = Range("Pomodoro_sec") + BreakTime = Range("Break") + BreakTimeSec = Range("Break_sec") + AutoLaunch = True + ThisWorkbook.Application.WindowState = xlMinimized + If Reopen_decision = True Then + MsgBox "To let you work with Excel while the timer is running, this file will now be reopen in a second instance of Excel." & vbNewLine & _ + "Once, the was has been reopen, you will need to relaunch the timer." + Call OpenItSelfInAnotherInstance + End If + PomodoroTimer.Show vbModeless + 'Note:vbModeless as opposed to vbModal will allow the Excel application to be unlocked while the timer is running +End Sub + + diff --git a/src/Pomodoro_Timer.xlsb/NamedRanges.csv b/src/Pomodoro_Timer.xlsb/NamedRanges.csv new file mode 100644 index 0000000..1e484bc --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/NamedRanges.csv @@ -0,0 +1,18 @@ +Break,=Settings!$B$4, +Break_sec,=Settings!$B$5, +Custom_position,=Settings!$B$12, +Flashing_color,=Settings!$B$16, +Left_pos,=Settings!$B$13, +No_Recording_limit,=Settings!$B$9, +Pomodoro,=Settings!$B$2, +Pomodoro_sec,=Settings!$B$3, +Recent_Tasks,=OFFSET(Recent!$A$2,0,0,COUNTA(Recent!$A$2:$A$1000002)), +Record_unfinished,=Settings!$B$8, +Reopen_Excel_after_x,=Settings!$B$7, +Run_in_seperate_instance,=Settings!$B$6, +Shortcut,=Settings!$B$15, +Sound_end_Break,=Settings!$B$11, +Sound_end_Pomodoro,=Settings!$B$10, +TaskNameRng,=Pomodoro!$E$2, +Top_pos,=Settings!$B$14, +TopLeftCorner,=Table24[[#Headers],[Date]], diff --git a/src/Pomodoro_Timer.xlsb/OpenItself.bas b/src/Pomodoro_Timer.xlsb/OpenItself.bas new file mode 100644 index 0000000..10134cf --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/OpenItself.bas @@ -0,0 +1,185 @@ +Attribute VB_Name = "OpenItself" +Option Explicit + +Sub OpenItSelfInAnotherInstance() + Dim objExcel As Excel.Application + Set objExcel = CreateObject("Excel.Application") + Dim FileName As String + + 'If there is no other workbook open in the main instance, we create a new one. + If VisibleWorkbookNB = 1 Then Workbooks.Add + ShowWindow GetForegroundWindow, SW_SHOWMINIMIZED + + + FileName = ThisWorkbook.FullName + + 'Make sure this workbook as its saved status set to true + On Error Resume Next + Dim TestString As String + TestString = CStr(Application.Caller) + If TestString = "Error 2023" Then + ThisWorkbook.Saved = True + Else + ThisWorkbook.Save + End If + On Error GoTo 0 + + 'Need to be in read-only mode before it opening itself in another instance of Excel + On Error GoTo ErrReadOnly + ThisWorkbook.ChangeFileAccess xlReadOnly + On Error GoTo 0 + + On Error GoTo Err1 + Call objExcel.Workbooks.Open(FileName) + On Error GoTo 0 + + objExcel.Visible = True + objExcel.WindowState = xlMaximized + + ThisWorkbook.Close False + + Exit Sub +Err1: + 'This error will occurs when the file was not released for editing quickly enough. + 'In this case, we wait 1 second and try again for a maximum of 5 seconds. + Dim counter As Integer + If counter < 5 Then + Debug.Print "Waiting for the file to be released. Total waiting time: " & counter & " sec" + Sleep (1000) + Else + GoTo Err2 + End If + counter = counter + 1 + + Resume + +Err2: + On Error GoTo 0 + MsgBox "An error occured while trying to open this file in another instance of Excel. " & _ + "This could be due to the fact that the server where you file is stored hasn't release the file properly. " & vbNewLine & _ + "Saving the file on your desktop should resolve this problem." + ShowWindow GetForegroundWindow, SW_MAXIMIZE + ThisWorkbook.Activate + Exit Sub + +ErrReadOnly: + On Error GoTo 0 + MsgBox "An error occured while trying to open this file in another instance of Excel. " & _ + "This could be due to the fact that you are opening the file from a .zip file or a temporary location. " & vbNewLine & _ + "Saving the file on your desktop should resolve this problem." + ShowWindow GetForegroundWindow, SW_MAXIMIZE + ThisWorkbook.Activate + Exit Sub +End Sub + +Public Function Reopen_decision() As Boolean + + +'Is there only one instance of Excel? + Dim OnlyOne As Boolean + If ExcelInstances = 1 Then OnlyOne = True + +'Is it in the first instance + Dim InFirst As Boolean + 'Get handle on the first instance + Dim xlApp As Excel.Application + Set xlApp = GetObject(, "Excel.Application") + + 'Check if a workbook with thisworkbook name is open there. + Dim wb As Workbook + On Error Resume Next + Set wb = xlApp.Application.Workbooks(ThisWorkbook.Name) + On Error GoTo 0 + If Not wb Is Nothing Then + InFirst = True + Else + InFirst = False + End If + +'Is the actual file both in another instance of Excel and the one in the first instance is just a copy? + 'Idea: let's compare the windows handle propertie to make sure they are different. + Dim NotInFirstActually As Boolean + + If InFirst Then + If xlApp.hWnd <> ThisWorkbook.Parent.hWnd Then NotInFirstActually = True + End If +'Is the file alone? + Dim Alone As Boolean + If VisibleWorkbookNB = 1 Then Alone = True + +'Has the file ever been saved? + Dim FileEverSaved As Boolean + If ThisWorkbook.Path <> "" Then + FileEverSaved = True + Else + MsgBox "Warning: To work properly, the file needs to be saves somewhere on your computer.", vbCritical + End If + +'Create choice variable + Dim i(1 To 5) As Integer + 'Convert our booleans into 1s and 0s + i(1) = Abs(OnlyOne) + i(2) = Abs(InFirst) + i(3) = Abs(NotInFirstActually) + i(4) = Abs(Alone) + i(5) = Abs(FileEverSaved) + +Dim choice_vr As String + choice_vr = i(1) & i(2) & i(3) & i(4) & i(5) + 'Now that we have all the relevant information to treat our decision tree, we can proceed + + Dim DECISION As Boolean + + Select Case choice_vr 'See the open itself example file to view the decision tree + Case Is = "00000": DECISION = 0 + Case Is = "00010": DECISION = 0 + Case Is = "00100": DECISION = 0 + Case Is = "00110": DECISION = 0 + Case Is = "01000": DECISION = 0 + Case Is = "01010": DECISION = 0 + Case Is = "01100": DECISION = 0 + Case Is = "01110": DECISION = 0 + Case Is = "10000": DECISION = 0 + Case Is = "10010": DECISION = 0 + Case Is = "10100": DECISION = 0 + Case Is = "10110": DECISION = 0 + Case Is = "11000": DECISION = 0 + Case Is = "11010": DECISION = 0 + Case Is = "11100": DECISION = 0 + Case Is = "11110": DECISION = 0 + + Case Is = "00001": DECISION = 1 + Case Is = "00011": DECISION = 0 + Case Is = "00101": DECISION = 1 + Case Is = "00111": DECISION = 0 + Case Is = "01001": DECISION = 1 + Case Is = "01011": DECISION = 1 + Case Is = "01101": DECISION = 1 + Case Is = "01111": DECISION = 0 + Case Is = "10001": DECISION = 1 + Case Is = "10011": DECISION = 1 + Case Is = "10101": DECISION = 1 + Case Is = "10111": DECISION = 1 + Case Is = "11001": DECISION = 1 + Case Is = "11011": DECISION = 1 + Case Is = "11101": DECISION = 1 + Case Is = "11111": DECISION = 1 + + Case Else: Err.Raise 13 + End Select + + Reopen_decision = DECISION + +End Function + + +Function VisibleWorkbookNB() +Dim wb As Workbook, counter As Integer + For Each wb In Excel.Application.Workbooks + If wb.Windows(1).Visible = True Then + counter = counter + 1 + End If + Next wb + + VisibleWorkbookNB = counter +End Function diff --git a/src/Pomodoro_Timer.xlsb/PomodoroTimer.frm b/src/Pomodoro_Timer.xlsb/PomodoroTimer.frm new file mode 100644 index 0000000..9dcb11d --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/PomodoroTimer.frm @@ -0,0 +1,269 @@ +VERSION 5.00 +Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} PomodoroTimer + Caption = "Timer" + ClientHeight = 924 + ClientLeft = 120 + ClientTop = 468 + ClientWidth = 2196 + OleObjectBlob = "PomodoroTimer.frx":0000 + StartUpPosition = 1 'CenterOwner +End +Attribute VB_Name = "PomodoroTimer" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit + +Const sleeptime = 10 'Miliseconds +'Countdown timer +'Source: https://www.mrexcel.com/forum/excel-questions/594922-countdown-timer-userform.html + + +Private Sub UserForm_Initialize() + + 'Position of the Userform + Me.StartUpPosition = 0 + If Range("Custom_position") = True Then + Me.Top = Range("Top_pos").Value2 * (PointPerPixelY() * GETWORKAREA_HEIGHT - Me.Height) + Me.Left = Range("Left_pos").Value2 * (PointPerPixelX() * GETWORKAREA_WIDTH - Me.Width) + Else + Me.Top = PointPerPixelY() * GETWORKAREA_HEIGHT - Me.Height + Me.Left = PointPerPixelX() * GETWORKAREA_WIDTH - Me.Width + End If + OngoingTimer = False + + Dim M As Double, S As Double + M = Int(AllowedTime) + S = AllowedTimeSec + + With tBx1 + .Value = Format(CStr(M), "00") & ":" & Format(CStr(S), "00") + End With + + + 'The code below makes sure that the userform stays on top of all windows. + 'Source: https://www.mrexcel.com/forum/excel-questions/386643-userform-always-top.html + + AlwaysOnTop Me.caption + + +End Sub +Private Sub UserForm_Activate() + If AutoLaunch Then Call Launch_timer +End Sub + +Private Sub Launch_timer() + Dim calc_iniset As Variant: calc_iniset = Application.Calculation + Call Optimize_VBA_Performance(True) + + OngoingTimer = True + StopTimer = False + CloseTimer = False + CommandButton2.caption = "Cancel" + + 'Reset the colors + PomodoroTimer.BackColor = -2147483633 + TextBox2.BackColor = -2147483633 + tBx1.BackColor = -2147483633 + + StartTime = Now() + TodaysDate = Date + + + Dim M As Double, S As Double + Dim TotalTime + Dim EndTime As Double + Dim RemaingTime As Double + + TotalTime = 60 * AllowedTime + AllowedTimeSec + EndTime = DateAdd("s", TotalTime, Now()) + RemaingTime = DateDiff("s", Now(), EndTime) + + + Do + RemaingTime = DateDiff("s", Now(), EndTime) + M = Int(RemaingTime / 60) + S = RemaingTime - 60 * M + + With tBx1 + .Value = Format(CStr(M), "00") & ":" & Format(CStr(S), "00") + End With + + 'Released the control to the OS + DoEvents + + 'Now sleep for 0.1 sec + Call Sleep(sleeptime) + + Loop Until RemaingTime <= 0 Or StopTimer + + 'Recording session + If StopTimer = False Or ThisWorkbook.Application.Range("Record_unfinished").Value2 = True Then + If (TotalTime - RemaingTime) / 60 > Range("No_Recording_limit") Then + Call Add_new_record(TodaysDate, StartTime, Now, Not (StopTimer), Range("TaskNameRng")) + End If + End If + + Call Optimize_VBA_Performance(False, calc_iniset) + + If StopTimer = False Then 'If the timer was stopped by the user + 'Proceed with the Break + If ThisWorkbook.Application.Range("Sound_end_Pomodoro") = True Then Beep + TextBox2.Value = "Break" + Call TakeBreak + Else + 'Do nothing + CommandButton2.caption = "Start" + OngoingTimer = False + End If + + If CloseTimer Then Unload Me + +End Sub + +Private Sub TakeBreak() + 'Reset StopTimer: + StopTimer = False + + Dim calc_iniset As Variant: calc_iniset = Application.Calculation + Call Optimize_VBA_Performance(True) + + Dim M As Double, S As Double + M = BreakTime + S = BreakTimeSec + + With tBx1 + .Value = Format(CStr(M), "00") & ":" & Format(CStr(S), "00") + End With + + Call Optimize_VBA_Performance(False, calc_iniset) + + Call TakeBreak2 + +End Sub + +Private Sub TakeBreak2() + Dim M As Long, S As Long + Dim EndTime As Double + Dim RemaingTime As Double + Dim TotalTime As Long + + TotalTime = 60 * BreakTime + BreakTimeSec + EndTime = DateAdd("s", TotalTime, Now()) + RemaingTime = DateDiff("s", Now(), EndTime) + + + Do + RemaingTime = DateDiff("s", Now(), EndTime) + M = Int(RemaingTime / 60) + S = RemaingTime - 60 * M + + 'Flashing + If TotalTime - RemaingTime < 9 Then + If S Mod 2 = 1 Then + PomodoroTimer.BackColor = GetRGBColor_Fill(Range("Flashing_color")) 'Flashing color + TextBox2.BackColor = GetRGBColor_Fill(Range("Flashing_color")) 'Flashing color + tBx1.BackColor = GetRGBColor_Fill(Range("Flashing_color")) 'Flashing color + Else + PomodoroTimer.BackColor = -2147483633 'Normal color + TextBox2.BackColor = -2147483633 'Normal color + tBx1.BackColor = -2147483633 'Normal color + End If + End If + + With tBx1 + .Value = Format(CStr(M), "00") & ":" & Format(CStr(S), "00") + End With + 'Released the control to the OS + DoEvents + 'Now sleep for 0.1 sec + Call Sleep(sleeptime) + Loop Until RemaingTime <= 0 Or StopTimer + + If StopTimer = False Then + If ThisWorkbook.Application.Range("Sound_end_Break") = True Then Beep + 'Remain in color to get the user's attention + PomodoroTimer.BackColor = GetRGBColor_Fill(Range("Flashing_color")) 'Flashing color + TextBox2.BackColor = GetRGBColor_Fill(Range("Flashing_color")) 'Flashing color + tBx1.BackColor = GetRGBColor_Fill(Range("Flashing_color")) 'Flashing color + Else + PomodoroTimer.BackColor = -2147483633 'Normal color + TextBox2.BackColor = -2147483633 'Normal color + tBx1.BackColor = -2147483633 'Normal color + End If + TextBox2.Value = "" + CommandButton2.caption = "Start" + OngoingTimer = False + + 'Redo basic calculations form the initialize macro + M = Int(AllowedTime) + S = (AllowedTime - Int(AllowedTime)) * 60 + With tBx1 + .Value = Format(CStr(M), "00") & ":" & Format(CStr(S), "00") + End With + + + +End Sub + +Private Sub CommandButton2_Click() +If OngoingTimer = False Then 'Start the timer + CommandButton2.caption = "Cancel" + Call Launch_timer +Else 'Stop the timer + StopTimer = True + OngoingTimer = False + 'No need to unload the userform here since the main procedure (Launch_timer) will take care of that + 'Unload Me +End If + +End Sub + + +Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) + 'PURPOSE: This procedure will run if the user click on the "X" to close the userform. + Dim Wkb As Workbook + + Set Wkb = ThisWorkbook + StopTimer = True + CloseTimer = True + + 'At this point, since the user clicked on the userform to close it. Excel is the active window, but it might not be on top. + 'Make Excel the active window (optional) + If ThisWorkbook.Application.Range("Reopen_Excel_after_x").Value2 = True Then + Call AppActivate(Wkb.Application.caption, True) + ShowWindow GetForegroundWindow, SW_SHOWMAXIMIZED + End If + +End Sub + + +Private Sub AlwaysOnTop(caption As String) +'PURPOSE: This function allows the userform to remain on top of all windows - Adjusted +'REFERENCE: https://www.mrexcel.com/forum/excel-questions/386643-userform-always-top-2.html + + #If VBA7 Then + Dim hWnd As LongPtr + #Else + Dim hWnd As Long + #End If + Dim lResult As Boolean + + If Val(Application.Version) >= 9 Then + hWnd = FindWindow("ThunderDFrame", caption) + Else + hWnd = FindWindow("ThunderXFrame", caption) + End If + + If hWnd <> 0 Then + + lResult = SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) + + Else + + MsgBox "AlwaysOnTop: userform with caption '" & caption & "' not found" + + End If + +End Sub diff --git a/src/Pomodoro_Timer.xlsb/PomodoroTimer.frx b/src/Pomodoro_Timer.xlsb/PomodoroTimer.frx new file mode 100644 index 0000000000000000000000000000000000000000..46e4eac5aae6a94638c28d5d6892861538166c11 GIT binary patch literal 3096 zcmeHJO=uHQ5dPk7+NK({>7lJZhduNlQi2T#3L=_PE&dR!0neKzr778L-EJWw!h+t_ zn->KSUOYwd;9c-og?jX$l-?E8n~mSR-IOE{Sn4T~NnU2&?7aDVGqbs#O9CnV6@=<2 z@M(zaWBTih*T=q*)d3e^Vz)Vp;Wn-!Ela}~V33ggZnN18nE=TF^ic->&{w%XS&8T_ z`^f!)tN)mRMY#OY-78kG)CTSY zlShD+wwJ%TxP9=+qs{cQZT9uGcQ>WxA1iA?VYpzgxQ-o`P$0)2s2|`!*`W;81|oW1 z_?U#BtIz%>^NQZjUDaT*t9% zrQC+^yR|GJYLg;>X`K^B7LcWLVlXF#a^26l^{h01m=}?a35p$R9tdYo_v}4N9XBdV zp1bZY`_^UGbJneF=Cr23|8JOgise$NT(a`T)$)>$L*!|(jQnP1@$=l9J24#@i1lR# F{sI)5FU oldnb + +If Not IsEmpty(sht.Cells(rownb, 1)) Then + LastCell_row = rownb +Else + LastCell_row = sht.Cells(rownb, 1).End(xlUp).Row +End If + +End Function diff --git a/src/Pomodoro_Timer.xlsb/UDF_RGB.bas b/src/Pomodoro_Timer.xlsb/UDF_RGB.bas new file mode 100644 index 0000000..941a212 --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/UDF_RGB.bas @@ -0,0 +1,19 @@ +Attribute VB_Name = "UDF_RGB" +Function GetRGBColor_Fill(ByVal MyCell As Range) As Variant +'PURPOSE: Output the RGB color code from the specified cell +'REFERENCE: www.TheSpreadsheetGuru.com + + Dim temparray(1 To 3) As Variant + Dim HEXcolor As String + Dim RGBcolor As String + + HEXcolor = Right("000000" & Hex(MyCell.Interior.Color), 6) + + temparray(1) = CInt("&H" & Right(HEXcolor, 2)) + temparray(2) = CInt("&H" & Mid(HEXcolor, 3, 2)) + temparray(3) = CInt("&H" & Left(HEXcolor, 2)) + + GetRGBColor_Fill = RGB(temparray(1), temparray(2), temparray(3)) + +End Function + diff --git a/src/Pomodoro_Timer.xlsb/VBA_Optimize.bas b/src/Pomodoro_Timer.xlsb/VBA_Optimize.bas new file mode 100644 index 0000000..8466aa5 --- /dev/null +++ b/src/Pomodoro_Timer.xlsb/VBA_Optimize.bas @@ -0,0 +1,16 @@ +Attribute VB_Name = "VBA_Optimize" +Option Explicit + +Sub Optimize_VBA_Performance(ByVal Optimize As Boolean, Optional Calculation As Variant) +'PURPOSE: Disable some VBA related events to allow the code to run faster +'MORE INFOS: http://analystcave.com/excel-improve-vba-performance/ +'https://support.microsoft.com/fr-fr/help/199505/macro-performance-slow-when-page-breaks-are-visible-in-excel + If IsMissing(Calculation) Then + Calculation = IIf(Optimize, xlCalculationManual, xlCalculationAutomatic) + End If + With Application + .Calculation = Calculation + .ScreenUpdating = Not (Optimize) + .EnableEvents = Not (Optimize) + End With +End Sub