# HG changeset patch # User eldar # Date 1242597006 0 # Node ID fd6eb3a1759dcd159aff106b329cfbc21005a327 # Parent 71b382c10ef648b4bada0f21f9985df67b924db2 license diff -r 71b382c10ef6 -r fd6eb3a1759d LICENSE.GPL --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LICENSE.GPL Sun May 17 21:50:06 2009 +0000 @@ -0,0 +1,361 @@ + + The Qt GUI Toolkit is Copyright (C) 1994-2008 Nokia. + + You may use, distribute and copy the Qt GUI Toolkit under the terms of + GNU General Public License version 2, which is displayed below. + +------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, 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) + + 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 St, 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) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +------------------------------------------------------------------------- + +In addition, as a special exception, Trolltech gives permission to link the +code of its release of Qt with the OpenSSL project's "OpenSSL" library (or +modified versions of the "OpenSSL" library that use the same license as the +original version), and distribute the linked executables. + +You must comply with the GNU General Public License version 2 in all respects +for all of the code used other than the "OpenSSL" code. If you modify this +file, you may extend this exception to your version of the file, but you are +not obligated to do so. If you do not wish to do so, delete this exception +statement from your version of this file. diff -r 71b382c10ef6 -r fd6eb3a1759d demos/browser/downloadmanager.d --- a/demos/browser/downloadmanager.d Sun May 17 18:49:59 2009 +0000 +++ b/demos/browser/downloadmanager.d Sun May 17 21:50:06 2009 +0000 @@ -71,10 +71,8 @@ class DownloadItem : public QWidget, public Ui_DownloadItem { - Q_OBJECT -signals: - void statusChanged(); + mixin Signal!("statusChanged"); public: @@ -83,37 +81,37 @@ It moves the data from the QNetworkReply into the QFile as well as update the information/progressbar and report errors. */ - DownloadItem(QNetworkReply *reply = 0, bool requestFileName = false, QWidget *parent = 0) - : QWidget(parent) -{ - m_reply = reply; -m_requestFileName = requestFileName; -m_bytesReceived = 0; - - setupUi(this); - QPalette p = downloadInfoLabel.palette(); - p.setColor(QPalette::Text, Qt.darkGray); - downloadInfoLabel.setPalette(p); - progressBar.setMaximum(0); - tryAgainButton.hide(); - connect(stopButton, SIGNAL(clicked()), this, SLOT(stop())); - connect(openButton, SIGNAL(clicked()), this, SLOT(open())); - connect(tryAgainButton, SIGNAL(clicked()), this, SLOT(tryAgain())); + this(QNetworkReply reply = null, bool requestFileName = false, QWidget parent = null) + { + super(parent); + m_reply = reply; + m_requestFileName = requestFileName; + m_bytesReceived = 0; + + setupUi(this); + QPalette p = downloadInfoLabel.palette(); + p.setColor(QPalette.Text, Qt.darkGray); + downloadInfoLabel.setPalette(p); + progressBar.setMaximum(0); + tryAgainButton.hide(); + stopButton.clicked.connect(&this.stop); + openButton.clicked.connect(&this.open); + tryAgainButton.clicked.connect(&this.tryAgain); - init(); -} + init(); + } bool downloading() -{ - return (progressBar.isVisible()); -} + { + return (progressBar.isVisible()); + } bool downloadedSuccessfully() -{ - return (stopButton.isHidden() && tryAgainButton.isHidden()); -} + { + return (stopButton.isHidden() && tryAgainButton.isHidden()); + } QUrl m_url; @@ -121,248 +119,248 @@ QFile m_output; QNetworkReply *m_reply; -private slots: +private: // slots: void stop() -{ - setUpdatesEnabled(false); - stopButton.setEnabled(false); - stopButton.hide(); - tryAgainButton.setEnabled(true); - tryAgainButton.show(); - setUpdatesEnabled(true); - m_reply.abort(); -} + { + setUpdatesEnabled(false); + stopButton.setEnabled(false); + stopButton.hide(); + tryAgainButton.setEnabled(true); + tryAgainButton.show(); + setUpdatesEnabled(true); + m_reply.abort(); + } void tryAgain() -{ - if (!tryAgainButton.isEnabled()) - return; + { + if (!tryAgainButton.isEnabled()) + return; - tryAgainButton.setEnabled(false); - tryAgainButton.setVisible(false); - stopButton.setEnabled(true); - stopButton.setVisible(true); - progressBar.setVisible(true); + tryAgainButton.setEnabled(false); + tryAgainButton.setVisible(false); + stopButton.setEnabled(true); + stopButton.setVisible(true); + progressBar.setVisible(true); - QNetworkReply *r = BrowserApplication::networkAccessManager().get(QNetworkRequest(m_url)); - if (m_reply) - m_reply.deleteLater(); - if (m_output.exists()) - m_output.remove(); - m_reply = r; - init(); - emit statusChanged(); -} + QNetworkReply *r = BrowserApplication.networkAccessManager().get(QNetworkRequest(m_url)); + if (m_reply) + m_reply.deleteLater(); + if (m_output.exists()) + m_output.remove(); + m_reply = r; + init(); + emit statusChanged(); + } void open() -{ - QFileInfo info(m_output); - QUrl url = QUrl::fromLocalFile(info.absolutePath()); - QDesktopServices::openUrl(url); -} + { + QFileInfo info(m_output); + QUrl url = QUrl.fromLocalFile(info.absolutePath()); + QDesktopServices.openUrl(url); + } void downloadReadyRead() -{ - if (m_requestFileName && m_output.fileName().isEmpty()) - return; - if (!m_output.isOpen()) { - // in case someone else has already put a file there - if (!m_requestFileName) - getFileName(); - if (!m_output.open(QIODevice::WriteOnly)) { - downloadInfoLabel.setText(tr("Error opening save file: %1") + { + if (m_requestFileName && m_output.fileName().isEmpty()) + return; + if (!m_output.isOpen()) { + // in case someone else has already put a file there + if (!m_requestFileName) + getFileName(); + if (!m_output.open(QIODevice.WriteOnly)) { + downloadInfoLabel.setText(tr("Error opening save file: %1") + .arg(m_output.errorString())); + stopButton.click(); + emit statusChanged(); + return; + } + emit statusChanged(); + } + if (-1 == m_output.write(m_reply.readAll())) { + downloadInfoLabel.setText(tr("Error saving: %1") .arg(m_output.errorString())); stopButton.click(); - emit statusChanged(); - return; } - emit statusChanged(); - } - if (-1 == m_output.write(m_reply.readAll())) { - downloadInfoLabel.setText(tr("Error saving: %1") - .arg(m_output.errorString())); - stopButton.click(); } -} - void error(QNetworkReply::NetworkError code) -{ - qDebug() << "DownloadItem::error" << m_reply.errorString() << m_url; - downloadInfoLabel.setText(tr("Network Error: %1").arg(m_reply.errorString())); - tryAgainButton.setEnabled(true); - tryAgainButton.setVisible(true); -} + void error(QNetworkReply.NetworkError code) + { + qDebug() << "DownloadItem::error" << m_reply.errorString() << m_url; + downloadInfoLabel.setText(tr("Network Error: %1").arg(m_reply.errorString())); + tryAgainButton.setEnabled(true); + tryAgainButton.setVisible(true); + } void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) -{ - m_bytesReceived = bytesReceived; - if (bytesTotal == -1) { - progressBar.setValue(0); - progressBar.setMaximum(0); - } else { - progressBar.setValue(bytesReceived); - progressBar.setMaximum(bytesTotal); + { + m_bytesReceived = bytesReceived; + if (bytesTotal == -1) { + progressBar.setValue(0); + progressBar.setMaximum(0); + } else { + progressBar.setValue(bytesReceived); + progressBar.setMaximum(bytesTotal); + } + updateInfoLabel(); } - updateInfoLabel(); -} void metaDataChanged() -{ - qDebug() << "DownloadItem::metaDataChanged: not handled."; -} + { + qDebug() << "DownloadItem::metaDataChanged: not handled."; + } void finished() -{ - progressBar.hide(); - stopButton.setEnabled(false); - stopButton.hide(); - m_output.close(); - updateInfoLabel(); - emit statusChanged(); -} + { + progressBar.hide(); + stopButton.setEnabled(false); + stopButton.hide(); + m_output.close(); + updateInfoLabel(); + emit statusChanged(); + } private: void getFileName() -{ - QSettings settings; - settings.beginGroup(QLatin1String("downloadmanager")); - QString defaultLocation = QDesktopServices::storageLocation(QDesktopServices::DesktopLocation); - QString downloadDirectory = settings.value(QLatin1String("downloadDirectory"), defaultLocation).toString(); - if (!downloadDirectory.isEmpty()) - downloadDirectory += QLatin1Char('/'); + { + QSettings settings; + settings.beginGroup(QLatin1String("downloadmanager")); + QString defaultLocation = QDesktopServices.storageLocation(QDesktopServices.DesktopLocation); + QString downloadDirectory = settings.value(QLatin1String("downloadDirectory"), defaultLocation).toString(); + if (!downloadDirectory.isEmpty()) + downloadDirectory += QLatin1Char('/'); - QString defaultFileName = saveFileName(downloadDirectory); - QString fileName = defaultFileName; - if (m_requestFileName) { - fileName = QFileDialog::getSaveFileName(this, tr("Save File"), defaultFileName); - if (fileName.isEmpty()) { - m_reply.close(); - fileNameLabel.setText(tr("Download canceled: %1").arg(QFileInfo(defaultFileName).fileName())); - return; + QString defaultFileName = saveFileName(downloadDirectory); + QString fileName = defaultFileName; + if (m_requestFileName) { + fileName = QFileDialog.getSaveFileName(this, tr("Save File"), defaultFileName); + if (fileName.isEmpty()) { + m_reply.close(); + fileNameLabel.setText(tr("Download canceled: %1").arg(QFileInfo(defaultFileName).fileName())); + return; + } } + m_output.setFileName(fileName); + fileNameLabel.setText(QFileInfo(m_output.fileName()).fileName()); + if (m_requestFileName) + downloadReadyRead(); } - m_output.setFileName(fileName); - fileNameLabel.setText(QFileInfo(m_output.fileName()).fileName()); - if (m_requestFileName) - downloadReadyRead(); -} void init() -{ - if (!m_reply) - return; + { + if (!m_reply) + return; - // attach to the m_reply - m_url = m_reply.url(); - m_reply.setParent(this); - connect(m_reply, SIGNAL(readyRead()), this, SLOT(downloadReadyRead())); - connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), - this, SLOT(error(QNetworkReply::NetworkError))); - connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)), - this, SLOT(downloadProgress(qint64, qint64))); - connect(m_reply, SIGNAL(metaDataChanged()), - this, SLOT(metaDataChanged())); - connect(m_reply, SIGNAL(finished()), - this, SLOT(finished())); + // attach to the m_reply + m_url = m_reply.url(); + m_reply.setParent(this); + connect(m_reply, SIGNAL(readyRead()), this, SLOT(downloadReadyRead())); + connect(m_reply, SIGNAL(error(QNetworkReply.NetworkError)), + this, SLOT(error(QNetworkReply.NetworkError))); + connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)), + this, SLOT(downloadProgress(qint64, qint64))); + connect(m_reply, SIGNAL(metaDataChanged()), + this, SLOT(metaDataChanged())); + connect(m_reply, SIGNAL(finished()), + this, SLOT(finished())); - // reset info - downloadInfoLabel.clear(); - progressBar.setValue(0); - getFileName(); + // reset info + downloadInfoLabel.clear(); + progressBar.setValue(0); + getFileName(); - // start timer for the download estimation - m_downloadTime.start(); + // start timer for the download estimation + m_downloadTime.start(); - if (m_reply.error() != QNetworkReply::NoError) { - error(m_reply.error()); - finished(); + if (m_reply.error() != QNetworkReply.NoError) { + error(m_reply.error()); + finished(); + } } -} void updateInfoLabel() -{ - if (m_reply.error() == QNetworkReply::NoError) - return; + { + if (m_reply.error() == QNetworkReply.NoError) + return; - qint64 bytesTotal = progressBar.maximum(); - bool running = !downloadedSuccessfully(); + qint64 bytesTotal = progressBar.maximum(); + bool running = !downloadedSuccessfully(); - // update info label - double speed = m_bytesReceived * 1000.0 / m_downloadTime.elapsed(); - double timeRemaining = ((double)(bytesTotal - m_bytesReceived)) / speed; - QString timeRemainingString = tr("seconds"); - if (timeRemaining > 60) { - timeRemaining = timeRemaining / 60; - timeRemainingString = tr("minutes"); - } - timeRemaining = floor(timeRemaining); + // update info label + double speed = m_bytesReceived * 1000.0 / m_downloadTime.elapsed(); + double timeRemaining = ((double)(bytesTotal - m_bytesReceived)) / speed; + QString timeRemainingString = tr("seconds"); + if (timeRemaining > 60) { + timeRemaining = timeRemaining / 60; + timeRemainingString = tr("minutes"); + } + timeRemaining = floor(timeRemaining); - // When downloading the eta should never be 0 - if (timeRemaining == 0) - timeRemaining = 1; + // When downloading the eta should never be 0 + if (timeRemaining == 0) + timeRemaining = 1; - QString info; - if (running) { - QString remaining; - if (bytesTotal != 0) - remaining = tr("- %4 %5 remaining") - .arg(timeRemaining) - .arg(timeRemainingString); - info = QString(tr("%1 of %2 (%3/sec) %4")) - .arg(dataString(m_bytesReceived)) - .arg(bytesTotal == 0 ? tr("?") : dataString(bytesTotal)) - .arg(dataString((int)speed)) - .arg(remaining); - } else { - if (m_bytesReceived == bytesTotal) - info = dataString(m_output.size()); - else - info = tr("%1 of %2 - Stopped") + QString info; + if (running) { + QString remaining; + if (bytesTotal != 0) + remaining = tr("- %4 %5 remaining") + .arg(timeRemaining) + .arg(timeRemainingString); + info = QString(tr("%1 of %2 (%3/sec) %4")) .arg(dataString(m_bytesReceived)) - .arg(dataString(bytesTotal)); + .arg(bytesTotal == 0 ? tr("?") : dataString(bytesTotal)) + .arg(dataString((int)speed)) + .arg(remaining); + } else { + if (m_bytesReceived == bytesTotal) + info = dataString(m_output.size()); + else + info = tr("%1 of %2 - Stopped") + .arg(dataString(m_bytesReceived)) + .arg(dataString(bytesTotal)); + } + downloadInfoLabel.setText(info); } - downloadInfoLabel.setText(info); -} QString dataString(int size) -{ - QString unit; - if (size < 1024) { - unit = tr("bytes"); - } else if (size < 1024*1024) { - size /= 1024; - unit = tr("kB"); - } else { - size /= 1024*1024; - unit = tr("MB"); + { + QString unit; + if (size < 1024) { + unit = tr("bytes"); + } else if (size < 1024*1024) { + size /= 1024; + unit = tr("kB"); + } else { + size /= 1024*1024; + unit = tr("MB"); + } + return QString(QLatin1String("%1 %2")).arg(size).arg(unit); } - return QString(QLatin1String("%1 %2")).arg(size).arg(unit); -} QString saveFileName(const QString &directory); -{ - // Move this function into QNetworkReply to also get file name sent from the server - QString path = m_url.path(); - QFileInfo info(path); - QString baseName = info.completeBaseName(); - QString endName = info.suffix(); + { + // Move this function into QNetworkReply to also get file name sent from the server + QString path = m_url.path(); + QFileInfo info(path); + QString baseName = info.completeBaseName(); + QString endName = info.suffix(); - if (baseName.isEmpty()) { - baseName = QLatin1String("unnamed_download"); - qDebug() << "DownloadManager:: downloading unknown file:" << m_url; + if (baseName.isEmpty()) { + baseName = QLatin1String("unnamed_download"); + qDebug() << "DownloadManager:: downloading unknown file:" << m_url; + } + QString name = directory + baseName + QLatin1Char('.') + endName; + if (QFile.exists(name)) { + // already exists, don't overwrite + int i = 1; + do { + name = directory + baseName + QLatin1Char('-') + QString.number(i++) + QLatin1Char('.') + endName; + } while (QFile.exists(name)); + } + return name; } - QString name = directory + baseName + QLatin1Char('.') + endName; - if (QFile::exists(name)) { - // already exists, don't overwrite - int i = 1; - do { - name = directory + baseName + QLatin1Char('-') + QString::number(i++) + QLatin1Char('.') + endName; - } while (QFile::exists(name)); - } - return name; -} bool m_requestFileName; qint64 m_bytesReceived; @@ -397,7 +395,7 @@ this(QWidget *parent = null) : QDialog(parent) , m_autoSaver(new AutoSaver(this)) - , m_manager(BrowserApplication::networkAccessManager()) + , m_manager(BrowserApplication.networkAccessManager()) , m_iconProvider(0) , m_removePolicy(Never) { @@ -460,7 +458,7 @@ { if (!reply || reply.url().isEmpty()) return; - QVariant header = reply.header(QNetworkRequest::ContentLengthHeader); + QVariant header = reply.header(QNetworkRequest.ContentLengthHeader); bool ok; int size = header.toInt(&ok); if (ok && size == 0) @@ -521,18 +519,18 @@ m_iconProvider = new QFileIconProvider(); QIcon icon = m_iconProvider.icon(item.m_output.fileName()); if (icon.isNull()) - icon = style().standardIcon(QStyle::SP_FileIcon); + icon = style().standardIcon(QStyle.SP_FileIcon); item.fileIcon.setPixmap(icon.pixmap(48, 48)); downloadsView.setRowHeight(row, item.minimumSizeHint().height()); bool remove = false; - QWebSettings *globalSettings = QWebSettings::globalSettings(); + QWebSettings *globalSettings = QWebSettings.globalSettings(); if (!item.downloading() - && globalSettings.testAttribute(QWebSettings::PrivateBrowsingEnabled)) + && globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled)) remove = true; if (item.downloadedSuccessfully() - && removePolicy() == DownloadManager::SuccessFullDownload) { + && removePolicy() == DownloadManager.SuccessFullDownload) { remove = true; } if (remove) @@ -553,7 +551,7 @@ if (row == 0) show(); downloadsView.setIndexWidget(m_model.index(row, 0), item); - QIcon icon = style().standardIcon(QStyle::SP_FileIcon); + QIcon icon = style().standardIcon(QStyle.SP_FileIcon); item.fileIcon.setPixmap(icon.pixmap(48, 48)); downloadsView.setRowHeight(row, item.sizeHint().height()); } @@ -565,7 +563,7 @@ itemCount.setText(count == 1 ? tr("1 Download") : tr("%1 Downloads").arg(count)); } -DownloadModel::DownloadModel(DownloadManager *downloadManager, QObject *parent) +DownloadModel.DownloadModel(DownloadManager *downloadManager, QObject *parent) : QAbstractListModel(parent) , m_downloadManager(downloadManager) { diff -r 71b382c10ef6 -r fd6eb3a1759d demos/browser/ui_downloaditem.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demos/browser/ui_downloaditem.d Sun May 17 21:50:06 2009 +0000 @@ -0,0 +1,140 @@ +/******************************************************************************** +** Form generated from reading ui file 'downloaditem.ui' +** +** Created: Mon May 18 01:52:16 2009 +** by: Qt User Interface Compiler version 4.5.0 +** +** WARNING! All changes made in this file will be lost when recompiling ui file! +********************************************************************************/ + +import qt.core.QVariant; +import qt.gui.QAction; +import qt.gui.QApplication; +import qt.gui.QButtonGroup; +import qt.gui.QHBoxLayout; +import qt.gui.QHeaderView; +import qt.gui.QLabel; +import qt.gui.QProgressBar; +import qt.gui.QPushButton; +import qt.gui.QSpacerItem; +import qt.gui.QVBoxLayout; +import qt.gui.QWidget; +import squeezelabel; + + +class Ui_DownloadItem +{ +public: + QHBoxLayout horizontalLayout; + QLabel fileIcon; + QVBoxLayout verticalLayout_2; + SqueezeLabel fileNameLabel; + QProgressBar progressBar; + SqueezeLabel downloadInfoLabel; + QVBoxLayout verticalLayout; + QSpacerItem verticalSpacer; + QPushButton tryAgainButton; + QPushButton stopButton; + QPushButton openButton; + QSpacerItem verticalSpacer_2; + + void setupUi(QWidget DownloadItem) + { + if (DownloadItem.objectName().isEmpty()) + DownloadItem.setObjectName("DownloadItem"); + DownloadItem.resize(423, 110); + horizontalLayout = new QHBoxLayout(DownloadItem); + horizontalLayout.setMargin(0); + horizontalLayout.setObjectName("horizontalLayout"); + fileIcon = new QLabel(DownloadItem); + fileIcon.setObjectName("fileIcon"); + QSizePolicy sizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(fileIcon.sizePolicy().hasHeightForWidth()); + fileIcon.setSizePolicy(sizePolicy); + + horizontalLayout.addWidget(fileIcon); + + verticalLayout_2 = new QVBoxLayout(); + verticalLayout_2.setObjectName("verticalLayout_2")); + fileNameLabel = new SqueezeLabel(DownloadItem); + fileNameLabel.setObjectName("fileNameLabel")); + QSizePolicy sizePolicy1(QSizePolicy.Expanding, QSizePolicy.Preferred); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(fileNameLabel.sizePolicy().hasHeightForWidth()); + fileNameLabel.setSizePolicy(sizePolicy1); + + verticalLayout_2.addWidget(fileNameLabel); + + progressBar = new QProgressBar(DownloadItem); + progressBar.setObjectName("progressBar"); + progressBar.setValue(0); + + verticalLayout_2.addWidget(progressBar); + + downloadInfoLabel = new SqueezeLabel(DownloadItem); + downloadInfoLabel.setObjectName("downloadInfoLabel")); + QSizePolicy sizePolicy2(QSizePolicy.Minimum, QSizePolicy.Preferred); + sizePolicy2.setHorizontalStretch(0); + sizePolicy2.setVerticalStretch(0); + sizePolicy2.setHeightForWidth(downloadInfoLabel.sizePolicy().hasHeightForWidth()); + downloadInfoLabel.setSizePolicy(sizePolicy2); + + verticalLayout_2.addWidget(downloadInfoLabel); + + + horizontalLayout.addLayout(verticalLayout_2); + + verticalLayout = new QVBoxLayout(); + verticalLayout.setObjectName("verticalLayout")); + verticalSpacer = new QSpacerItem(17, 1, QSizePolicy.Minimum, QSizePolicy.Expanding); + + verticalLayout.addItem(verticalSpacer); + + tryAgainButton = new QPushButton(DownloadItem); + tryAgainButton.setObjectName("tryAgainButton"); + tryAgainButton.setEnabled(false); + + verticalLayout.addWidget(tryAgainButton); + + stopButton = new QPushButton(DownloadItem); + stopButton.setObjectName("stopButton"); + + verticalLayout.addWidget(stopButton); + + openButton = new QPushButton(DownloadItem); + openButton.setObjectName("openButton"); + + verticalLayout.addWidget(openButton); + + verticalSpacer_2 = new QSpacerItem(17, 5, QSizePolicy.Minimum, QSizePolicy.Expanding); + + verticalLayout.addItem(verticalSpacer_2); + + + horizontalLayout.addLayout(verticalLayout); + + + retranslateUi(DownloadItem); + + QMetaObject.connectSlotsByName(DownloadItem); + } // setupUi + + void retranslateUi(QWidget DownloadItem) + { + DownloadItem.setWindowTitle(QApplication.translate("DownloadItem", "Form", 0, QApplication.UnicodeUTF8)); + fileIcon.setText(QApplication.translate("DownloadItem", "Ico", 0, QApplication.UnicodeUTF8)); + fileNameLabel.setProperty("text", QVariant(QApplication.translate("DownloadItem", "Filename", 0, QApplication.UnicodeUTF8))); + downloadInfoLabel.setProperty("text", QVariant(QString())); + tryAgainButton.setText(QApplication.translate("DownloadItem", "Try Again", 0, QApplication.UnicodeUTF8)); + stopButton.setText(QApplication.translate("DownloadItem", "Stop", 0, QApplication.UnicodeUTF8)); + openButton.setText(QApplication.translate("DownloadItem", "Open", 0, QApplication.UnicodeUTF8)); + Q_UNUSED(DownloadItem); + } // retranslateUi + +} + + +class DownloadItem: public Ui_DownloadItem {} diff -r 71b382c10ef6 -r fd6eb3a1759d qt/core/QVariant.d --- a/qt/core/QVariant.d Sun May 17 18:49:59 2009 +0000 +++ b/qt/core/QVariant.d Sun May 17 21:50:06 2009 +0000 @@ -142,7 +142,7 @@ } - public this(char[] str) { + public this(string str) { void* __qt_return_value = qtd_QVariant_QVariant_String(str.ptr, str.length); super(__qt_return_value); } @@ -396,9 +396,9 @@ } public final string toString() { - char[] res; + string res; qtd_QVariant_toString(nativeId, &res); - return cast(string)res; + return res; } public final QTime toTime() {