From 949b3ad5833fb2f35459d04df2f596e07ccd3021 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Wed, 20 Sep 2023 15:01:41 +0300 Subject: [PATCH] ktimer: drop it there is plasma applet that does the same, bye! Signed-off-by: Ivailo Monev --- CMakeLists.txt | 1 - ktimer/CMakeLists.txt | 33 -- ktimer/COPYING | 346 -------------------- ktimer/Messages.sh | 3 - ktimer/hi128-app-ktimer.png | Bin 15698 -> 0 bytes ktimer/hi16-app-ktimer.png | Bin 856 -> 0 bytes ktimer/hi32-app-ktimer.png | Bin 2334 -> 0 bytes ktimer/hi48-app-ktimer.png | Bin 4441 -> 0 bytes ktimer/ktimer.cpp | 624 ------------------------------------ ktimer/ktimer.desktop | 144 --------- ktimer/ktimer.h | 124 ------- ktimer/main.cpp | 46 --- ktimer/prefwidget.ui | 385 ---------------------- 13 files changed, 1706 deletions(-) delete mode 100644 ktimer/CMakeLists.txt delete mode 100644 ktimer/COPYING delete mode 100644 ktimer/Messages.sh delete mode 100644 ktimer/hi128-app-ktimer.png delete mode 100644 ktimer/hi16-app-ktimer.png delete mode 100644 ktimer/hi32-app-ktimer.png delete mode 100644 ktimer/hi48-app-ktimer.png delete mode 100644 ktimer/ktimer.cpp delete mode 100755 ktimer/ktimer.desktop delete mode 100644 ktimer/ktimer.h delete mode 100644 ktimer/main.cpp delete mode 100644 ktimer/prefwidget.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index 198fead5..09fc880b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,6 @@ kde4_optional_add_subdirectory(kmix) kde4_optional_add_subdirectory(krdc) kde4_optional_add_subdirectory(krfb) kde4_optional_add_subdirectory(ksnapshot) -kde4_optional_add_subdirectory(ktimer) kde4_optional_add_subdirectory(kvkbd) kde4_optional_add_subdirectory(okular) kde4_optional_add_subdirectory(partitionmanager) diff --git a/ktimer/CMakeLists.txt b/ktimer/CMakeLists.txt deleted file mode 100644 index 92507fb9..00000000 --- a/ktimer/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -project(ktimer) - -if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - include(FeatureSummary) - - find_package(KDELibs4 4.23.0 REQUIRED) - - include_directories(${KDE4_INCLUDES}) - add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) -endif() - -set(ktimer_SRCS main.cpp ktimer.cpp prefwidget.ui) - -add_executable(ktimer ${ktimer_SRCS}) -target_link_libraries(ktimer KDE4::kio) - -install( - TARGETS ktimer - DESTINATION ${KDE4_BIN_INSTALL_DIR} -) - -########### install files ############### - -install( - PROGRAMS ktimer.desktop - DESTINATION ${KDE4_XDG_APPS_INSTALL_DIR} -) - -kde4_install_icons(${KDE4_ICON_INSTALL_DIR}) - -if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) - feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) -endif() diff --git a/ktimer/COPYING b/ktimer/COPYING deleted file mode 100644 index 5185fd3f..00000000 --- a/ktimer/COPYING +++ /dev/null @@ -1,346 +0,0 @@ -NOTE! The GPL below is copyrighted by the Free Software Foundation, but -the instance of code that it refers to (the kde programs) are copyrighted -by the authors who actually wrote it. - ---------------------------------------------------------------------------- - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/ktimer/Messages.sh b/ktimer/Messages.sh deleted file mode 100644 index 4d43fe5d..00000000 --- a/ktimer/Messages.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/sh -$EXTRACTRC *.ui >> rc.cpp -$XGETTEXT *.cpp -o $podir/ktimer.pot diff --git a/ktimer/hi128-app-ktimer.png b/ktimer/hi128-app-ktimer.png deleted file mode 100644 index 1720645efb7908606f804bc5a8eca7a317cef104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15698 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 Eg6G*RO8@`> diff --git a/ktimer/hi16-app-ktimer.png b/ktimer/hi16-app-ktimer.png deleted file mode 100644 index cfbc82905c7f812b064d54123dfba518fa0c3e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 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 diff --git a/ktimer/ktimer.cpp b/ktimer/ktimer.cpp deleted file mode 100644 index e74fe933..00000000 --- a/ktimer/ktimer.cpp +++ /dev/null @@ -1,624 +0,0 @@ -/* - * Copyright 2001 Stefan Schimanski <1Stein@gmx.de> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "ktimer.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "kstatusnotifieritem.h" - -class KTimerJobItem : public QTreeWidgetItem { -public: - KTimerJobItem( KTimerJob *job, QTreeWidget *parent ) - : QTreeWidgetItem() { - parent->addTopLevelItem(this); - m_job = job; - m_error = false; - update(); - } - - KTimerJobItem( KTimerJob *job, QTreeWidget * parent, QTreeWidgetItem *after ) - : QTreeWidgetItem() { - int otherItemIndex = parent->indexOfTopLevelItem(after); - parent->insertTopLevelItem(otherItemIndex + 1, this); - m_job = job; - m_error = false; - update(); - } - - virtual ~KTimerJobItem() { - delete m_job; - } - - KTimerJob *job() { return m_job; } - - void setStatus( bool error ) { - m_error = error; - update(); - } - - void update() { - setText( 0, m_job->formatTime(m_job->value()) ); - - if( m_error ) - setIcon( 0, KIcon( QLatin1String( "process-stop" )) ); - else - setIcon( 0, QPixmap() ); - - setText( 1, m_job->formatTime(m_job->delay()) ); - - switch( m_job->state() ) { - case KTimerJob::Stopped: setIcon( 2, KIcon( QLatin1String( "media-playback-stop" )) ); break; - case KTimerJob::Paused: setIcon( 2, KIcon( QLatin1String( "media-playback-pause" )) ); break; - case KTimerJob::Started: setIcon( 2, KIcon( QLatin1String( "arrow-right" )) ); break; - } - - setText( 3, m_job->command() ); - } - -private: - bool m_error; - KTimerJob *m_job; -}; - - -/***************************************************************/ - - -struct KTimerPrefPrivate -{ - QList jobs; -}; - -KTimerPref::KTimerPref( QWidget *parent) - : QDialog( parent ) -{ - d = new KTimerPrefPrivate; - - setupUi(this); - - // set icons - m_stop->setIcon( KIcon( QLatin1String( "media-playback-stop" )) ); - m_pause->setIcon( KIcon( QLatin1String( "media-playback-pause" )) ); - m_start->setIcon( KIcon( QLatin1String( "arrow-right" )) ); - - // create tray icon - KStatusNotifierItem *tray = new KStatusNotifierItem(this); - tray->setIconByName(QLatin1String( "ktimer" )); - tray->setCategory(KStatusNotifierItem::ApplicationStatus); - tray->setStatus(KStatusNotifierItem::Active); - // set help button gui item - m_help->setGuiItem(KStandardGuiItem::help()); - - // Exit - KAction *exit = KStandardAction::quit(this, SLOT(exit()), this); - addAction(exit); - - // connect - connect( m_add, SIGNAL(clicked()), SLOT(add()) ); - connect( m_remove, SIGNAL(clicked()), SLOT(remove()) ); - connect( m_help, SIGNAL(clicked()), SLOT(help()) ); - connect( m_list, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), - SLOT(currentChanged(QTreeWidgetItem*,QTreeWidgetItem*)) ); - loadJobs( KGlobal::config().data() ); - - show(); -} - - -KTimerPref::~KTimerPref() -{ - delete d; -} - -void KTimerPref::saveAllJobs() { - saveJobs( KGlobal::config().data() ); -} - - -void KTimerPref::add() -{ - KTimerJob *job = new KTimerJob; - KTimerJobItem *item = new KTimerJobItem( job, m_list ); - - connect( job, SIGNAL(delayChanged(KTimerJob*,uint)), - SLOT(jobChanged(KTimerJob*)) ); - connect( job, SIGNAL(valueChanged(KTimerJob*,uint)), - SLOT(jobChanged(KTimerJob*)) ); - connect( job, SIGNAL(stateChanged(KTimerJob*,States)), - SLOT(jobChanged(KTimerJob*)) ); - connect( job, SIGNAL(commandChanged(KTimerJob*,QString)), - SLOT(jobChanged(KTimerJob*)) ); - connect( job, SIGNAL(finished(KTimerJob*,bool)), - SLOT(jobFinished(KTimerJob*,bool)) ); - - job->setUser( item ); - - // Qt drops currentChanged signals on first item (bug?) - if( m_list->topLevelItemCount()==1 ) - currentChanged( item , NULL); - - m_list->setCurrentItem( item ); - m_list->update(); -} - - -void KTimerPref::remove() -{ - delete m_list->currentItem(); - m_list->update(); -} - -void KTimerPref::help() -{ - KToolInvocation::invokeHelp(); -} - -// note, don't use old, but added it so we can connect to the new one -void KTimerPref::currentChanged( QTreeWidgetItem *i , QTreeWidgetItem * /* old */) -{ - KTimerJobItem *item = static_cast(i); - if( item ) { - KTimerJob *job = item->job(); - - m_state->setEnabled( true ); - m_settings->setEnabled( true ); - m_remove->setEnabled( true ); - m_delayH->disconnect(); - m_delayM->disconnect(); - m_delay->disconnect(); - m_loop->disconnect(); - m_one->disconnect(); - m_start->disconnect(); - m_pause->disconnect(); - m_stop->disconnect(); - m_counter->disconnect(); - m_slider->disconnect(); - m_commandLine->disconnect(); - m_commandLine->lineEdit()->disconnect(); - - // Set hour, minute and second QSpinBoxes before we connect to signals. - int h, m, s; - job->secondsToHMS( job->delay(), &h, &m, &s ); - m_delayH->setValue( h ); - m_delayM->setValue( m ); - m_delay->setValue( s ); - - connect( m_commandLine->lineEdit(), SIGNAL(textChanged(QString)), - job, SLOT(setCommand(QString)) ); - connect( m_delayH, SIGNAL(valueChanged(int)), - SLOT(delayChanged()) ); - connect( m_delayM, SIGNAL(valueChanged(int)), - SLOT(delayChanged()) ); - connect( m_delay, SIGNAL(valueChanged(int)), - SLOT(delayChanged()) ); - connect( m_loop, SIGNAL(toggled(bool)), - job, SLOT(setLoop(bool)) ); - connect( m_one, SIGNAL(toggled(bool)), - job, SLOT(setOneInstance(bool)) ); - connect( m_stop, SIGNAL(clicked()), - job, SLOT(stop()) ); - connect( m_pause, SIGNAL(clicked()), - job, SLOT(pause()) ); - connect( m_start, SIGNAL(clicked()), - job, SLOT(start()) ); - connect( m_slider, SIGNAL(valueChanged(int)), - job, SLOT(setValue(int)) ); - - m_commandLine->lineEdit()->setText( job->command() ); - m_loop->setChecked( job->loop() ); - m_one->setChecked( job->oneInstance() ); - m_counter->display( (int)job->value() ); - m_slider->setMaximum( job->delay() ); - m_slider->setValue( job->value() ); - - } else { - m_state->setEnabled( false ); - m_settings->setEnabled( false ); - m_remove->setEnabled( false ); - } -} - - -void KTimerPref::jobChanged( KTimerJob *job ) -{ - KTimerJobItem *item = static_cast(job->user()); - if( item ) { - item->update(); - m_list->update(); - - if( item==m_list->currentItem() ) { - - // XXX optimize - m_slider->setMaximum( job->delay() ); - m_slider->setValue( job->value() ); - m_counter->display( (int)job->value() ); - } - } -} - - -void KTimerPref::jobFinished( KTimerJob *job, bool error ) -{ - KTimerJobItem *item = static_cast(job->user()); - item->setStatus( error ); - m_list->update(); -} - -/* Hour/Minute/Second was changed. This slot calculates the seconds until we start - the job and inform the current job */ -void KTimerPref::delayChanged() -{ - KTimerJobItem *item = static_cast(m_list->currentItem()); - if ( item ) { - KTimerJob *job = item->job(); - int time_sec = job->timeToSeconds( m_delayH->value(), m_delayM->value(), m_delay->value() ); - job->setDelay( time_sec ); - } -} - -// Really quits the application -void KTimerPref::exit() { - done(0); - qApp->quit(); -} - -void KTimerPref::done(int result) { - saveAllJobs(); - QDialog::done(result); -} - -void KTimerPref::saveJobs( KConfig *cfg ) -{ - const int nbList=m_list->topLevelItemCount(); - for (int num = 0; num < nbList; ++num) - { - KTimerJobItem *item = static_cast(m_list->topLevelItem(num)); - item->job()->save( cfg, QString(QLatin1String( "Job%1" )).arg( num ) ); - - } - - KConfigGroup jobscfg = cfg->group("Jobs"); - jobscfg.writeEntry( "Number", m_list->topLevelItemCount()); - - jobscfg.sync(); -} - - -void KTimerPref::loadJobs( KConfig *cfg ) -{ - const int num = cfg->group("Jobs").readEntry( "Number", 0 ); - for( int n=0; nload( cfg, QString( QLatin1String( "Job%1" ) ).arg(n) ); - - job->setUser( item ); - jobChanged ( job); - } - - m_list->update(); -} - - -/*********************************************************************/ - - -struct KTimerJobPrivate { - unsigned delay; - QString command; - bool loop; - bool oneInstance; - unsigned value; - KTimerJob::States state; - QList processes; - void *user; - - QTimer *timer; -}; - - -KTimerJob::KTimerJob( QObject *parent) - : QObject( parent ) -{ - d = new KTimerJobPrivate; - - d->delay = 100; - d->loop = false; - d->oneInstance = true; - d->value = 100; - d->state = Stopped; - d->user = 0; - - d->timer = new QTimer( this ); - connect( d->timer, SIGNAL(timeout()), SLOT(timeout()) ); -} - - -KTimerJob::~KTimerJob() -{ - delete d; -} - - -void KTimerJob::save( KConfig *cfg, const QString& grp ) -{ - KConfigGroup groupcfg = cfg->group(grp); - groupcfg.writeEntry( "Delay", d->delay ); - groupcfg.writePathEntry( "Command", d->command ); - groupcfg.writeEntry( "Loop", d->loop ); - groupcfg.writeEntry( "OneInstance", d->oneInstance ); - groupcfg.writeEntry( "State", (int)d->state ); -} - - -void KTimerJob::load( KConfig *cfg, const QString& grp ) -{ - KConfigGroup groupcfg = cfg->group(grp); - setDelay( groupcfg.readEntry( "Delay", 100 ) ); - setCommand( groupcfg.readPathEntry( "Command", QString() ) ); - setLoop( groupcfg.readEntry( "Loop", false ) ); - setOneInstance( groupcfg.readEntry( "OneInstance", d->oneInstance ) ); - setState( (States)groupcfg.readEntry( "State", (int)Stopped ) ); -} - - -// Format given seconds to hour:minute:seconds and return QString -QString KTimerJob::formatTime( int seconds ) const -{ - int h, m, s; - secondsToHMS( seconds, &h, &m, &s ); - return QString( QLatin1String( "%1:%2:%3" ) ).arg( h ).arg( m, 2, 10, QLatin1Char( '0' ) ).arg( s,2, 10, QLatin1Char( '0' ) ); -} - - -// calculate seconds from hour, minute and seconds, returns seconds -int KTimerJob::timeToSeconds( int hours, int minutes, int seconds ) const -{ - return hours * 3600 + minutes * 60 + seconds; -} - - -// calculates hours, minutes and seconds from given secs. -void KTimerJob::secondsToHMS( int secs, int *hours, int *minutes, int *seconds ) const -{ - int s = secs; - (*hours) = s / 3600; - s = s % 3600; - (*minutes) = s / 60; - (*seconds) = s % 60; -} - -void *KTimerJob::user() -{ - return d->user; -} - - -void KTimerJob::setUser( void *user ) -{ - d->user = user; -} - - -unsigned KTimerJob::delay() const -{ - return d->delay; -} - - -void KTimerJob::pause() -{ - setState( Paused ); -} - -void KTimerJob::stop() -{ - setState( Stopped ); -} - -void KTimerJob::start() -{ - setState( Started ); -} - -void KTimerJob::setDelay( int sec ) -{ - setDelay( (unsigned)sec ); -} - -void KTimerJob::setValue( int value ) -{ - setValue( (unsigned)value ); -} - -void KTimerJob::setDelay( unsigned sec ) -{ - if( d->delay!=sec ) { - d->delay = sec; - - if( d->state==Stopped ) - setValue( sec ); - - emit delayChanged( this, sec ); - emit changed( this ); - } -} - - -QString KTimerJob::command() const -{ - return d->command; -} - - -void KTimerJob::setCommand( const QString &cmd ) -{ - if( d->command!=cmd ) { - d->command = cmd; - emit commandChanged( this, cmd ); - emit changed( this ); - } -} - - -bool KTimerJob::loop() const -{ - return d->loop; -} - - -void KTimerJob::setLoop( bool loop ) -{ - if( d->loop!=loop ) { - d->loop = loop; - emit loopChanged( this, loop ); - emit changed( this ); - } -} - - -bool KTimerJob::oneInstance() const -{ - return d->oneInstance; -} - - -void KTimerJob::setOneInstance( bool one ) -{ - if( d->oneInstance!=one ) { - d->oneInstance = one; - emit oneInstanceChanged( this, one ); - emit changed( this ); - } -} - - -unsigned KTimerJob::value() const -{ - return d->value; -} - - -void KTimerJob::setValue( unsigned value ) -{ - if( d->value!=value ) { - d->value = value; - emit valueChanged( this, value ); - emit changed( this ); - } -} - - -KTimerJob::States KTimerJob::state() const -{ - return d->state; -} - - -void KTimerJob::setState( KTimerJob::States state ) -{ - if( d->state!=state ) { - if( state==Started ) - d->timer->start( 1000 ); - else - d->timer->stop(); - - if( state==Stopped ) - setValue( d->delay ); - - d->state = state; - emit stateChanged( this, state ); - emit changed( this ); - } -} - - -void KTimerJob::timeout() -{ - if( d->state==Started && d->value!=0 ) { - setValue( d->value-1 ); - if( d->value==0 ) { - fire(); - if( d->loop ) - setValue( d->delay ); - else - stop(); - } - } -} - - -void KTimerJob::processExited(int, QProcess::ExitStatus status) -{ - QProcess * proc = static_cast(sender()); - const bool ok = status==0; - const int i = d->processes.indexOf( proc); - if (i != -1) - delete d->processes.takeAt(i); - - if( !ok ) emit error( this ); - emit finished( this, !ok ); -} - - - - -void KTimerJob::fire() -{ - if( !d->oneInstance || d->processes.isEmpty() ) { - QProcess *proc = new QProcess; - d->processes.append( proc ); - connect( proc, SIGNAL(finished(int,QProcess::ExitStatus)), - SLOT(processExited(int,QProcess::ExitStatus)) ); - if (!d->command.simplified ().isEmpty()) { - proc->start(d->command); - emit fired( this ); - } - if(proc->state() == QProcess::NotRunning) { - const int i = d->processes.indexOf( proc); - if (i != -1) - delete d->processes.takeAt(i); - emit error( this ); - emit finished( this, true ); - } - } -} -#include "moc_ktimer.cpp" diff --git a/ktimer/ktimer.desktop b/ktimer/ktimer.desktop deleted file mode 100755 index c4d551bf..00000000 --- a/ktimer/ktimer.desktop +++ /dev/null @@ -1,144 +0,0 @@ -[Desktop Entry] -GenericName=Countdown Launcher -GenericName[ar]=مطلق العدّ التنازلى -GenericName[ast]=Llanzador de cuenta atrás -GenericName[bg]=Хронометър -GenericName[bs]=Pokretač odbrojavanja -GenericName[ca]=Llançador amb compte enrere -GenericName[ca@valencia]=Llançador amb compte arrere -GenericName[cs]=Stopky -GenericName[cy]=Cychwynydd Cyfrif yn Ôl -GenericName[da]=Nedtællingsstarter -GenericName[de]=Startet den Zähler -GenericName[el]=Αντίστροφη μέτρηση για την ενεργοποίηση λογισμικού -GenericName[en_GB]=Countdown Launcher -GenericName[es]=Lanzador de cuenta atrás -GenericName[et]=Ajaarvestuse käivitaja -GenericName[eu]=Atzekoz aurrerako zenbaketaren jaurtitzailea -GenericName[fa]=راه‌انداز شمارش معکوس -GenericName[fi]=Lähtölaskenta -GenericName[fr]=Lanceur de compte à rebours -GenericName[ga]=Tosaitheoir Comhairimh Síos -GenericName[gl]=Iniciador en conta-atrás -GenericName[hne]=उलटी गिनती चालू करइया -GenericName[hr]=Pokretač odbrojavanja -GenericName[hu]=Visszaszámláló -GenericName[ia]=Lanceator de computo a retro -GenericName[id]=Peluncur dengan Hitungan Waktu -GenericName[is]=Niðurteljari -GenericName[it]=Conto alla rovescia -GenericName[ja]=タイマー -GenericName[kk]=Кері санақ -GenericName[km]=កម្មវិធី​ចាប់ផ្ដើម​កា​ររាប់​ថយក្រោយ -GenericName[ko]=카운트다운 실행기 -GenericName[lt]=Laiko skaičiuoklė -GenericName[lv]=Laika atskaites palaidējs -GenericName[mr]=काउंटडाउन प्रक्षेपक -GenericName[nb]=Nedtellingstarter -GenericName[nds]=Teller starten -GenericName[ne]=काउन्टडाउन सुरुआतकर्ता -GenericName[nl]=Afteller -GenericName[nn]=Nedteljing -GenericName[pa]=ਪੁੱਠੀ ਗਿਣਤੀ ਸ਼ੁਰੂਆਤੀ ਲਾਂਚਰ -GenericName[pl]=Odliczanie -GenericName[pt]=Contagem Decrescente -GenericName[pt_BR]=Lançador de contagem regressiva -GenericName[ro]=Cronometru -GenericName[ru]=Обратный отсчёт -GenericName[sk]=Odpočítavané spúšťanie -GenericName[sl]=Zaganjalnik odštevanja -GenericName[sq]=Nisës i Numërimit Mbrapsht -GenericName[sr]=Покретач одбројавања -GenericName[sr@ijekavian]=Покретач одбројавања -GenericName[sr@ijekavianlatin]=Pokretač odbrojavanja -GenericName[sr@latin]=Pokretač odbrojavanja -GenericName[sv]=Nerräknande startprogram -GenericName[ta]= குறிப்பு எடுப்பான் நேரக்குறைப்பான் -GenericName[th]=ตัวเรียกใช้งานแบบนับถอยหลัง -GenericName[tr]=Gerisayım Çalıştırıcı -GenericName[ug]=تەتۈر سانىغۇچنى ئجرا قىلغۇچ -GenericName[uk]=Таймер -GenericName[wa]=Usteye di munutreye -GenericName[x-test]=xxCountdown Launcherxx -GenericName[zh_CN]=倒计时执行器 -GenericName[zh_TW]=倒數發射計時 -Exec=ktimer --icon '%i' --caption '%c' -Icon=ktimer -Type=Application -Terminal=false -Name=KTimer -Name[af]=Ktimer -Name[ar]=KTimer -Name[ast]=KTimer -Name[bg]=KTimer -Name[br]=KTimer -Name[bs]=KTimer -Name[ca]=KTimer -Name[ca@valencia]=KTimer -Name[cs]=KTimer -Name[cy]=KTimer -Name[da]=KTimer -Name[de]=KTimer -Name[el]=KTimer -Name[en_GB]=KTimer -Name[eo]=KTimer -Name[es]=KTimer -Name[et]=KTimer -Name[eu]=KTimer -Name[fi]=KTimer -Name[fr]=KTimer -Name[ga]=KTimer -Name[gl]=KTimer -Name[he]=KTimer -Name[hne]=के-टाइमर -Name[hr]=KTimer -Name[hu]=KTimer -Name[ia]=KTimer -Name[id]=KTimer -Name[is]=KTimer -Name[it]=KTimer -Name[ja]=KTimer -Name[kk]=KTimer -Name[km]=KTimer -Name[ko]=KTimer -Name[lt]=KTimer -Name[lv]=KTimer -Name[mk]=KTimer -Name[mr]=के-टाइमर -Name[ms]=KTimer -Name[nb]=KTimer -Name[nds]=KTimer -Name[ne]=केडीई समय सूचक -Name[nl]=KTimer -Name[nn]=KTimer -Name[pa]=KTimer -Name[pl]=Czasomierz -Name[pt]=KTimer -Name[pt_BR]=KTimer -Name[ro]=KTimer -Name[ru]=KTimer -Name[sk]=KTimer -Name[sl]=KTimer -Name[sq]=KTimer -Name[sr]=К‑одбројавач -Name[sr@ijekavian]=К‑одбројавач -Name[sr@ijekavianlatin]=K‑odbrojavač -Name[sr@latin]=K‑odbrojavač -Name[sv]=Ktimer -Name[ta]= Kநேரம் காட்டி -Name[tg]=KВақтсанҷ -Name[th]=ตั้งเวลาทำงาน-K -Name[tr]=KTimer -Name[ug]=KTimer -Name[uk]=KTimer -Name[uz]=KTimer -Name[uz@cyrillic]=KTimer -Name[vi]=KTimer -Name[wa]=KTimer -Name[xh]=Umjongi Wexesha -Name[x-test]=xxKTimerxx -Name[zh_CN]=KTimer -Name[zh_TW]=KDE 計時器 -StartupNotify=true -Categories=Qt;KDE;Utility; -X-DocPath=ktimer/index.html diff --git a/ktimer/ktimer.h b/ktimer/ktimer.h deleted file mode 100644 index e78e204a..00000000 --- a/ktimer/ktimer.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2001 Stefan Schimanski <1Stein@gmx.de> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef KTIMER_H_INCLUDED -#define KTIMER_H_INCLUDED - -#include -#include -#include -#include "ui_prefwidget.h" - -#include -class KConfig; - -class KTimerJob : public QObject { - Q_OBJECT - - public: - KTimerJob( QObject *parent=0); - virtual ~KTimerJob(); - - enum States { Stopped, Paused, Started }; - - unsigned delay() const; - QString command() const; - bool loop() const; - bool oneInstance() const; - unsigned value() const; - States state() const; - void *user(); - void setUser( void *user ); - - void load( KConfig *cfg, const QString& grp ); - void save( KConfig *cfg, const QString& grp ); - QString formatTime( int seconds ) const; - int timeToSeconds( int hours, int minutes, int seconds ) const; - void secondsToHMS( int secs, int *hours, int *minutes, int *seconds ) const; - - - public slots: - void setDelay( unsigned int sec ); - void setDelay( int sec ); - void setCommand( const QString &cmd ); - void setLoop( bool loop ); - void setOneInstance( bool one ); - void setValue( unsigned int value ); - void setValue( int value ); - void setState( States state ); - - void pause(); - void stop(); - void start(); - - signals: - void stateChanged( KTimerJob *job, States state ); - void delayChanged( KTimerJob *job, unsigned int sec ); - void commandChanged( KTimerJob *job, const QString &cmd ); - void loopChanged( KTimerJob *job, bool loop ); - void oneInstanceChanged( KTimerJob *job, bool one ); - void valueChanged( KTimerJob *job, unsigned int value ); - - void changed( KTimerJob *job ); - void fired( KTimerJob *job ); - void finished( KTimerJob *job, bool error ); - void error( KTimerJob *job ); - - protected slots: - virtual void fire(); - - private slots: - void timeout(); - void processExited(int, QProcess::ExitStatus); - - private: - struct KTimerJobPrivate *d; -}; - - -class KTimerPref : public QDialog, public Ui::PrefWidget -{ - Q_OBJECT - public: - KTimerPref( QWidget *parent=0); - virtual ~KTimerPref(); - - public slots: - void exit(); - void done(int result); - - protected slots: - void add(); - void remove(); - void help(); - void currentChanged( QTreeWidgetItem * , QTreeWidgetItem *); - - void saveJobs( KConfig *cfg ); - void loadJobs( KConfig *cfg ); - void saveAllJobs(); - - private slots: - void jobChanged( KTimerJob *job ); - void jobFinished( KTimerJob *job, bool error ); - void delayChanged(); - - private: - struct KTimerPrefPrivate *d; -}; - -#endif diff --git a/ktimer/main.cpp b/ktimer/main.cpp deleted file mode 100644 index ed21e28a..00000000 --- a/ktimer/main.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2001 Stefan Schimanski - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include -#include -#include -#include - -#include "ktimer.h" - -static const char description[] = - I18N_NOOP("KDE Timer"); - -static const char version[] = "v0.10"; - -int main( int argc, char **argv ) -{ - KAboutData aboutData( "ktimer", 0, ki18n("KTimer"), - version, ki18n(description), KAboutData::License_GPL, - ki18n("(c) 2001, Stefan Schimanski")); - aboutData.addAuthor(ki18n("Stefan Schimanski"),KLocalizedString(), "schimmi@kde.org"); - KCmdLineArgs::init( argc, argv, &aboutData ); - - KApplication app; - app.setQuitOnLastWindowClosed( false ); - - KTimerPref *timer = new KTimerPref; - app.setTopWidget( timer ); - - return app.exec(); -} diff --git a/ktimer/prefwidget.ui b/ktimer/prefwidget.ui deleted file mode 100644 index 96becd48..00000000 --- a/ktimer/prefwidget.ui +++ /dev/null @@ -1,385 +0,0 @@ - - - PrefWidget - - - - 0 - 0 - 563 - 352 - - - - Timer Settings - - - - 11 - - - 6 - - - - - List of countdowns you have set - - - New countdowns are put here. You can add and remove them, and stop and start them. - - - true - - - - Counter - - - - - Delay - - - - - State - - - - - Command - - - - - - - - Add a new task - - - Add a new task to the list. - - - &New - - - - - - - Remove a task - - - Remove a task from the list. - - - &Remove - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - - - - false - - - State - - - - 11 - - - 6 - - - - - Speed up or slow down your countdown - - - You can use this slider to adjust the time. - - - Qt::Horizontal - - - - - - - Time in seconds until command is executed - - - This number is how many seconds are left for the selected countdown. - - - 6 - - - - - - - Pause a countdown - - - Use this to pause a timer countdown. - - - || - - - - - - - Start a countdown - - - Use this to start or restart a countdown. - - - > - - - - - - - Stop a countdown - - - Use this to stop the countdown for a task. - - - = - - - - - - - - - - Detailed help documentation - - - Click here to open the help documentation viewer. - - - - - - - false - - - Settings - - - - 11 - - - 6 - - - - - Check this box if you want your countdown to start over after it finishes - - - Check this box if you want your countdown to start over after it finishes - - - &Loop - - - - - - - Delay: - - - - - - - Enter the seconds here - - - You can change the amount of time in the countdown here. - - - 59 - - - - - - - Check this box if you only want to open one copy of your program - - - Check this box if you only want one instance to open - - - Start only &one instance - - - - - - - seconds - - - - - - - - 0 - 0 - - - - false - - - Command line: - - - - - - - Enter the hours here - - - - - - - Enter the minutes here - - - 59 - - - - - - - hours - - - - - - - minutes - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - - - - - 1 - 0 - - - - - 1 - 0 - - - - command you would like to run when time is up - - - Enter a program you would like to run when the countdown is zero - - - true - - - - - - - - - - - KUrlRequester - QFrame -
kurlrequester.h
- 1 -
- - KPushButton - QPushButton -
kpushbutton.h
-
-
- - m_list - m_add - m_remove - m_commandLine - m_delayH - m_delayM - m_delay - m_loop - m_one - m_start - m_pause - m_stop - m_slider - m_help - - - kseparator.h - - -