kde-cygwin--cvs Mailing List for KDE on Cygwin
Status: Inactive
Brought to you by:
habacker
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(88) |
Jul
(27) |
Aug
(3) |
Sep
(1) |
Oct
(3) |
Nov
(20) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(23) |
Feb
(25) |
Mar
(9) |
Apr
(88) |
May
(137) |
Jun
(244) |
Jul
(52) |
Aug
(17) |
Sep
(1) |
Oct
(12) |
Nov
(124) |
Dec
(42) |
2003 |
Jan
(112) |
Feb
(53) |
Mar
(24) |
Apr
(6) |
May
|
Jun
(63) |
Jul
(64) |
Aug
(151) |
Sep
(5) |
Oct
(87) |
Nov
(58) |
Dec
(13) |
2004 |
Jan
(76) |
Feb
(22) |
Mar
(30) |
Apr
(41) |
May
(4) |
Jun
(60) |
Jul
(39) |
Aug
(217) |
Sep
(165) |
Oct
(90) |
Nov
(72) |
Dec
(60) |
2005 |
Jan
(153) |
Feb
(110) |
Mar
(76) |
Apr
(237) |
May
(60) |
Jun
(20) |
Jul
(39) |
Aug
(8) |
Sep
(136) |
Oct
(39) |
Nov
|
Dec
|
2006 |
Jan
(16) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2012 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
Соберем для Вас по сети интернет базу данных потенциальных клиентов для Вашего Бизнеса (Все контактные данные). Узнайте об этом более подробно: Тел +79137936342 Email: pro...@mi... Skype: s.3837 ICQ: 6288862 |
From: Ralf H. <hab...@us...> - 2007-03-23 07:35:10
|
Update of /cvsroot/kde-cygwin/tools/cygsetup In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv1100 Modified Files: README cygsetup Added Files: Makefile setup.hint Log Message: - made real cygwin binary package - added download source options (-ds) - use fixes name for downloaded package config - some minor fixes --- NEW FILE: Makefile --- VERSION=1.2 package: mkdir -p tmp/usr/share/doc/Cygwin mkdir -p tmp/usr/bin cp README tmp/usr/share/doc/Cygwin/cygsetup-$(VERSION).README cp cygsetup tmp/usr/bin cd tmp && tar -cjf ../cygsetup-$(VERSION).tar.bz * rm -r tmp --- NEW FILE: setup.hint --- category: tools requires: cygwin wget bzip2 gawk sed grep uniq sdesc: "cygwin command line installer" ldesc: "cygwin command line installer" Index: README =================================================================== RCS file: /cvsroot/kde-cygwin/tools/cygsetup/README,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- README 22 Jun 2005 18:32:29 -0000 1.4 +++ README 23 Mar 2007 07:35:08 -0000 1.5 @@ -23,10 +23,54 @@ 3. run 'cygsetup -l -a' to see a list of available packages 4. run 'cygsetup -i <package>' to install a package +A complete command list is shown below: + + +$ ./cygsetup --help +usage: cygsetup <mode> <options> - generic command format + + --mirror - list all mirrors + --mirror=<num> - set active mirror and download recent setup.ini + + [-q | --query] [<opt>] - query informations about installed packages + -q -l [-a | --all] - query informations of all installed packages + -q -l <pkg> - query file of installed package <pkg> + -q -f <file> - find package for file <file> + + [-l | --list] <opt> - list informations about available packages from recent mirror + -l <pkg> - list informations about available <pkg> + -l [-a | -all] - list informations about all available + + [-i | --install] <pkg> - install package <pkg> + + [-u | --upgrade] <opt> - upgrade package (please stop any running app) + -u <pkg> - upgrade package <pkg> + u [-a | --all] - upgrade all installed packages + + [-r | --reinstall] <pkg> - reinstall package <pkg> + + [-e | --erase] <pkg> - remove package <pkg> + LIMITATIONS ----------- -- could not install cygwin package because of in use dll problem +- does not overwrite any opened dll so make sure to close any cygwin application + intended to update, especially bash and the cygwin package could not be updated + +HISTORY +------- + +1.2 +- made real cygwin binary package +- added download source options (-ds) +- use fixes name for downloaded package config +- some minor fixes + +1.2 +- first version + + + Ralf Habacker Index: cygsetup =================================================================== RCS file: /cvsroot/kde-cygwin/tools/cygsetup/cygsetup,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- cygsetup 22 Jun 2005 18:23:56 -0000 1.3 +++ cygsetup 23 Mar 2007 07:35:08 -0000 1.4 @@ -1,713 +1,753 @@ -#!/bin/sh -# -# cygwin command line installer -# -# Website: http://kde-cygwin.sf.net -# -# Requirements: wget bzip2 gawk sed grep uniq -# -# -# Copyright (c) 2003-2004 Ralf Habacker <Ralf Hab...@fr...> -# [...1435 lines suppressed...] + ;; + + # remove installed package + -e | --erase) + case $option in + *) + for i in `echo $option $params`; do + echo $i + remove_package_from_cygwin_db "$i" + done + esac + ;; + + # help + -h | --help) + print_help + ;; + esac \ No newline at end of file |
From: Ralf H. <hab...@us...> - 2006-01-22 18:45:28
|
Update of /cvsroot/kde-cygwin/tools/installer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9667/installer Added Files: kde-installer.iss Log Message: new file --- NEW FILE: kde-installer.iss --- ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=KDE Installer AppVerName=KDE Installer 0.5.1 AppPublisher=Dipl.-Ing. Ralf Habacker AppPublisherURL=www.kde.org AppSupportURL=www.kde.org AppUpdatesURL=www.kde.org DefaultDirName={pf}\KDE Installer DefaultGroupName=KDE Installer Compression=lzma SolidCompression=yes [Tasks] Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked [Files] Source: C:\Daten\kde-installer-0.5.1\bin\kde-installer-console.exe; DestDir: {app}; Flags: ignoreversion Source: C:\Daten\kde-installer-0.5.1\bin\unzip.exe; DestDir: {app}; Flags: ignoreversion Source: C:\Daten\kde-installer-0.5.1\bin\unzip32.dll; DestDir: {app}; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files Source: ..\..\Qt\4.1.0\bin\QtCore4.dll; DestDir: {app}; Flags: ignoreversion Source: ..\..\MinGW\bin\mingwm10.dll; DestDir: {app}; Flags: ignoreversion Source: ..\..\Qt\4.1.0\bin\QtNetwork4.dll; DestDir: {app}; Flags: ignoreversion [INI] Filename: {app}\kde-installer-console.url; Section: InternetShortcut; Key: URL; String: www.kde.org [Icons] Name: {group}\KDE Installer; Filename: {app}\kde-installer-console.exe Name: {group}\{cm:ProgramOnTheWeb,KDE Installer}; Filename: {app}\kde-installer-console.url Name: {userdesktop}\KDE Installer; Filename: {app}\kde-installer-console.exe; Tasks: desktopicon [Run] Filename: {app}\kde-installer-console.exe; Description: {cm:LaunchProgram,KDE Installer}; Flags: nowait postinstall skipifsilent [UninstallDelete] Type: files; Name: {app}\kde-installer-console.url |
From: Ralf H. <hab...@us...> - 2006-01-22 18:42:23
|
Update of /cvsroot/kde-cygwin/tools/installer/shared In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8626/installer/shared Modified Files: installer.cpp installer.h packagelist.cpp packagelist.h Log Message: version 0.5.2 Index: installer.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/installer.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- installer.cpp 22 Jan 2006 18:40:04 -0000 1.1 +++ installer.cpp 22 Jan 2006 18:42:15 -0000 1.2 @@ -21,93 +21,38 @@ ** ****************************************************************************/ -// @TODO load installer config from manifest dir - - #include <QtCore> #include "installer.h" #include "packagelist.h" +#define DEBUG Installer::Installer(PackageList *_packageList) : QObject() { + root = "."; packageList = _packageList; + packageList->installer = this; connect (packageList,SIGNAL(loadedConfig()),this,SLOT(updatePackageList())); - installedList = new QList<QString>(); - -// if (QFile::exists("installed.txt")) -// readFromFile("installed.txt"); -// else -// loadConfig(); } Installer::~Installer() { -// writeToFile("installed.txt"); - delete installedList; } -/* -void Installer::printList(const QString &title) -{ -#ifdef DEBUG - qDebug() << __PRETTY_FUNCTION__; -#endif - qDebug() << title; - QList<QString>::iterator i; - for (i = installedList->begin(); i != installedList->end(); ++i) - qWarning(i->toLatin1()); +void Installer::setRoot(const QString &_root) +{ + root = _root; } -*/ -/* not required at now -bool Installer::readFromFile(QString const &fileName) -{ -#ifdef DEBUG - qDebug() << __PRETTY_FUNCTION__; -#endif - QFile file(fileName); - if (!file.open(QIODevice::ReadOnly| QIODevice::Text)) - return false; - - installedList->clear(); - - while (!file.atEnd()) { - QByteArray line = file.readLine(); - if (line.startsWith("#")) - continue; - installedList->append(line); - } - return true; -} - -bool Installer::writeToFile(QString const &fileName) -{ -#ifdef DEBUG - qDebug() << __PRETTY_FUNCTION__; -#endif - QFile file(fileName); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) - return false; - - QTextStream out(&file); - out << "# installed package list" << "\n"; - QList<QString>::iterator i; - for (i = installedList->begin(); i != installedList->end(); ++i) - out << i->toLatin1() << "\n"; - return true; -} -*/ -bool Installer::loadConfig(const QString &destdir) +bool Installer::loadConfig() { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; #endif - installedList->clear(); - - QDir dir(destdir + "manifest"); + + QDir dir(root + "/manifest"); dir.setFilter(QDir::Files); dir.setNameFilters(QStringList("*.ver")); dir.setSorting(QDir::Size | QDir::Reversed); @@ -118,27 +63,29 @@ Package pkg; pkg.setFromVersionFile(fileInfo.fileName()); packageList->updatePackage(pkg); -// installedList->append(fileInfo.fileName()); } -// printList("installed packages"); return true; } -void Installer::install(const QString &fileName, const QString &destdir) +bool Installer::install(const QString &fileName) { QString cmd = "bin\\unzip.exe -o"; - if (destdir != "") - cmd += " -d " + destdir; + if (root != "") + cmd += " -d " + root; cmd += " " + fileName; qDebug() << cmd; QProcess unzip; unzip.setReadChannelMode(QProcess::MergedChannels); unzip.start(cmd); - if (!unzip.waitForFinished()) + if (!unzip.waitForFinished()) { qDebug() << "unzip failed:" << unzip.errorString(); - else + return false; + } + else { qDebug() << "unzip output:" << unzip.readAll(); + return true; + } } void Installer::updatePackageList() Index: installer.h =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/installer.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- installer.h 22 Jan 2006 18:40:04 -0000 1.1 +++ installer.h 22 Jan 2006 18:42:15 -0000 1.2 @@ -33,18 +33,20 @@ Installer(PackageList *packageList); virtual ~Installer(); - void install(const QString &fileName, const QString &destdir=""); + // set installation root + void setRoot(const QString &_root="."); + bool install(const QString &fileName); // installPackage(Package *pkg) // bool readFromFile(QString const &fileName); // bool writeToFile(QString const &fileName); - bool loadConfig(const QString &destdir=""); + bool loadConfig(); public slots: void updatePackageList(); private: - QList<QString> *installedList; PackageList *packageList; + QString root; }; Index: packagelist.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/packagelist.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- packagelist.cpp 22 Jan 2006 18:40:04 -0000 1.2 +++ packagelist.cpp 22 Jan 2006 18:42:15 -0000 1.3 @@ -25,14 +25,45 @@ #include <QtNetwork> #include "packagelist.h" +#include "downloader.h" +#include "installer.h" //#define DEBUG -PackageList::PackageList() +QStringList filterPackageFiles(const QStringList &list,const QString &mode) +{ + QStringList result; + for (int j = 0; j < list.size(); ++j) { + QUrl url(list.at(j)); + QFileInfo fileInfo(url.path()); + QString fileName = fileInfo.fileName(); + + // only download package not already downloaded and only bin and lib packages + if (mode == "URL" && QFile::exists(fileName)) + qDebug() << fileName << " - already downloaded"; + else if(fileName.contains("src") ) + qDebug() << fileName << " - ignored"; + else { + if (mode == "URL") + qDebug() << fileName << " - downloading"; + else + qDebug() << fileName << " - installing"; + if (mode == "URL") + result << list.at(j); + else + result << fileName; + } + } + return result; +} + + +PackageList::PackageList(Downloader *_downloader) : QObject() { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; #endif + downloader = _downloader; packageList = new QList<Package>; } @@ -52,6 +83,18 @@ packageList->append(package); } +Package *PackageList::getPackage(QString const &pkgName) +{ +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif + QList<Package>::iterator i; + for (i = packageList->begin(); i != packageList->end(); ++i) + if (i->Name() == pkgName) + return &*i; + return 0; +} + void PackageList::listPackages(const QString &title) { #ifdef DEBUG @@ -137,19 +180,7 @@ return true; } -Package *PackageList::getPackage(QString const &pkgName) -{ -#ifdef DEBUG - qDebug() << __PRETTY_FUNCTION__; -#endif - QList<Package>::iterator i; - for (i = packageList->begin(); i != packageList->end(); ++i) - if (i->Name() == pkgName) - return &*i; - return 0; -} - -QStringList PackageList::getFilesToInstall(QString const &pkgName) +QStringList PackageList::getFilesForInstall(QString const &pkgName) { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; @@ -191,3 +222,27 @@ pkg->addInstalledTypes(apkg); return true; } + +bool PackageList::downloadPackage(const QString &pkgName) +{ + QStringList files = getFilesForDownload(pkgName); + files = filterPackageFiles(files,"URL"); + bool ret = true; + for (int j = 0; j < files.size(); ++j) { + if (!downloader->start(files.at(j))) + ret = false; + } + return true; +} + +bool PackageList::installPackage(const QString &pkgName) +{ + QStringList files = getFilesForInstall(pkgName); + files = filterPackageFiles(files,"PATH"); + bool ret = true; + for (int j = 0; j < files.size(); ++j) { + if (!installer->install(files.at(j))) + ret = false; + } + return true; +} Index: packagelist.h =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/packagelist.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- packagelist.h 22 Jan 2006 18:40:04 -0000 1.2 +++ packagelist.h 22 Jan 2006 18:42:15 -0000 1.3 @@ -26,30 +26,43 @@ #include "package.h" +class Downloader; +class Installer; + class PackageList : public QObject { Q_OBJECT public: - PackageList(); + PackageList(Downloader *downloader); virtual ~PackageList(); + void addPackage(Package const &package); + Package *getPackage(QString const &pkgName); void listPackages(const QString &title=""); + bool readFromFile(QString const &fileName); bool readFromHTMLFile(const QString &fileName); bool writeToFile(QString const &fileName); -// static bool downloadPackage(QString const &pkgName); - QStringList getPackageFiles(QString const &pkgName); - Package *getPackage(QString const &pkgName); - QStringList getFilesToInstall(QString const &pkgName); + + QStringList getFilesForInstall(QString const &pkgName); QStringList getFilesForDownload(QString const &pkgName); + bool updatePackage(Package &pkg); + /// download a package + bool downloadPackage(const QString &pkgName); +// bool downloadPackages(const QStringList &pkgNames); + bool installPackage(const QString &pkgName); + signals: void loadedConfig(); private: + Downloader *downloader; + Installer *installer; QList<Package> *packageList; - + friend class Installer; + }; #endif |
From: Ralf H. <hab...@us...> - 2006-01-22 18:42:23
|
Update of /cvsroot/kde-cygwin/tools/installer/console In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8626/installer/console Modified Files: main.cpp Log Message: version 0.5.2 Index: main.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/console/main.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- main.cpp 22 Jan 2006 18:40:04 -0000 1.1 +++ main.cpp 22 Jan 2006 18:42:14 -0000 1.2 @@ -27,43 +27,14 @@ #include "downloader.h" #include "installer.h" -// this functions will go into class PackageList -QStringList filterPackageFiles(const QStringList &list,const QString &mode) -{ - QStringList result; - for (int j = 0; j < list.size(); ++j) { - QUrl url(list.at(j)); - QFileInfo fileInfo(url.path()); - QString fileName = fileInfo.fileName(); - - // only download package not already downloaded and only bin and lib packages - if (mode == "URL" && QFile::exists(fileName)) - qDebug() << fileName << " - already downloaded"; - else if(fileName.contains("src") ) - qDebug() << fileName << " - ignored"; - else { - if (mode == "URL") - qDebug() << fileName << " - downloading"; - else - qDebug() << fileName << " - installing"; - if (mode == "URL") - result << list.at(j); - else - result << fileName; - } - } - return result; -} - - - int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); - PackageList packageList; - Installer installer(&packageList); Downloader downloader(/*blocking=*/ true); + PackageList packageList(&downloader); + Installer installer(&packageList); + installer.setRoot("packages"); if (!QFile::exists("packages.txt")) { // download package list @@ -89,10 +60,7 @@ return 1; if ( !QFile::exists("bin\\unzip.exe") ) { - QStringList files = packageList.getFilesForDownload("unzip"); - files = filterPackageFiles(files,"URL"); - for (int j = 0; j < files.size(); ++j) - downloader.start(files.at(j)); + packageList.downloadPackage("unzip"); } // print list @@ -119,19 +87,13 @@ qDebug() << "the following packages are considered for downloading: " << packages; for (int i = 0; i < packages.size(); ++i) { - QStringList files = packageList.getFilesForDownload(packages.at(i)); - files = filterPackageFiles(files,"URL"); - for (int j = 0; j < files.size(); ++j) - downloader.start(files.at(j)); + packageList.downloadPackage(packages.at(i)); } // install packages if ( QFile::exists("bin/unzip.exe")) { qDebug() << "prelimary installer found, now installing"; for (int i = 0; i < packages.size(); ++i) { - QStringList files = packageList.getFilesToInstall(packages.at(i)); - files = filterPackageFiles(files,"PATH"); - for (int j = 0; j < files.size(); ++j) - installer.install(files.at(j),""); + packageList.installPackage(packages.at(i)); } } |
Update of /cvsroot/kde-cygwin/tools/installer/shared In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7851/installer/shared Modified Files: package.cpp package.h packagelist.cpp packagelist.h Added Files: downloader.cpp downloader.h installer.cpp installer.h Log Message: version 0.5.1 --- NEW FILE: downloader.cpp --- /**************************************************************************** ** ** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** ** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QtNetwork> #include <QtCore> #include "packagelist.h" #include "package.h" #include "downloader.h" class DownloaderProgress { public: void show() {visible = true; } void hide() {visible = false; } void setLabel(const QString &label) { qDebug() << label; } void setMaximum(int value) {} void setValue(int value) { int unit = value/10240; if (oldunit != value/10240) { if (visible) putchar('.'); oldunit = unit; } } private: int oldunit; bool visible; }; Downloader::Downloader(bool _blocking) { blocking = _blocking; progress = new DownloaderProgress(); http = new QHttp(this); connect(http, SIGNAL(requestFinished(int, bool)),this, SLOT(httpRequestFinished(int, bool))); connect(http, SIGNAL(dataReadProgress(int, int)),this, SLOT(updateDataReadProgress(int, int))); connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),this, SLOT(readResponseHeader(const QHttpResponseHeader &))); connect(http, SIGNAL(done(bool)),this, SLOT(allDone(bool))); connect(http, SIGNAL(stateChanged(int)),this, SLOT(stateChanged(int))); } Downloader::~Downloader() { delete progress; delete http; } void Downloader::setError(const QString &text) { qDebug() << text; } bool Downloader::start(const QString &_url, const QString &_fileName) { QString fileName = _fileName; QUrl url(_url); if (fileName == "") { QFileInfo fileInfo(url.path()); fileName = fileInfo.fileName(); } file = new QFile(fileName); if (!file->open(QIODevice::WriteOnly)) { setError(tr("Unable to save the file %1: %2.").arg(fileName).arg(file->errorString())); delete file; file = 0; return false; } http->setHost(url.host(), url.port() != -1 ? url.port() : 80); if (!url.userName().isEmpty()) http->setUser(url.userName(), url.password()); httpRequestAborted = false; QByteArray query = url.encodedQuery(); httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); progress->show(); progress->setLabel(tr("Downloading %1 to %2.").arg(_url).arg(fileName)); if (blocking) { eventLoop = new QEventLoop(); eventLoop->exec(); delete eventLoop; } return true; } void Downloader::cancel() { progress->setLabel(tr("Download canceled.")); httpRequestAborted = true; http->abort(); } void Downloader::httpRequestFinished(int requestId, bool error) { if (httpRequestAborted) { if (file) { file->close(); file->remove(); delete file; file = 0; } if (progress) progress->hide(); return; } if (requestId != httpGetId) return; if (progress) progress->hide(); file->close(); if (error) { file->remove(); setError(tr("Download failed: %1.").arg(http->errorString())); } else { progress->setLabel(tr("download ready")); } delete file; file = 0; } void Downloader::readResponseHeader(const QHttpResponseHeader &responseHeader) { if (responseHeader.statusCode() != 200) { setError(tr("Download failed: %1.").arg(responseHeader.reasonPhrase())); httpRequestAborted = true; progress->hide(); http->abort(); return; } } void Downloader::updateDataReadProgress(int bytesRead, int totalBytes) { if (httpRequestAborted) return; if (progress) { progress->setMaximum(totalBytes); progress->setValue(bytesRead); } } void Downloader::allDone(bool error) { emit done(error); if (blocking) eventLoop->quit(); } void Downloader::stateChanged(int state) { QString stateLabel; switch (state) { case QHttp::Unconnected : stateLabel = "Unconnected"; break; case QHttp::HostLookup : stateLabel = "HostLookup "; break; case QHttp::Connecting : stateLabel = "Connecting "; break; case QHttp::Sending : stateLabel = "Sending "; break; case QHttp::Reading : stateLabel = "Reading "; break; case QHttp::Connected : stateLabel = "Connected "; break; case QHttp::Closing : stateLabel = "Closing "; break; } progress->setLabel(stateLabel); } --- NEW FILE: downloader.h --- /**************************************************************************** ** ** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** ** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef DOWNLOADER_H #define DOWNLOADER_H #include <QtCore> class QHttpResponseHeader; class QHttp; class DownloaderProgress; class QEventLoop; class QFile; class Downloader: public QObject { Q_OBJECT public: Downloader(bool blocking=false); virtual ~Downloader(); bool start(const QString &url, const QString &fileName=""); void cancel(); signals: void done(bool error); private slots: void httpRequestFinished(int requestId, bool error); void readResponseHeader(const QHttpResponseHeader &responseHeader); void updateDataReadProgress(int bytesRead, int totalBytes); void allDone(bool error); void stateChanged(int state); private: void setError(const QString&); QHttp *http; QFile *file; int httpGetId; bool httpRequestAborted; DownloaderProgress *progress; bool blocking; QEventLoop *eventLoop; }; #endif --- NEW FILE: installer.cpp --- /**************************************************************************** ** ** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** ** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ // @TODO load installer config from manifest dir #include <QtCore> #include "installer.h" #include "packagelist.h" Installer::Installer(PackageList *_packageList) : QObject() { packageList = _packageList; connect (packageList,SIGNAL(loadedConfig()),this,SLOT(updatePackageList())); installedList = new QList<QString>(); // if (QFile::exists("installed.txt")) // readFromFile("installed.txt"); // else // loadConfig(); } Installer::~Installer() { // writeToFile("installed.txt"); delete installedList; } /* void Installer::printList(const QString &title) { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; #endif qDebug() << title; QList<QString>::iterator i; for (i = installedList->begin(); i != installedList->end(); ++i) qWarning(i->toLatin1()); } */ /* not required at now bool Installer::readFromFile(QString const &fileName) { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; #endif QFile file(fileName); if (!file.open(QIODevice::ReadOnly| QIODevice::Text)) return false; installedList->clear(); while (!file.atEnd()) { QByteArray line = file.readLine(); if (line.startsWith("#")) continue; installedList->append(line); } return true; } bool Installer::writeToFile(QString const &fileName) { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; #endif QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; QTextStream out(&file); out << "# installed package list" << "\n"; QList<QString>::iterator i; for (i = installedList->begin(); i != installedList->end(); ++i) out << i->toLatin1() << "\n"; return true; } */ bool Installer::loadConfig(const QString &destdir) { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; #endif installedList->clear(); QDir dir(destdir + "manifest"); dir.setFilter(QDir::Files); dir.setNameFilters(QStringList("*.ver")); dir.setSorting(QDir::Size | QDir::Reversed); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); Package pkg; pkg.setFromVersionFile(fileInfo.fileName()); packageList->updatePackage(pkg); // installedList->append(fileInfo.fileName()); } // printList("installed packages"); return true; } void Installer::install(const QString &fileName, const QString &destdir) { QString cmd = "bin\\unzip.exe -o"; if (destdir != "") cmd += " -d " + destdir; cmd += " " + fileName; qDebug() << cmd; QProcess unzip; unzip.setReadChannelMode(QProcess::MergedChannels); unzip.start(cmd); if (!unzip.waitForFinished()) qDebug() << "unzip failed:" << unzip.errorString(); else qDebug() << "unzip output:" << unzip.readAll(); } void Installer::updatePackageList() { #ifdef DEBUG qDebug() << __PRETTY_FUNCTION__; #endif loadConfig(); } --- NEW FILE: installer.h --- /**************************************************************************** ** ** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** ** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef INSTALLER_H #define INSTALLER_H #include <QtCore> class PackageList; class Installer : public QObject { Q_OBJECT public: Installer(PackageList *packageList); virtual ~Installer(); void install(const QString &fileName, const QString &destdir=""); // installPackage(Package *pkg) // bool readFromFile(QString const &fileName); // bool writeToFile(QString const &fileName); bool loadConfig(const QString &destdir=""); public slots: void updatePackageList(); private: QList<QString> *installedList; PackageList *packageList; }; #endif Index: package.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/package.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- package.cpp 22 Jan 2006 18:33:24 -0000 1.1 +++ package.cpp 22 Jan 2006 18:40:04 -0000 1.2 @@ -1,8 +1,8 @@ /**************************************************************************** ** -** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** -** This file is part of the example classes of the Qt Toolkit. +** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation @@ -27,40 +27,119 @@ #include <QtGui> #include <QtNetwork> -QString Package::baseURL = "http://mesh.dl.sourceforge.net/sourceforge/gnuwin32/"; +QString Package::baseURL = "http://ovh.dl.sourceforge.net/sourceforge/gnuwin32/"; -void Package::parsePackageListLine(const QByteArray &line) +Package::Package() { - static Package pkg; - - if (line.contains("<td><a href=\"/project/showfiles.php?group_id=23617")) { - int a = line.indexOf("\">") + 2; - int b = line.indexOf("</a>"); - QByteArray value = line.mid(a,b-a); - if (line.indexOf("release_id") > -1) { - pkg.setVersion(value); - PackageList::addPackage(pkg); - } - else - pkg.setName(value); + installedLIB = false; + installedBIN = false; + installedDOC = false; + installedSRC = false; +} + +Package::Package(QString const &_name, QString const &_version) +{ + name = _name; version = _version; + installedLIB = false; + installedBIN = false; + installedDOC = false; + installedSRC = false; +} + + +const QString Package::getFileName(Package::Type type) +{ + switch (type) { + case BIN: return name + "-" + version + "-bin.zip"; + case LIB: return name + "-" + version + "-lib.zip"; + case SRC: return name + "-" + version + "-doc.zip"; + case DOC: return name + "-" + version + "-src.zip"; + default: return ""; } } -void Package::install(const QString &fileName,const QString &destdir) +const QString Package::getURL(Package::Type type) +{ + switch (type) { + case BIN: return baseURL + name + "-" + version + "-bin.zip"; + case LIB: return baseURL + name + "-" + version + "-lib.zip"; + case SRC: return baseURL + name + "-" + version + "-doc.zip"; + case DOC: return baseURL + name + "-" + version + "-src.zip"; + default: return ""; + } +} + +void Package::setType(const QString &typeString) +{ + if (typeString == "bin") + installedBIN = true; + else if (typeString == "lib") + installedLIB = true; + else if (typeString == "src") + installedSRC = true; + else if (typeString == "doc") + installedDOC = true; +} + +QString Package::toString() +{ + QString result = name + "-" + version; + QString installedTypes = getTypeAsString(); + if (installedTypes != "") + result += " ( installed =" + getTypeAsString() + ")"; + return result; +} + +const QString Package::getTypeAsString() +{ + QString types; + if (installedBIN) + types += " bin "; + if (installedLIB) + types += " lib "; + if (installedSRC) + types += " src "; + if (installedDOC) + types += " doc "; + return types; +} + +bool Package::setFromVersionFile(const QString &str) +{ + QString verString = str; + verString.replace(".ver",""); + int i = verString.indexOf("-"); + int j = verString.lastIndexOf("-"); + QString name = verString.left(i); + QString version = verString.mid(i+1,j-1-i); + QString type = verString.mid(j+1); + setName(name); + setVersion(version); + setType(type); + return true; +} + +/* +bool Package::updateFromVersionFile(const QString &str) +{ + qDebug() << str; + QString verString = str; + verString.replace(".ver",""); + int i = verString.indexOf("-"); + int j = verString.lastIndexOf("-"); + QString name = verString.left(i); + QString version = verString.mid(i+1,j-1-i+1); + QString type = verString.right(j+1); + return true; +} +*/ + +void Package::addInstalledTypes(const Package &pkg) { - QString cmd = "unzip -o"; - if (destdir != "") - cmd += " -d " + destdir; - cmd += " " + fileName; - qDebug() << cmd; - - QProcess unzip; - unzip.setReadChannelMode(QProcess::MergedChannels); - unzip.start(cmd); - if (!unzip.waitForFinished()) - qDebug() << "unzip failed:" << unzip.errorString(); - else - qDebug() << "unzip output:" << unzip.readAll(); + installedLIB = pkg.installedLIB ? pkg.installedLIB : installedLIB ; + installedBIN = pkg.installedBIN ? pkg.installedBIN : installedBIN ; + installedDOC = pkg.installedDOC ? pkg.installedDOC : installedDOC ; + installedSRC = pkg.installedSRC ? pkg.installedSRC : installedSRC ; } void Package::logOutput() Index: package.h =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/package.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- package.h 22 Jan 2006 18:33:24 -0000 1.1 +++ package.h 22 Jan 2006 18:40:04 -0000 1.2 @@ -1,8 +1,8 @@ /**************************************************************************** ** -** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** -** This file is part of the example classes of the Qt Toolkit. +** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation @@ -27,31 +27,36 @@ #include <QtNetwork> class Package { + public: - Package() {} - Package(QString const &_name, QString const &_version) { name = _name; version = _version; } - void setName(QString const &_name) { name = _name; } + enum Type { BIN = 1 ,LIB = 2 ,DOC = 4 ,SRC = 8 }; + + Package(); + Package(QString const &_name, QString const &_version); QString &Name() { return name; } + void setName(QString const &_name) { name = _name; } void setVersion(QString const &_version) { version = _version; } - static void parsePackageListLine(const QByteArray &line); - QString toString() { return name + "-" + version; } - const QString binURL() { return baseURL + name + "-" + version + "-bin.zip"; } - const QString libURL() { return baseURL + name + "-" + version + "-lib.zip"; } - const QString docURL() { return baseURL + name + "-" + version + "-doc.zip"; } - const QString srcURL() { return baseURL + name + "-" + version + "-src.zip"; } - const QString binFileName() { return name + "-" + version + "-bin.zip"; } - const QString libFileName() { return name + "-" + version + "-lib.zip"; } - const QString docFileName() { return name + "-" + version + "-doc.zip"; } - const QString srcFileName() { return name + "-" + version + "-src.zip"; } - static QString baseURL; - void install(const QString &fileName,const QString &destdir=0); + void setType(const QString &typeString); + bool setFromVersionFile(const QString &verString); + QString toString(); + const QString getTypeAsString(); + + const QString getFileName(Package::Type type); + const QString getURL(Package::Type type); + bool isEmpty() {return name == ""; } + void addInstalledTypes(const Package &pkg); private slots: void logOutput(); private: + static QString baseURL; QString name; QString version; + bool installedLIB; + bool installedBIN; + bool installedDOC; + bool installedSRC; }; #endif Index: packagelist.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/packagelist.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- packagelist.cpp 22 Jan 2006 18:33:24 -0000 1.1 +++ packagelist.cpp 22 Jan 2006 18:40:04 -0000 1.2 @@ -1,8 +1,8 @@ /**************************************************************************** ** -** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** -** This file is part of the example classes of the Qt Toolkit. +** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation @@ -25,27 +25,49 @@ #include <QtNetwork> #include "packagelist.h" +//#define DEBUG -QString PackageList::InputFile = "packages.html"; -QString PackageList::OutputFile = "packages.txt"; -QString PackageList::URL = "http://sourceforge.net/project/showfiles.php?group_id=23617"; - -QList<Package> PackageList::packageList; +PackageList::PackageList() + : QObject() +{ +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif + packageList = new QList<Package>; +} + +PackageList::~PackageList() +{ +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif + delete packageList; +} void PackageList::addPackage(Package const &package) { - packageList.append(package); +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif + packageList->append(package); } -void PackageList::listPackages(void) -{ +void PackageList::listPackages(const QString &title) +{ +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif + qDebug() << title; QList<Package>::iterator i; - for (i = packageList.begin(); i != packageList.end(); ++i) + for (i = packageList->begin(); i != packageList->end(); ++i) qWarning(i->toString().toLatin1()); } bool PackageList::writeToFile(QString const &fileName) { +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; @@ -53,18 +75,21 @@ QTextStream out(&file); out << "# package list" << "\n"; QList<Package>::iterator i; - for (i = packageList.begin(); i != packageList.end(); ++i) + for (i = packageList->begin(); i != packageList->end(); ++i) out << i->toString().toLatin1() << "\n"; return true; } bool PackageList::readFromFile(QString const &fileName) { +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif QFile file(fileName); if (!file.open(QIODevice::ReadOnly| QIODevice::Text)) return false; - packageList.clear(); + packageList->clear(); Package pkg; while (!file.atEnd()) { @@ -74,50 +99,95 @@ int i = line.indexOf("-"); pkg.setName(line.left(i)); pkg.setVersion(line.mid(i+1,line.size()-i-2)); - PackageList::addPackage(pkg); + addPackage(pkg); } - PackageList::listPackages(); + emit loadedConfig(); return true; } bool PackageList::readFromHTMLFile(const QString &fileName) { +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif QFile pkglist(fileName); if (!pkglist.exists()) return false; + packageList->clear(); + pkglist.open(QIODevice::ReadOnly); Package pkg; while (!pkglist.atEnd()) { QByteArray line = pkglist.readLine(); - Package::parsePackageListLine(line); + if (line.contains("<td><a href=\"/project/showfiles.php?group_id=23617")) { + int a = line.indexOf("\">") + 2; + int b = line.indexOf("</a>"); + QByteArray value = line.mid(a,b-a); + if (line.indexOf("release_id") > -1) { + pkg.setVersion(value); + addPackage(pkg); + } + else + pkg.setName(value); + } } - PackageList::listPackages(); - PackageList::writeToFile(PackageList::OutputFile); + emit loadedConfig(); return true; } -QStringList PackageList::getPackageFiles(QString const &pkgName) +Package *PackageList::getPackage(QString const &pkgName) { +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif QList<Package>::iterator i; - QStringList list; - for (i = packageList.begin(); i != packageList.end(); ++i) { - if (pkgName == "*" || i->Name() == pkgName) { - list << i->binURL(); - list << i->libURL(); - list << i->docURL(); - list << i->srcURL(); - } - } - return list; + for (i = packageList->begin(); i != packageList->end(); ++i) + if (i->Name() == pkgName) + return &*i; + return 0; } -Package PackageList::getPackage(QString const &pkgName) +QStringList PackageList::getFilesToInstall(QString const &pkgName) { - QList<Package>::iterator i; - for (i = packageList.begin(); i != packageList.end(); ++i) - if (i->Name() == pkgName) - return *i; - return Package(); +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif + QStringList result; + Package *pkg = getPackage(pkgName); + if (!pkg) + return result; + result << pkg->getFileName(Package::BIN); + result << pkg->getFileName(Package::LIB); + result << pkg->getFileName(Package::DOC); + result << pkg->getFileName(Package::SRC); + return result; +} + +QStringList PackageList::getFilesForDownload(QString const &pkgName) +{ +#ifdef DEBUG + qDebug() << __PRETTY_FUNCTION__; +#endif + QStringList result; + Package *pkg = getPackage(pkgName); + if (!pkg) + return result; + result << pkg->getURL(Package::BIN); + result << pkg->getURL(Package::LIB); + result << pkg->getURL(Package::DOC); + result << pkg->getURL(Package::SRC); + return result; +} + +bool PackageList::updatePackage(Package &apkg) +{ + Package *pkg = getPackage(apkg.Name()); + if (!pkg) { + qDebug() << __PRETTY_FUNCTION__ << "package " << apkg.Name() << " not found"; + return false; + } + pkg->addInstalledTypes(apkg); + return true; } Index: packagelist.h =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/shared/packagelist.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- packagelist.h 22 Jan 2006 18:33:24 -0000 1.1 +++ packagelist.h 22 Jan 2006 18:40:04 -0000 1.2 @@ -1,8 +1,8 @@ /**************************************************************************** ** -** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. +** Copyright (C) 2005-2006Ralf Habacker. All rights reserved. ** -** This file is part of the example classes of the Qt Toolkit. +** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation @@ -26,21 +26,29 @@ #include "package.h" -class PackageList { +class PackageList : public QObject { + Q_OBJECT + public: - static void addPackage(Package const &package); - static void listPackages(void); - static bool writeToFile(QString const &fileName); - static bool readFromFile(QString const &fileName); - static bool readFromHTMLFile(const QString &fileName); + PackageList(); + virtual ~PackageList(); + void addPackage(Package const &package); + void listPackages(const QString &title=""); + bool readFromFile(QString const &fileName); + bool readFromHTMLFile(const QString &fileName); + bool writeToFile(QString const &fileName); // static bool downloadPackage(QString const &pkgName); - static QStringList getPackageFiles(QString const &pkgName); - static Package getPackage(QString const &pkgName); - static QString InputFile; - static QString OutputFile; - static QString URL; + QStringList getPackageFiles(QString const &pkgName); + Package *getPackage(QString const &pkgName); + QStringList getFilesToInstall(QString const &pkgName); + QStringList getFilesForDownload(QString const &pkgName); + bool updatePackage(Package &pkg); + + signals: + void loadedConfig(); + private: - static QList<Package> packageList; + QList<Package> *packageList; }; |
From: Ralf H. <hab...@us...> - 2006-01-22 18:40:12
|
Update of /cvsroot/kde-cygwin/tools/installer/console In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7851/installer/console Added Files: console.pro main.cpp Log Message: version 0.5.1 --- NEW FILE: console.pro --- TARGET=kde-installer-console TEMPLATE=app HEADERS = ..\shared\package.h \ ..\shared\packagelist.h \ ..\shared\downloader.h \ ..\shared\installer.h SOURCES = ..\shared\package.cpp \ ..\shared\packagelist.cpp \ ..\shared\downloader.cpp \ ..\shared\installer.cpp \ main.cpp QT += network CONFIG += release console static INCLUDEPATH += ..\shared DESTDIR = ..\bin # install target.path = $$[QT_INSTALL_EXAMPLES]/dialogs/simplewizard sources.files = $$SOURCES $$HEADERS *.pro sources.path = $$[QT_INSTALL_EXAMPLES]/dialogs/simplewizard INSTALLS += target sources --- NEW FILE: main.cpp --- /**************************************************************************** ** ** Copyright (C) 2005-2006 Ralf Habacker. All rights reserved. ** ** This file is part of the KDE installer for windows ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QCoreApplication> #include "packagelist.h" #include "downloader.h" #include "installer.h" // this functions will go into class PackageList QStringList filterPackageFiles(const QStringList &list,const QString &mode) { QStringList result; for (int j = 0; j < list.size(); ++j) { QUrl url(list.at(j)); QFileInfo fileInfo(url.path()); QString fileName = fileInfo.fileName(); // only download package not already downloaded and only bin and lib packages if (mode == "URL" && QFile::exists(fileName)) qDebug() << fileName << " - already downloaded"; else if(fileName.contains("src") ) qDebug() << fileName << " - ignored"; else { if (mode == "URL") qDebug() << fileName << " - downloading"; else qDebug() << fileName << " - installing"; if (mode == "URL") result << list.at(j); else result << fileName; } } return result; } int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); PackageList packageList; Installer installer(&packageList); Downloader downloader(/*blocking=*/ true); if (!QFile::exists("packages.txt")) { // download package list downloader.start("http://sourceforge.net/project/showfiles.php?group_id=23617","packages.html"); // load and parse if (!packageList.readFromHTMLFile("packages.html")) return 1; // save into file if (!packageList.writeToFile("packages.txt")) return 1; // print list packageList.listPackages("Package List"); // remove temporay files QFile::remove("packages.html"); } else { // read list from file if (!packageList.readFromFile("packages.txt")) return 1; if ( !QFile::exists("bin\\unzip.exe") ) { QStringList files = packageList.getFilesForDownload("unzip"); files = filterPackageFiles(files,"URL"); for (int j = 0; j < files.size(); ++j) downloader.start(files.at(j)); } // print list packageList.listPackages("Package List"); if ( !QFile::exists("bin\\unzip.exe") ) { qDebug() << "Please unpack " << packageList.getPackage("unzip")->getFileName(Package::BIN) << " into the current dir" << "\n then restart installer to download and install additional packages." << "\n\n" << app.arguments().at(0) << "<package-name> <package-name>"; return 0; } } QStringList packages; for (int i = 1; i < app.arguments().size(); ++i) { if (!app.arguments().at(i).startsWith("-")) packages << app.arguments().at(i); } if (packages.size() > 0) { qDebug() << "the following packages are considered for downloading: " << packages; for (int i = 0; i < packages.size(); ++i) { QStringList files = packageList.getFilesForDownload(packages.at(i)); files = filterPackageFiles(files,"URL"); for (int j = 0; j < files.size(); ++j) downloader.start(files.at(j)); } // install packages if ( QFile::exists("bin/unzip.exe")) { qDebug() << "prelimary installer found, now installing"; for (int i = 0; i < packages.size(); ++i) { QStringList files = packageList.getFilesToInstall(packages.at(i)); files = filterPackageFiles(files,"PATH"); for (int j = 0; j < files.size(); ++j) installer.install(files.at(j),""); } } } else qDebug() << "no packages selected "; return 0; } |
Update of /cvsroot/kde-cygwin/tools/installer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7851/installer Modified Files: installer.pro readme.txt Removed Files: installer.cpp installer.h installwizard.h main.cpp pagebase.h simplewizard.cpp simplewizard.h Log Message: version 0.5.1 Index: installer.pro =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/installer.pro,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- installer.pro 22 Jan 2006 18:33:24 -0000 1.3 +++ installer.pro 22 Jan 2006 18:40:04 -0000 1.4 @@ -1,23 +1,3 @@ -HEADERS += installer.h \ - installwizard.h \ - simplewizard.h \ - shared/package.h \ - shared/packagelist.h - -SOURCES += installer.cpp \ - installwizard.cpp \ - simplewizard.cpp \ - shared/package.cpp \ - shared/packagelist.cpp \ - main.cpp -FORMS = page1.ui page2.ui page3.ui - -QT += network -CONFIG += -INCLUDEPATH = shared - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/network/http -sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS http.pro -sources.path = $$[QT_INSTALL_EXAMPLES]/network/http -INSTALLS += target sources +TEMPLATE=subdirs +SUBDIRS=console +#gui Index: readme.txt =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/readme.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- readme.txt 22 Jan 2006 18:29:10 -0000 1.1 +++ readme.txt 22 Jan 2006 18:40:04 -0000 1.2 @@ -1,9 +1,49 @@ +Initial version of a KDE installer currently used to download and install +the required libraries from the GNUWIN32 project mirrors + +syntax: + +bin\kde-installer-console.exe <package-name> + +NOTES +===== +packages.txt is a list of recently available packages,which are known to work. +To reload the list from the mirror rename or delete packages.txt. + TODO +==== +- add command line options like + - destdir/installation root + - operation mode --install, --erase, --list --query, ... + +- add dependencies.txt with manual added dependencies (detectable by or package informations ?) + +- create gui version in wizard form (qt's simplewizard example could be taken as base) + + +History +======= + +version 0.5 +----------- +- added support for downloading packages +- added blocking mode to downloader +- added prelimary installation support using external unzip tool -- define blocking function for downloading -- import unzip support -- add package selection page +version 0.4 +------------ +- separated code into shared, console and gui +- created Downloader class +version 0.3 +----------- +- added support for downloading package list +version 0.2 +----------- +- separated code into classes Package, PackageList +version 0.1 +----------- +- initial created from qt http example --- installer.cpp DELETED --- --- installer.h DELETED --- --- installwizard.h DELETED --- --- main.cpp DELETED --- --- pagebase.h DELETED --- --- simplewizard.cpp DELETED --- --- simplewizard.h DELETED --- |
From: Ralf H. <hab...@us...> - 2006-01-22 18:40:12
|
Update of /cvsroot/kde-cygwin/tools/installer/gui In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7851/installer/gui Added Files: gui.pro main.cpp Log Message: version 0.5.1 --- NEW FILE: gui.pro --- TARGET=kde-installer-gui TEMPLATE=app HEADERS = ..\shared\package.h \ ..\shared\packagelist.h \ ..\shared\downloader.h SOURCES = ..\shared\package.cpp \ ..\shared\packagelist.cpp \ ..\shared\downloader.cpp \ main.cpp QT += network CONFIG += debug DEFINES += USE_GUI INCLUDEPATH += ..\shared DESTDIR = ..\bin # install target.path = $$[QT_INSTALL_EXAMPLES]/dialogs/simplewizard sources.files = $$SOURCES $$HEADERS *.pro sources.path = $$[QT_INSTALL_EXAMPLES]/dialogs/simplewizard INSTALLS += target sources --- NEW FILE: main.cpp --- /**************************************************************************** ** ** ****************************************************************************/ #include <QApplication> #include "downloader.h" #include "packagelist.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); // 1. test // Downloader downloader(/*wait=*/ true); // downloader.start("http://sourceforge.net/project/showfiles.php?group_id=23617","packages.html"); // the following does not work for unknown reasons // app.connect(&downloader, SIGNAL(done),&app, SLOT(quit)); // 2. scenario download package files Downloader downloader(/*wait=*/ true); downloader.start("http://sourceforge.net/project/showfiles.php?group_id=23617","packages.html"); PackageList packageList; if (!packageList.readFromHTMLFile("packages.html")) return 1; packageList.listPackages("Package List"); if (!packageList.writeToFile("packages.txt")) return 1; QFile::remove("packages.html"); QStringList list = packageList.getPackageFiles("unzip"); for (int i = 0; i < list.size(); ++i) { qDebug() << list.at(i); downloader.start(list.at(i)); } // return app.exec(); } |
From: Ralf H. <hab...@us...> - 2006-01-22 18:35:53
|
Update of /cvsroot/kde-cygwin/tools/installer/console In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6302/console Log Message: Directory /cvsroot/kde-cygwin/tools/installer/console added to the repository |
From: Ralf H. <hab...@us...> - 2006-01-22 18:35:52
|
Update of /cvsroot/kde-cygwin/tools/installer/gui In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6302/gui Log Message: Directory /cvsroot/kde-cygwin/tools/installer/gui added to the repository |
From: Ralf H. <hab...@us...> - 2006-01-22 18:33:32
|
Update of /cvsroot/kde-cygwin/tools/installer/shared In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4533/installer/shared Added Files: package.cpp package.h packagelist.cpp packagelist.h Log Message: version 0.3 --- NEW FILE: package.cpp --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include "package.h" #include "packagelist.h" #include <QtGui> #include <QtNetwork> QString Package::baseURL = "http://mesh.dl.sourceforge.net/sourceforge/gnuwin32/"; void Package::parsePackageListLine(const QByteArray &line) { static Package pkg; if (line.contains("<td><a href=\"/project/showfiles.php?group_id=23617")) { int a = line.indexOf("\">") + 2; int b = line.indexOf("</a>"); QByteArray value = line.mid(a,b-a); if (line.indexOf("release_id") > -1) { pkg.setVersion(value); PackageList::addPackage(pkg); } else pkg.setName(value); } } void Package::install(const QString &fileName,const QString &destdir) { QString cmd = "unzip -o"; if (destdir != "") cmd += " -d " + destdir; cmd += " " + fileName; qDebug() << cmd; QProcess unzip; unzip.setReadChannelMode(QProcess::MergedChannels); unzip.start(cmd); if (!unzip.waitForFinished()) qDebug() << "unzip failed:" << unzip.errorString(); else qDebug() << "unzip output:" << unzip.readAll(); } void Package::logOutput() { } --- NEW FILE: package.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef PACKAGE_H #define PACKAGE_H #include <QtGui> #include <QtNetwork> class Package { public: Package() {} Package(QString const &_name, QString const &_version) { name = _name; version = _version; } void setName(QString const &_name) { name = _name; } QString &Name() { return name; } void setVersion(QString const &_version) { version = _version; } static void parsePackageListLine(const QByteArray &line); QString toString() { return name + "-" + version; } const QString binURL() { return baseURL + name + "-" + version + "-bin.zip"; } const QString libURL() { return baseURL + name + "-" + version + "-lib.zip"; } const QString docURL() { return baseURL + name + "-" + version + "-doc.zip"; } const QString srcURL() { return baseURL + name + "-" + version + "-src.zip"; } const QString binFileName() { return name + "-" + version + "-bin.zip"; } const QString libFileName() { return name + "-" + version + "-lib.zip"; } const QString docFileName() { return name + "-" + version + "-doc.zip"; } const QString srcFileName() { return name + "-" + version + "-src.zip"; } static QString baseURL; void install(const QString &fileName,const QString &destdir=0); private slots: void logOutput(); private: QString name; QString version; }; #endif --- NEW FILE: packagelist.cpp --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QtGui> #include <QtNetwork> #include "packagelist.h" QString PackageList::InputFile = "packages.html"; QString PackageList::OutputFile = "packages.txt"; QString PackageList::URL = "http://sourceforge.net/project/showfiles.php?group_id=23617"; QList<Package> PackageList::packageList; void PackageList::addPackage(Package const &package) { packageList.append(package); } void PackageList::listPackages(void) { QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) qWarning(i->toString().toLatin1()); } bool PackageList::writeToFile(QString const &fileName) { QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; QTextStream out(&file); out << "# package list" << "\n"; QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) out << i->toString().toLatin1() << "\n"; return true; } bool PackageList::readFromFile(QString const &fileName) { QFile file(fileName); if (!file.open(QIODevice::ReadOnly| QIODevice::Text)) return false; packageList.clear(); Package pkg; while (!file.atEnd()) { QByteArray line = file.readLine(); if (line.startsWith("#")) continue; int i = line.indexOf("-"); pkg.setName(line.left(i)); pkg.setVersion(line.mid(i+1,line.size()-i-2)); PackageList::addPackage(pkg); } PackageList::listPackages(); return true; } bool PackageList::readFromHTMLFile(const QString &fileName) { QFile pkglist(fileName); if (!pkglist.exists()) return false; pkglist.open(QIODevice::ReadOnly); Package pkg; while (!pkglist.atEnd()) { QByteArray line = pkglist.readLine(); Package::parsePackageListLine(line); } PackageList::listPackages(); PackageList::writeToFile(PackageList::OutputFile); return true; } QStringList PackageList::getPackageFiles(QString const &pkgName) { QList<Package>::iterator i; QStringList list; for (i = packageList.begin(); i != packageList.end(); ++i) { if (pkgName == "*" || i->Name() == pkgName) { list << i->binURL(); list << i->libURL(); list << i->docURL(); list << i->srcURL(); } } return list; } Package PackageList::getPackage(QString const &pkgName) { QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) if (i->Name() == pkgName) return *i; return Package(); } --- NEW FILE: packagelist.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef PACKAGELIST_H #define PACKAGELIST_H #include "package.h" class PackageList { public: static void addPackage(Package const &package); static void listPackages(void); static bool writeToFile(QString const &fileName); static bool readFromFile(QString const &fileName); static bool readFromHTMLFile(const QString &fileName); // static bool downloadPackage(QString const &pkgName); static QStringList getPackageFiles(QString const &pkgName); static Package getPackage(QString const &pkgName); static QString InputFile; static QString OutputFile; static QString URL; private: static QList<Package> packageList; }; #endif |
From: Ralf H. <hab...@us...> - 2006-01-22 18:33:32
|
Update of /cvsroot/kde-cygwin/tools/installer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4533/installer Modified Files: installer.pro main.cpp Added Files: installwizard.h pagebase.h simplewizard.cpp simplewizard.h Removed Files: package.cpp package.h packagelist.cpp packagelist.h packages.h Log Message: version 0.3 --- NEW FILE: installwizard.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef INSTALLWIZARD_H #define INSTALLWIZARD_H #include "simplewizard.h" class QCheckBox; class QGroupBox; class QLabel; class QLineEdit; class QRadioButton; class QComboBox; class Installer; class QProgressDialog; class InstallWizard; class PageBase : public QWidget { public: PageBase(InstallWizard *wizard); virtual bool postAction() { return true; } protected: Installer *installer; private: }; #include "ui_page1.h" class Page1 : public PageBase { Q_OBJECT public: Page1(InstallWizard *wizard); private: bool postAction(); Ui::Page1 ui; friend class InstallWizard; }; #include "ui_page2.h" class Page2 : public PageBase { Q_OBJECT public: Page2(InstallWizard *wizard); private: Ui::Page2 ui; }; #include "ui_page3.h" class Page3 : public PageBase { Q_OBJECT public: Page3(InstallWizard *wizard); private: Ui::Page3 ui; }; class InstallWizard : public SimpleWizard { Q_OBJECT public: InstallWizard(QWidget *parent = 0); Installer *installer; protected: PageBase *createPage(int index); void accept(); QWidget *parent; private: Page1 *page1; Page2 *page2; Page3 *page3; // QProgressDialog *progressDialog; friend class Page1; friend class Page2; friend class Page3; friend class Installer; }; #endif --- NEW FILE: pagebase.h --- #include "installwizard.h" --- NEW FILE: simplewizard.cpp --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QtGui> #include "simplewizard.h" #include "installwizard.h" SimpleWizard::SimpleWizard(QWidget *parent) : QDialog(parent) { cancelButton = new QPushButton(tr("Cancel")); backButton = new QPushButton(tr("< &Back")); nextButton = new QPushButton(tr("Next >")); finishButton = new QPushButton(tr("&Finish")); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); connect(backButton, SIGNAL(clicked()), this, SLOT(backButtonClicked())); connect(nextButton, SIGNAL(clicked()), this, SLOT(nextButtonClicked())); connect(finishButton, SIGNAL(clicked()), this, SLOT(accept())); buttonLayout = new QHBoxLayout; buttonLayout->addStretch(1); buttonLayout->addWidget(cancelButton); buttonLayout->addWidget(backButton); buttonLayout->addWidget(nextButton); buttonLayout->addWidget(finishButton); mainLayout = new QVBoxLayout; mainLayout->addLayout(buttonLayout); setLayout(mainLayout); } void SimpleWizard::setButtonEnabled(bool enable) { if (history.size() == numPages) finishButton->setEnabled(enable); else nextButton->setEnabled(enable); } void SimpleWizard::setNumPages(int n) { numPages = n; history.append(createPage(0)); switchPage(0); } void SimpleWizard::backButtonClicked() { nextButton->setEnabled(true); finishButton->setEnabled(true); PageBase *oldPage = history.takeLast(); switchPage(oldPage); delete oldPage; } void SimpleWizard::nextButtonClicked() { PageBase *oldPage = history.last(); if (!oldPage->postAction()) return; nextButton->setEnabled(true); finishButton->setEnabled(history.size() == numPages - 1); history.append(createPage(history.size())); switchPage(oldPage); } void SimpleWizard::switchPage(PageBase *oldPage) { if (oldPage) { oldPage->hide(); mainLayout->removeWidget(oldPage); } PageBase *newPage = history.last(); mainLayout->insertWidget(0, newPage); newPage->show(); newPage->setFocus(); backButton->setEnabled(history.size() != 1); if (history.size() == numPages) { nextButton->setEnabled(false); finishButton->setDefault(true); } else { nextButton->setDefault(true); finishButton->setEnabled(false); } setWindowTitle(tr("Simple Wizard - Step %1 of %2") .arg(history.size()) .arg(numPages)); } --- NEW FILE: simplewizard.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef SIMPLEWIZARD_H #define SIMPLEWIZARD_H #include <QDialog> #include <QList> class QHBoxLayout; class QPushButton; class QVBoxLayout; class PageBase; class SimpleWizard : public QDialog { Q_OBJECT public: SimpleWizard(QWidget *parent = 0); void setButtonEnabled(bool enable); protected: virtual PageBase *createPage(int index) = 0; void setNumPages(int n); private slots: void backButtonClicked(); void nextButtonClicked(); private: void switchPage(PageBase *oldPage); QList<PageBase *> history; int numPages; QPushButton *cancelButton; QPushButton *backButton; QPushButton *nextButton; QPushButton *finishButton; QHBoxLayout *buttonLayout; QVBoxLayout *mainLayout; }; #endif Index: installer.pro =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/installer.pro,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- installer.pro 22 Jan 2006 18:29:10 -0000 1.2 +++ installer.pro 22 Jan 2006 18:33:24 -0000 1.3 @@ -1,13 +1,20 @@ HEADERS += installer.h \ - package.h \ - packagelist.h + installwizard.h \ + simplewizard.h \ + shared/package.h \ + shared/packagelist.h SOURCES += installer.cpp \ - package.cpp \ - packagelist.cpp \ + installwizard.cpp \ + simplewizard.cpp \ + shared/package.cpp \ + shared/packagelist.cpp \ main.cpp +FORMS = page1.ui page2.ui page3.ui + QT += network CONFIG += +INCLUDEPATH = shared # install target.path = $$[QT_INSTALL_EXAMPLES]/network/http Index: main.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/main.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- main.cpp 22 Jan 2006 18:28:27 -0000 1.1 +++ main.cpp 22 Jan 2006 18:33:24 -0000 1.2 @@ -23,12 +23,11 @@ #include <QApplication> -#include "Installer.h" +#include "installwizard.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); - Installer httpWin; - httpWin.show(); - return httpWin.exec(); + InstallWizard wizard; + return wizard.exec(); } --- package.cpp DELETED --- --- package.h DELETED --- --- packagelist.cpp DELETED --- --- packagelist.h DELETED --- --- packages.h DELETED --- |
From: Ralf H. <hab...@us...> - 2006-01-22 18:32:13
|
Update of /cvsroot/kde-cygwin/tools/installer/shared In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3929/shared Log Message: Directory /cvsroot/kde-cygwin/tools/installer/shared added to the repository |
From: Ralf H. <hab...@us...> - 2006-01-22 18:29:18
|
Update of /cvsroot/kde-cygwin/tools/installer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2831/installer Modified Files: installer.cpp installer.h installer.pro packagelist.cpp packagelist.h packages.h Added Files: readme.txt Log Message: version 0.2 --- NEW FILE: readme.txt --- TODO - define blocking function for downloading - import unzip support - add package selection page Index: installer.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/installer.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- installer.cpp 22 Jan 2006 18:28:27 -0000 1.1 +++ installer.cpp 22 Jan 2006 18:29:10 -0000 1.2 @@ -30,16 +30,13 @@ #include <QtNetwork> #include <QStringListModel> -QString packageListURL = "http://sourceforge.net/project/showfiles.php?group_id=23617"; -QString packageListInputFile = "packages.html"; -QString packageListOutputFile = "packages.txt"; +QString packageInstallDir = "packages"; Installer::Installer(QWidget *parent) : QDialog(parent) { -/* - QComboBox *downloadMirror = new QComboBox(this); + downloadMirror = new QComboBox(this); downloadMirror->addItem("aleron (US)"); downloadMirror->addItem("belnet (BE)"); downloadMirror->addItem("easynews (US)"); @@ -56,27 +53,29 @@ downloadMirror->addItem("umn (US)"); downloadMirror->addItem("unc (US)"); downloadMirror->addItem("voxel (US)"); -*/ - urlLineEdit = new QLineEdit("http://sourceforge.net/project/showfiles.php?group_id=23617"); urlLabel = new QLabel(tr("&URL:")); - urlLabel->setBuddy(urlLineEdit); - statusLabel = new QLabel(tr("Please enter the URL of a file you want to " - "download.")); + urlLabel->setBuddy(downloadMirror); + statusLabel = new QLabel(tr("Initial message")); downloadPackageListButton = new QPushButton(tr("Download Package List")); downloadPackageListButton->setDefault(true); - quitButton = new QPushButton(tr("Quit")); - DownloadPackageButton = new QPushButton(tr("Download")); - installButton = new QPushButton(tr("Install")); parseButton = new QPushButton(tr("Parse")); - + installButton = new QPushButton(tr("Install")); + downloadPackageButton = new QPushButton(tr("Download")); + quitButton = new QPushButton(tr("Quit")); + + downloadMirror->setEnabled(false); + parseButton->setEnabled(false); + installButton->setEnabled(false); + downloadPackageButton->setEnabled(false); + progressDialog = new QProgressDialog(this); http = new QHttp(this); - connect(urlLineEdit, SIGNAL(textChanged(const QString &)), - this, SLOT(enableDownloadPackageButton())); +// connect(urlLineEdit, SIGNAL(textChanged(const QString &)), +// this, SLOT(enabledownloadPackageButton())); connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpRequestFinished(int, bool))); connect(http, SIGNAL(dataReadProgress(int, int)), @@ -85,21 +84,20 @@ this, SLOT(readResponseHeader(const QHttpResponseHeader &))); connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload())); connect(downloadPackageListButton, SIGNAL(clicked()), this, SLOT(downloadPackageList())); - connect(DownloadPackageButton, SIGNAL(clicked()), this, SLOT(downloadFiles())); connect(parseButton, SIGNAL(clicked()), this, SLOT(parsePackageList())); + connect(downloadPackageButton, SIGNAL(clicked()), this, SLOT(downloadFiles())); connect(installButton, SIGNAL(clicked()), this, SLOT(installFiles())); connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); QHBoxLayout *topLayout = new QHBoxLayout; topLayout->addWidget(urlLabel); - topLayout->addWidget(urlLineEdit); - // topLayout->addWidget(downloadMirror); + topLayout->addWidget(downloadMirror); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(1); buttonLayout->addWidget(downloadPackageListButton); buttonLayout->addWidget(parseButton); - buttonLayout->addWidget(DownloadPackageButton); + buttonLayout->addWidget(downloadPackageButton); buttonLayout->addWidget(installButton); buttonLayout->addWidget(quitButton); @@ -111,13 +109,101 @@ setLayout(mainLayout); setWindowTitle(tr("HTTP")); - urlLineEdit->setFocus(); + downloadMirror->setFocus(); } void Installer::downloadPackageList() { - QUrl url(packageListURL); - QString fileName = packageListInputFile; + QUrl url(PackageList::URL); + QString fileName = PackageList::InputFile; + + if (QFile::exists(fileName)) { + QMessageBox::information(this, tr("HTTP"), + tr("There already exists a file called %1 in " + "the current directory. Remove to fore download.") + .arg(fileName)); + parseButton->setEnabled(true); + statusLabel->setText(tr("Now press Parse to generate a package list.")); + return; + } + + file = new QFile(fileName); + if (!file->open(QIODevice::WriteOnly)) { + QMessageBox::information(this, tr("HTTP"), + tr("Unable to save the file %1: %2.") + .arg(fileName).arg(file->errorString())); + delete file; + file = 0; + return; + } + + http->setHost(url.host(), url.port() != -1 ? url.port() : 80); + if (!url.userName().isEmpty()) + http->setUser(url.userName(), url.password()); + + httpRequestAborted = false; + QByteArray query = url.encodedQuery(); + httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); + + progressDialog->setWindowTitle(tr("HTTP")); + progressDialog->setLabelText(tr("Downloading %1.").arg(fileName)); + + parseButton->setEnabled(true); + statusLabel->setText(tr("Now press Parse to generate a package list.")); +} + + +void Installer::parsePackageList() +{ + parseButton->setEnabled(false); + QString fileName = PackageList::InputFile; + if (!PackageList::readFromHTMLFile(fileName)) { + QMessageBox::information(this, tr("HTTP"), + tr("could not open: %1") + .arg(fileName) ); + parseButton->setEnabled(true); + return; + } + parseButton->setEnabled(true); + downloadPackageButton->setEnabled(true); + downloadMirror->setEnabled(true); + statusLabel->setText(tr("Now edit packages.txt to select the packages for download.")); +} + +void Installer::downloadFiles() +{ + if (!PackageList::readFromFile(PackageList::OutputFile)) { + QMessageBox::information(this, tr("HTTP"), + tr("could not open: %1") + .arg(PackageList::OutputFile) ); + return; + } + QStringList list = PackageList::getPackageFiles("*"); + qDebug() << list.join("\n"); + for (int i = 0; i < list.size(); ++i) + downloadSingleFile(list.at(i)); + + installButton->setEnabled(true); + statusLabel->setText(tr("Now press Install to install your selected packages.")); +} + +void Installer::installFiles() +{ + Package pkg = PackageList::getPackage("unzip"); + pkg.install(pkg.binFileName(),packageInstallDir); +} + +void Installer::downloadSingleFile(QString _url) +{ + qWarning("downloading " + _url.toLatin1()); + QUrl url(_url); + QMessageBox::information(this, tr("HTTP"), + tr("%1 " + ".") + .arg(url.toString())); + + QFileInfo fileInfo(url.path()); + QString fileName = fileInfo.fileName(); if (QFile::exists(fileName)) { QMessageBox::information(this, tr("HTTP"), @@ -144,18 +230,15 @@ httpRequestAborted = false; QByteArray query = url.encodedQuery(); httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); - - progressDialog->setWindowTitle(tr("HTTP")); - progressDialog->setLabelText(tr("Downloading %1.").arg(fileName)); - DownloadPackageButton->setEnabled(false); } + void Installer::cancelDownload() { statusLabel->setText(tr("Download canceled.")); httpRequestAborted = true; http->abort(); - DownloadPackageButton->setEnabled(true); +// downloadPackageButton->setEnabled(true); } void Installer::httpRequestFinished(int requestId, bool error) @@ -184,11 +267,11 @@ tr("Download failed: %1.") .arg(http->errorString())); } else { - QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName(); - statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName)); +// QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName(); +// statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName)); } - DownloadPackageButton->setEnabled(true); + downloadPackageButton->setEnabled(true); delete file; file = 0; } @@ -215,89 +298,7 @@ progressDialog->setValue(bytesRead); } -void Installer::enableDownloadPackageButton() +void Installer::enabledownloadPackageButton() { - DownloadPackageButton->setEnabled(!urlLineEdit->text().isEmpty()); -} - -void Installer::parsePackageList() -{ - parseButton->setEnabled(false); - QString fileName = packageListInputFile; - - QFile pkglist(fileName); - if (!pkglist.exists()) { - QMessageBox::information(this, tr("HTTP"), - tr("could not open: %1") - .arg(fileName) ); - parseButton->setEnabled(true); - return; - } - - pkglist.open(QIODevice::ReadOnly); - Package pkg; - - while (!pkglist.atEnd()) { - QByteArray line = pkglist.readLine(); - Package::parsePackageListLine(line); - } - PackageList::listPackages(); - PackageList::writeToFile("packages.txt"); - - parseButton->setEnabled(true); -} - - -void Installer::downloadFiles() -{ - QStringList list = PackageList::getPackageFiles("unzip"); - for (int i = 0; i < list.size(); ++i) - downloadSingleFile(list.at(i)); -} - - -void Installer::installFiles() -{ - Package pkg = PackageList::getPackage("unzip"); - pkg.install(pkg.binFileName(),"test"); -} - - -void Installer::downloadSingleFile(QString _url) -{ - qWarning("downloading " + _url.toLatin1()); - QUrl url(_url); - QMessageBox::information(this, tr("HTTP"), - tr("%1 " - ".") - .arg(url.toString())); - - QFileInfo fileInfo(url.path()); - QString fileName = fileInfo.fileName(); - - if (QFile::exists(fileName)) { - QMessageBox::information(this, tr("HTTP"), - tr("There already exists a file called %1 in " - "the current directory.") - .arg(fileName)); - return; - } - - file = new QFile(fileName); - if (!file->open(QIODevice::WriteOnly)) { - QMessageBox::information(this, tr("HTTP"), - tr("Unable to save the file %1: %2.") - .arg(fileName).arg(file->errorString())); - delete file; - file = 0; - return; - } - - http->setHost(url.host(), url.port() != -1 ? url.port() : 80); - if (!url.userName().isEmpty()) - http->setUser(url.userName(), url.password()); - - httpRequestAborted = false; - QByteArray query = url.encodedQuery(); - httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); +// downloadPackageButton->setEnabled(!urlLineEdit->text().isEmpty()); } Index: installer.h =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/installer.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- installer.h 22 Jan 2006 18:28:27 -0000 1.1 +++ installer.h 22 Jan 2006 18:29:10 -0000 1.2 @@ -34,7 +34,9 @@ class QProgressDialog; class QPushButton; class QListView; +class QComboBox; class QAbstractItemModel; + class Installer : public QDialog { Q_OBJECT @@ -54,16 +56,16 @@ void httpRequestFinished(int requestId, bool error); void readResponseHeader(const QHttpResponseHeader &responseHeader); void updateDataReadProgress(int bytesRead, int totalBytes); - void enableDownloadPackageButton(); + void enabledownloadPackageButton(); private: QLabel *statusLabel; QLabel *urlLabel; - QLineEdit *urlLineEdit; + QComboBox *downloadMirror; QProgressDialog *progressDialog; QPushButton *quitButton; QPushButton *downloadPackageListButton; - QPushButton *DownloadPackageButton; + QPushButton *downloadPackageButton; QPushButton *parseButton; QPushButton *installButton; Index: installer.pro =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/installer.pro,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- installer.pro 22 Jan 2006 18:28:27 -0000 1.1 +++ installer.pro 22 Jan 2006 18:29:10 -0000 1.2 @@ -6,7 +6,8 @@ package.cpp \ packagelist.cpp \ main.cpp -QT += network +QT += network +CONFIG += # install target.path = $$[QT_INSTALL_EXAMPLES]/network/http Index: packagelist.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/packagelist.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- packagelist.cpp 22 Jan 2006 18:28:27 -0000 1.1 +++ packagelist.cpp 22 Jan 2006 18:29:10 -0000 1.2 @@ -26,6 +26,10 @@ #include "packagelist.h" +QString PackageList::InputFile = "packages.html"; +QString PackageList::OutputFile = "packages.txt"; +QString PackageList::URL = "http://sourceforge.net/project/showfiles.php?group_id=23617"; + QList<Package> PackageList::packageList; void PackageList::addPackage(Package const &package) @@ -54,12 +58,52 @@ return true; } +bool PackageList::readFromFile(QString const &fileName) +{ + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly| QIODevice::Text)) + return false; + + packageList.clear(); + + Package pkg; + while (!file.atEnd()) { + QByteArray line = file.readLine(); + if (line.startsWith("#")) + continue; + int i = line.indexOf("-"); + pkg.setName(line.left(i)); + pkg.setVersion(line.mid(i+1,line.size()-i-2)); + PackageList::addPackage(pkg); + } + PackageList::listPackages(); + return true; +} + +bool PackageList::readFromHTMLFile(const QString &fileName) +{ + QFile pkglist(fileName); + if (!pkglist.exists()) + return false; + + pkglist.open(QIODevice::ReadOnly); + Package pkg; + + while (!pkglist.atEnd()) { + QByteArray line = pkglist.readLine(); + Package::parsePackageListLine(line); + } + PackageList::listPackages(); + PackageList::writeToFile(PackageList::OutputFile); + return true; +} + QStringList PackageList::getPackageFiles(QString const &pkgName) { QList<Package>::iterator i; QStringList list; for (i = packageList.begin(); i != packageList.end(); ++i) { - if (i->Name() == pkgName) { + if (pkgName == "*" || i->Name() == pkgName) { list << i->binURL(); list << i->libURL(); list << i->docURL(); Index: packagelist.h =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/packagelist.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- packagelist.h 22 Jan 2006 18:28:27 -0000 1.1 +++ packagelist.h 22 Jan 2006 18:29:10 -0000 1.2 @@ -31,11 +31,14 @@ static void addPackage(Package const &package); static void listPackages(void); static bool writeToFile(QString const &fileName); + static bool readFromFile(QString const &fileName); + static bool readFromHTMLFile(const QString &fileName); // static bool downloadPackage(QString const &pkgName); static QStringList getPackageFiles(QString const &pkgName); static Package getPackage(QString const &pkgName); - - + static QString InputFile; + static QString OutputFile; + static QString URL; private: static QList<Package> packageList; Index: packages.h =================================================================== RCS file: /cvsroot/kde-cygwin/tools/installer/packages.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- packages.h 22 Jan 2006 18:28:27 -0000 1.1 +++ packages.h 22 Jan 2006 18:29:10 -0000 1.2 @@ -119,8 +119,8 @@ "download.")); quitButton = new QPushButton(tr("Quit")); - DownloadPackageButton = new QPushButton(tr("Download")); - DownloadPackageButton->setDefault(true); + downloadPackageButton = new QPushButton(tr("Download")); + downloadPackageButton->setDefault(true); parseButton = new QPushButton(tr("Parse")); QListView *parseOutput = new QListView(this); @@ -130,7 +130,7 @@ http = new QHttp(this); connect(urlLineEdit, SIGNAL(textChanged(const QString &)), - this, SLOT(enableDownloadPackageButton())); + this, SLOT(enabledownloadPackageButton())); connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpRequestFinished(int, bool))); connect(http, SIGNAL(dataReadProgress(int, int)), @@ -138,7 +138,7 @@ connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(readResponseHeader(const QHttpResponseHeader &))); connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload())); - connect(DownloadPackageButton, SIGNAL(clicked()), this, SLOT(downloadFile())); + connect(downloadPackageButton, SIGNAL(clicked()), this, SLOT(downloadFile())); connect(parseButton, SIGNAL(clicked()), this, SLOT(parseFile())); connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); @@ -149,7 +149,7 @@ QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(1); - buttonLayout->addWidget(DownloadPackageButton); + buttonLayout->addWidget(downloadPackageButton); buttonLayout->addWidget(parseButton); buttonLayout->addWidget(quitButton); @@ -207,7 +207,7 @@ progressDialog->setWindowTitle(tr("HTTP")); progressDialog->setLabelText(tr("Downloading %1.").arg(fileName)); - DownloadPackageButton->setEnabled(false); + downloadPackageButton->setEnabled(false); } void Installer::cancelDownload() @@ -215,7 +215,7 @@ statusLabel->setText(tr("Download canceled.")); httpRequestAborted = true; http->abort(); - DownloadPackageButton->setEnabled(true); + downloadPackageButton->setEnabled(true); } void Installer::httpRequestFinished(int requestId, bool error) @@ -248,7 +248,7 @@ statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName)); } - DownloadPackageButton->setEnabled(true); + downloadPackageButton->setEnabled(true); delete file; file = 0; } @@ -275,9 +275,9 @@ progressDialog->setValue(bytesRead); } -void Installer::enableDownloadPackageButton() +void Installer::enabledownloadPackageButton() { - DownloadPackageButton->setEnabled(!urlLineEdit->text().isEmpty()); + downloadPackageButton->setEnabled(!urlLineEdit->text().isEmpty()); } |
Update of /cvsroot/kde-cygwin/tools/installer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2517/installer Added Files: installer.cpp installer.h installer.pro main.cpp package.cpp package.h packagelist.cpp packagelist.h packages.h Log Message: version 0.1 --- NEW FILE: installer.cpp --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include "installer.h" #include "package.h" #include "packagelist.h" #include <QtCore> #include <QtGui> #include <QtNetwork> #include <QStringListModel> QString packageListURL = "http://sourceforge.net/project/showfiles.php?group_id=23617"; QString packageListInputFile = "packages.html"; QString packageListOutputFile = "packages.txt"; Installer::Installer(QWidget *parent) : QDialog(parent) { /* QComboBox *downloadMirror = new QComboBox(this); downloadMirror->addItem("aleron (US)"); downloadMirror->addItem("belnet (BE)"); downloadMirror->addItem("easynews (US)"); downloadMirror->addItem("heanet (IE)"); downloadMirror->addItem("internap (US)"); downloadMirror->addItem("jaist (JP)"); downloadMirror->addItem("keihanna (JP)"); downloadMirror->addItem("kent (UK)"); downloadMirror->addItem("mesh (DE)"); downloadMirror->addItem("optusnet (AU)"); downloadMirror->addItem("ovh (FR)"); downloadMirror->addItem("puzzle (CH)"); downloadMirror->addItem("switch (CH)"); downloadMirror->addItem("umn (US)"); downloadMirror->addItem("unc (US)"); downloadMirror->addItem("voxel (US)"); */ urlLineEdit = new QLineEdit("http://sourceforge.net/project/showfiles.php?group_id=23617"); urlLabel = new QLabel(tr("&URL:")); urlLabel->setBuddy(urlLineEdit); statusLabel = new QLabel(tr("Please enter the URL of a file you want to " "download.")); downloadPackageListButton = new QPushButton(tr("Download Package List")); downloadPackageListButton->setDefault(true); quitButton = new QPushButton(tr("Quit")); DownloadPackageButton = new QPushButton(tr("Download")); installButton = new QPushButton(tr("Install")); parseButton = new QPushButton(tr("Parse")); progressDialog = new QProgressDialog(this); http = new QHttp(this); connect(urlLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableDownloadPackageButton())); connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpRequestFinished(int, bool))); connect(http, SIGNAL(dataReadProgress(int, int)), this, SLOT(updateDataReadProgress(int, int))); connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(readResponseHeader(const QHttpResponseHeader &))); connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload())); connect(downloadPackageListButton, SIGNAL(clicked()), this, SLOT(downloadPackageList())); connect(DownloadPackageButton, SIGNAL(clicked()), this, SLOT(downloadFiles())); connect(parseButton, SIGNAL(clicked()), this, SLOT(parsePackageList())); connect(installButton, SIGNAL(clicked()), this, SLOT(installFiles())); connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); QHBoxLayout *topLayout = new QHBoxLayout; topLayout->addWidget(urlLabel); topLayout->addWidget(urlLineEdit); // topLayout->addWidget(downloadMirror); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(1); buttonLayout->addWidget(downloadPackageListButton); buttonLayout->addWidget(parseButton); buttonLayout->addWidget(DownloadPackageButton); buttonLayout->addWidget(installButton); buttonLayout->addWidget(quitButton); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(topLayout); mainLayout->addWidget(statusLabel); mainLayout->addLayout(buttonLayout); // mainLayout->addWidget(parseOutput); setLayout(mainLayout); setWindowTitle(tr("HTTP")); urlLineEdit->setFocus(); } void Installer::downloadPackageList() { QUrl url(packageListURL); QString fileName = packageListInputFile; if (QFile::exists(fileName)) { QMessageBox::information(this, tr("HTTP"), tr("There already exists a file called %1 in " "the current directory.") .arg(fileName)); return; } file = new QFile(fileName); if (!file->open(QIODevice::WriteOnly)) { QMessageBox::information(this, tr("HTTP"), tr("Unable to save the file %1: %2.") .arg(fileName).arg(file->errorString())); delete file; file = 0; return; } http->setHost(url.host(), url.port() != -1 ? url.port() : 80); if (!url.userName().isEmpty()) http->setUser(url.userName(), url.password()); httpRequestAborted = false; QByteArray query = url.encodedQuery(); httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); progressDialog->setWindowTitle(tr("HTTP")); progressDialog->setLabelText(tr("Downloading %1.").arg(fileName)); DownloadPackageButton->setEnabled(false); } void Installer::cancelDownload() { statusLabel->setText(tr("Download canceled.")); httpRequestAborted = true; http->abort(); DownloadPackageButton->setEnabled(true); } void Installer::httpRequestFinished(int requestId, bool error) { if (httpRequestAborted) { if (file) { file->close(); file->remove(); delete file; file = 0; } progressDialog->hide(); return; } if (requestId != httpGetId) return; progressDialog->hide(); file->close(); if (error) { file->remove(); QMessageBox::information(this, tr("HTTP"), tr("Download failed: %1.") .arg(http->errorString())); } else { QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName(); statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName)); } DownloadPackageButton->setEnabled(true); delete file; file = 0; } void Installer::readResponseHeader(const QHttpResponseHeader &responseHeader) { if (responseHeader.statusCode() != 200) { QMessageBox::information(this, tr("HTTP"), tr("Download failed: %1.") .arg(responseHeader.reasonPhrase())); httpRequestAborted = true; progressDialog->hide(); http->abort(); return; } } void Installer::updateDataReadProgress(int bytesRead, int totalBytes) { if (httpRequestAborted) return; progressDialog->setMaximum(totalBytes); progressDialog->setValue(bytesRead); } void Installer::enableDownloadPackageButton() { DownloadPackageButton->setEnabled(!urlLineEdit->text().isEmpty()); } void Installer::parsePackageList() { parseButton->setEnabled(false); QString fileName = packageListInputFile; QFile pkglist(fileName); if (!pkglist.exists()) { QMessageBox::information(this, tr("HTTP"), tr("could not open: %1") .arg(fileName) ); parseButton->setEnabled(true); return; } pkglist.open(QIODevice::ReadOnly); Package pkg; while (!pkglist.atEnd()) { QByteArray line = pkglist.readLine(); Package::parsePackageListLine(line); } PackageList::listPackages(); PackageList::writeToFile("packages.txt"); parseButton->setEnabled(true); } void Installer::downloadFiles() { QStringList list = PackageList::getPackageFiles("unzip"); for (int i = 0; i < list.size(); ++i) downloadSingleFile(list.at(i)); } void Installer::installFiles() { Package pkg = PackageList::getPackage("unzip"); pkg.install(pkg.binFileName(),"test"); } void Installer::downloadSingleFile(QString _url) { qWarning("downloading " + _url.toLatin1()); QUrl url(_url); QMessageBox::information(this, tr("HTTP"), tr("%1 " ".") .arg(url.toString())); QFileInfo fileInfo(url.path()); QString fileName = fileInfo.fileName(); if (QFile::exists(fileName)) { QMessageBox::information(this, tr("HTTP"), tr("There already exists a file called %1 in " "the current directory.") .arg(fileName)); return; } file = new QFile(fileName); if (!file->open(QIODevice::WriteOnly)) { QMessageBox::information(this, tr("HTTP"), tr("Unable to save the file %1: %2.") .arg(fileName).arg(file->errorString())); delete file; file = 0; return; } http->setHost(url.host(), url.port() != -1 ? url.port() : 80); if (!url.userName().isEmpty()) http->setUser(url.userName(), url.password()); httpRequestAborted = false; QByteArray query = url.encodedQuery(); httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); } --- NEW FILE: installer.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef INSTALLER_H #define INSTALLER_H #include <QDialog> class QFile; class QHttp; class QHttpResponseHeader; class QLabel; class QLineEdit; class QProgressDialog; class QPushButton; class QListView; class QAbstractItemModel; class Installer : public QDialog { Q_OBJECT public: Installer(QWidget *parent = 0); void downloadSingleFile(QString url); private slots: void downloadPackageList(); void parsePackageList(); void downloadFiles(); void installFiles(); void cancelDownload(); void httpRequestFinished(int requestId, bool error); void readResponseHeader(const QHttpResponseHeader &responseHeader); void updateDataReadProgress(int bytesRead, int totalBytes); void enableDownloadPackageButton(); private: QLabel *statusLabel; QLabel *urlLabel; QLineEdit *urlLineEdit; QProgressDialog *progressDialog; QPushButton *quitButton; QPushButton *downloadPackageListButton; QPushButton *DownloadPackageButton; QPushButton *parseButton; QPushButton *installButton; QHttp *http; QFile *file; int httpGetId; bool httpRequestAborted; }; #endif --- NEW FILE: installer.pro --- HEADERS += installer.h \ package.h \ packagelist.h SOURCES += installer.cpp \ package.cpp \ packagelist.cpp \ main.cpp QT += network # install target.path = $$[QT_INSTALL_EXAMPLES]/network/http sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS http.pro sources.path = $$[QT_INSTALL_EXAMPLES]/network/http INSTALLS += target sources --- NEW FILE: main.cpp --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QApplication> #include "Installer.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Installer httpWin; httpWin.show(); return httpWin.exec(); } --- NEW FILE: package.cpp --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include "package.h" #include "packagelist.h" #include <QtGui> #include <QtNetwork> QString Package::baseURL = "http://mesh.dl.sourceforge.net/sourceforge/gnuwin32/"; void Package::parsePackageListLine(const QByteArray &line) { static Package pkg; if (line.contains("<td><a href=\"/project/showfiles.php?group_id=23617")) { int a = line.indexOf("\">") + 2; int b = line.indexOf("</a>"); QByteArray value = line.mid(a,b-a); if (line.indexOf("release_id") > -1) { pkg.setVersion(value); PackageList::addPackage(pkg); } else pkg.setName(value); } } void Package::install(const QString &fileName,const QString &destdir) { QString cmd = "unzip -o"; if (destdir != "") cmd += " -d " + destdir; cmd += " " + fileName; qDebug() << cmd; QProcess unzip; unzip.setReadChannelMode(QProcess::MergedChannels); unzip.start(cmd); if (!unzip.waitForFinished()) qDebug() << "unzip failed:" << unzip.errorString(); else qDebug() << "unzip output:" << unzip.readAll(); } void Package::logOutput() { } --- NEW FILE: package.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef PACKAGE_H #define PACKAGE_H #include <QtGui> #include <QtNetwork> class Package { public: Package() {} Package(QString const &_name, QString const &_version) { name = _name; version = _version; } void setName(QString const &_name) { name = _name; } QString &Name() { return name; } void setVersion(QString const &_version) { version = _version; } static void parsePackageListLine(const QByteArray &line); QString toString() { return name + "-" + version; } const QString binURL() { return baseURL + name + "-" + version + "-bin.zip"; } const QString libURL() { return baseURL + name + "-" + version + "-lib.zip"; } const QString docURL() { return baseURL + name + "-" + version + "-doc.zip"; } const QString srcURL() { return baseURL + name + "-" + version + "-src.zip"; } const QString binFileName() { return name + "-" + version + "-bin.zip"; } const QString libFileName() { return name + "-" + version + "-lib.zip"; } const QString docFileName() { return name + "-" + version + "-doc.zip"; } const QString srcFileName() { return name + "-" + version + "-src.zip"; } static QString baseURL; void install(const QString &fileName,const QString &destdir=0); private slots: void logOutput(); private: QString name; QString version; }; #endif --- NEW FILE: packagelist.cpp --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QtGui> #include <QtNetwork> #include "packagelist.h" QList<Package> PackageList::packageList; void PackageList::addPackage(Package const &package) { packageList.append(package); } void PackageList::listPackages(void) { QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) qWarning(i->toString().toLatin1()); } bool PackageList::writeToFile(QString const &fileName) { QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; QTextStream out(&file); out << "# package list" << "\n"; QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) out << i->toString().toLatin1() << "\n"; return true; } QStringList PackageList::getPackageFiles(QString const &pkgName) { QList<Package>::iterator i; QStringList list; for (i = packageList.begin(); i != packageList.end(); ++i) { if (i->Name() == pkgName) { list << i->binURL(); list << i->libURL(); list << i->docURL(); list << i->srcURL(); } } return list; } Package PackageList::getPackage(QString const &pkgName) { QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) if (i->Name() == pkgName) return *i; return Package(); } --- NEW FILE: packagelist.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef PACKAGELIST_H #define PACKAGELIST_H #include "package.h" class PackageList { public: static void addPackage(Package const &package); static void listPackages(void); static bool writeToFile(QString const &fileName); // static bool downloadPackage(QString const &pkgName); static QStringList getPackageFiles(QString const &pkgName); static Package getPackage(QString const &pkgName); private: static QList<Package> packageList; }; #endif --- NEW FILE: packages.h --- /**************************************************************************** ** ** Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sa...@tr.... ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include <QtGui> #include <QtNetwork> #include <QStringListModel> #include "Installer.h" class Package { public: Package() {} Package(QString const &_name, QString const &_version) { name = _name; version = _version; } void setName(QString const &_name) { name = _name; } void setVersion(QString const &_version) { version = _version; } QString toString() { return name + "-" + version; } const QString binURL() { return baseURL + name + "-" + version + "-bin.zip"; } const QString libURL() { return baseURL + name + "-" + version + "-lib.zip"; } const QString docURL() { return baseURL + name + "-" + version + "-doc.zip"; } const QString srcURL() { return baseURL + name + "-" + version + "-src.zip"; } static QString baseURL; private: QString name; QString version; }; QString Package::baseURL = "http://mesh.dl.sourceforge.net/sourceforge/gnuwin32/"; QList<Package> packageList; class PackageList { public: static void addPackage(Package const &package); static void listPackages(void); static bool writeToFile(QString const &fileName); private: // QList<Package> packageList; }; void PackageList::addPackage(Package const &package) { packageList << package; } void PackageList::listPackages(void) { QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) qWarning(i->toString().toLatin1()); } bool PackageList::writeToFile(QString const &fileName) { QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; QTextStream out(&file); out << "# package list" << "\n"; QList<Package>::iterator i; for (i = packageList.begin(); i != packageList.end(); ++i) out << i->toString().toLatin1() << "\n"; return true; } Installer::Installer(QWidget *parent) : QDialog(parent) { /* QListWidget *downloadMirror = new QListWidget(this); downloadMirror->addItem("aleron (US)"); downloadMirror->addItem("belnet (BE)"); downloadMirror->addItem("easynews (US)"); downloadMirror->addItem("heanet (IE)"); downloadMirror->addItem("internap (US)"); downloadMirror->addItem("jaist (JP)"); downloadMirror->addItem("keihanna (JP)"); downloadMirror->addItem("kent (UK)"); downloadMirror->addItem("mesh (DE)"); downloadMirror->addItem("optusnet (AU)"); downloadMirror->addItem("ovh (FR)"); downloadMirror->addItem("puzzle (CH)"); downloadMirror->addItem("switch (CH)"); downloadMirror->addItem("umn (US)"); downloadMirror->addItem("unc (US)"); downloadMirror->addItem("voxel (US)"); */ urlLineEdit = new QLineEdit("http://sourceforge.net/project/showfiles.php?group_id=23617"); urlLabel = new QLabel(tr("&URL:")); urlLabel->setBuddy(urlLineEdit); statusLabel = new QLabel(tr("Please enter the URL of a file you want to " "download.")); quitButton = new QPushButton(tr("Quit")); DownloadPackageButton = new QPushButton(tr("Download")); DownloadPackageButton->setDefault(true); parseButton = new QPushButton(tr("Parse")); QListView *parseOutput = new QListView(this); progressDialog = new QProgressDialog(this); http = new QHttp(this); connect(urlLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableDownloadPackageButton())); connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(httpRequestFinished(int, bool))); connect(http, SIGNAL(dataReadProgress(int, int)), this, SLOT(updateDataReadProgress(int, int))); connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(readResponseHeader(const QHttpResponseHeader &))); connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload())); connect(DownloadPackageButton, SIGNAL(clicked()), this, SLOT(downloadFile())); connect(parseButton, SIGNAL(clicked()), this, SLOT(parseFile())); connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); QHBoxLayout *topLayout = new QHBoxLayout; topLayout->addWidget(urlLabel); topLayout->addWidget(urlLineEdit); // topLayout->addWidget(downloadMirror); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(1); buttonLayout->addWidget(DownloadPackageButton); buttonLayout->addWidget(parseButton); buttonLayout->addWidget(quitButton); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(topLayout); mainLayout->addWidget(statusLabel); mainLayout->addLayout(buttonLayout); mainLayout->addWidget(parseOutput); setLayout(mainLayout); setWindowTitle(tr("HTTP")); urlLineEdit->setFocus(); } void Installer::_downloadFile() { QUrl url(urlLineEdit->text()); // QString a = "http://" + downloadMirror->currentItem()->text() + ".dl.sourceforge.net/sourceforge/gnuwin32/" ; //QMessageBox::information(this, tr("HTTP"),"http://" + downloadMirror->currentItem()->text() + ".dl.sourceforge.net/sourceforge/gnuwin32/" ); // QUrl url("http://" + downloadMirror->currentItem()->text() + ".dl.sourceforge.net/sourceforge/gnuwin32/"); QMessageBox::information(this, tr("HTTP"), tr("%1 " ".") .arg(url.toString())); QFileInfo fileInfo(url.path()); QString fileName = fileInfo.fileName(); if (QFile::exists(fileName)) { QMessageBox::information(this, tr("HTTP"), tr("There already exists a file called %1 in " "the current directory.") .arg(fileName)); return; } file = new QFile(fileName); if (!file->open(QIODevice::WriteOnly)) { QMessageBox::information(this, tr("HTTP"), tr("Unable to save the file %1: %2.") .arg(fileName).arg(file->errorString())); delete file; file = 0; return; } http->setHost(url.host(), url.port() != -1 ? url.port() : 80); if (!url.userName().isEmpty()) http->setUser(url.userName(), url.password()); httpRequestAborted = false; QByteArray query = url.encodedQuery(); httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); progressDialog->setWindowTitle(tr("HTTP")); progressDialog->setLabelText(tr("Downloading %1.").arg(fileName)); DownloadPackageButton->setEnabled(false); } void Installer::cancelDownload() { statusLabel->setText(tr("Download canceled.")); httpRequestAborted = true; http->abort(); DownloadPackageButton->setEnabled(true); } void Installer::httpRequestFinished(int requestId, bool error) { if (httpRequestAborted) { if (file) { file->close(); file->remove(); delete file; file = 0; } progressDialog->hide(); return; } if (requestId != httpGetId) return; progressDialog->hide(); file->close(); if (error) { file->remove(); QMessageBox::information(this, tr("HTTP"), tr("Download failed: %1.") .arg(http->errorString())); } else { QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName(); statusLabel->setText(tr("Downloaded %1 to current directory.").arg(fileName)); } DownloadPackageButton->setEnabled(true); delete file; file = 0; } void Installer::readResponseHeader(const QHttpResponseHeader &responseHeader) { if (responseHeader.statusCode() != 200) { QMessageBox::information(this, tr("HTTP"), tr("Download failed: %1.") .arg(responseHeader.reasonPhrase())); httpRequestAborted = true; progressDialog->hide(); http->abort(); return; } } void Installer::updateDataReadProgress(int bytesRead, int totalBytes) { if (httpRequestAborted) return; progressDialog->setMaximum(totalBytes); progressDialog->setValue(bytesRead); } void Installer::enableDownloadPackageButton() { DownloadPackageButton->setEnabled(!urlLineEdit->text().isEmpty()); } void Installer::parseFile() { parseButton->setEnabled(false); // numbers << "test"; // model = new QStringListModel(numbers); // parseOutput->setModel(model); QString fileName = QFileInfo(QUrl(urlLineEdit->text()).path()).fileName(); QMessageBox::information(this, tr("HTTP"), tr("try to open: %1.") .arg(fileName) ); QFile file(fileName); if (!file.exists()) { QMessageBox::information(this, tr("HTTP"), tr("could not open: %1.") .arg(fileName) ); return; } file.open(QIODevice::ReadOnly); Package pkg; while (!file.atEnd()) { QByteArray line = file.readLine(); // parseOutput->addItem(line.data()); if (line.contains("<td><a href=\"/project/showfiles.php?group_id=23617")) { int a = line.indexOf("\">") + 2; int b = line.indexOf("</a>"); QByteArray value = line.mid(a,b-a); if (line.indexOf("release_id") > -1) { pkg.setVersion(value); PackageList::addPackage(pkg); } else pkg.setName(value); } } PackageList::listPackages(); // QList<Package>::iterator i; // for (i = packageList.begin(); i != packageList.end(); ++i) // qWarning(i->toString().toLatin1()); PackageList::writeToFile("packages.txt"); parseButton->setEnabled(true); } void Installer::downloadFile() { QList<Package>::iterator i; i = packageList.begin(); downloadSingleFile(i->binURL()); downloadSingleFile(i->libURL()); downloadSingleFile(i->docURL()); downloadSingleFile(i->srcURL()); } void Installer::downloadSingleFile(QString _url) { QUrl url(_url); QMessageBox::information(this, tr("HTTP"), tr("%1 " ".") .arg(url.toString())); QFileInfo fileInfo(url.path()); QString fileName = fileInfo.fileName(); if (QFile::exists(fileName)) { QMessageBox::information(this, tr("HTTP"), tr("There already exists a file called %1 in " "the current directory.") .arg(fileName)); return; } file = new QFile(fileName); if (!file->open(QIODevice::WriteOnly)) { QMessageBox::information(this, tr("HTTP"), tr("Unable to save the file %1: %2.") .arg(fileName).arg(file->errorString())); delete file; file = 0; return; } http->setHost(url.host(), url.port() != -1 ? url.port() : 80); if (!url.userName().isEmpty()) http->setUser(url.userName(), url.password()); httpRequestAborted = false; QByteArray query = url.encodedQuery(); httpGetId = http->get(url.path() + (!query.isEmpty() ? "?" + url.encodedQuery() : ""), file); } |
From: Ralf H. <hab...@us...> - 2006-01-22 18:27:58
|
Update of /cvsroot/kde-cygwin/tools/installer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2265/installer Log Message: Directory /cvsroot/kde-cygwin/tools/installer added to the repository |
From: Ralf H. <hab...@us...> - 2006-01-22 18:23:55
|
Update of /cvsroot/kde-cygwin/tools/lnk2desktop In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv662/lnk2desktop Modified Files: readme.txt Log Message: added qt dependency note Index: readme.txt =================================================================== RCS file: /cvsroot/kde-cygwin/tools/lnk2desktop/readme.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- readme.txt 11 Jun 2005 13:43:05 -0000 1.1 +++ readme.txt 22 Jan 2006 18:23:46 -0000 1.2 @@ -12,6 +12,7 @@ REQUIREMENTS ============ - tested under cygwin, will probably work with minor efforts under native windows +- requires QT 3 release TODO ==== |
From: Christian E. <che...@us...> - 2005-10-30 16:25:38
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25133/src/kernel Modified Files: Tag: QT_WIN32_3_3_BRANCH qfontengine_win.cpp Log Message: fixed using wrong device context on textmetric calculation Index: qfontengine_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfontengine_win.cpp,v retrieving revision 1.1.2.37 retrieving revision 1.1.2.38 diff -u -r1.1.2.37 -r1.1.2.38 --- qfontengine_win.cpp 27 Oct 2005 18:44:24 -0000 1.1.2.37 +++ qfontengine_win.cpp 30 Oct 2005 16:25:30 -0000 1.1.2.38 @@ -105,7 +105,7 @@ QFontEngine::~QFontEngine() { // make sure we aren't by accident still selected - SelectObject(shared_dc, systemFont()); + SelectObject(hdc, systemFont()); if (cmap) delete [] cmap; } @@ -393,24 +393,24 @@ // Win font engine // ------------------------------------------------------------------ -QFontEngineWin::QFontEngineWin( const char *nameIn, HDC hdcIn, HFONT hfIn, bool bIn, LOGFONT lfIn ) +QFontEngineWin::QFontEngineWin( const char *nameIn, HDC hdcIn, HFONT hfIn, bool bStockFont, LOGFONT lfIn ) { _name = nameIn; hfont = hfIn; - hdc = CreateCompatibleDC(hdcIn ? hdcIn : shared_dc); + hdc = CreateCompatibleDC( hdcIn ? hdcIn : shared_dc ); logfont = lfIn; SelectObject( hdc, hfont ); - stockFont = false; + stockFont = bStockFont; lbearing = SHRT_MIN; rbearing = SHRT_MIN; BOOL res; QT_WA({ - res = GetTextMetricsW(shared_dc, &tm.w); + res = GetTextMetricsW(hdc, &tm.w); } , { - res = GetTextMetricsA(shared_dc, &tm.a); + res = GetTextMetricsA(hdc, &tm.a); }); if (!res) qWarning("QFontEngineWin: GetTextMetrics failed"); @@ -643,66 +643,17 @@ glyph_metrics_t QFontEngineWin::boundingBox( const glyph_t *glyphs, const advance_t *advances, const qoffset_t *offsets, int numGlyphs ) { - glyph_metrics_t overall; - - unsigned int ymax = 0; - unsigned int xmax = 0; - - GLYPHMETRICS gmw = {0}; - MAT2 mat; - ZeroMemory( &mat, sizeof mat ); - mat.eM11.value = mat.eM22.value = 1; - GetGlyphOutline ( hdc, 0, GGO_METRICS | GGO_GLYPH_INDEX, &gmw, 0, 0, &mat ); - for ( int i = 0; i < numGlyphs; i++ ) { - if ( GDI_ERROR == GetGlyphOutline( hdc, glyphs[ i ], GGO_METRICS | GGO_GLYPH_INDEX, &gmw, 0, 0, &mat ) ) { -#ifdef QFONTENGINE_WIN_LASTERROR - qlasterror( "QFontEngineWin::boundingBox(...) GetGlyphOutline:", GetLastError() ); -#endif - - } - //int x = overall.xoff + offsets[ i ].x - ( gmw.gmBlackBoxX - gmw.gmptGlyphOrigin.x ); - //int y = overall.yoff + offsets[ i ].y - ( gmw.gmBlackBoxY - gmw.gmptGlyphOrigin.y ); - int x = overall.xoff + offsets[ i ].x + gmw.gmptGlyphOrigin.x; - int y = overall.yoff + offsets[ i ].y + gmw.gmptGlyphOrigin.y; -#ifdef QFONTENGINE_WIN_DEBUG - - qDebug ( "QFontEngineWin::boundingBox: glyph: %d x = %d y = %d\n", glyphs[ i ], x, y ); - qDebug ( "QFontEngineWin::boundingBox: offsets[%d].x = %d, offets[%d].y = %d\n", i, offsets[ i ].x, i, offsets[ i ].y ); - qDebug ( "QFontEngineWin::boundingBox: overall.xoff = %d, overall.yoff = %d", overall.xoff, overall.yoff ); - qDebug ( "QFontEngineWin::boundingBox: gmw.gmBlackBoxX = %d, gmyw.gmptGlyphOrigin.x = %d", gmw.gmBlackBoxX, gmw.gmptGlyphOrigin.x ); -#endif + if (numGlyphs == 0) + return glyph_metrics_t(); - overall.x = QMIN( overall.x, x ); - overall.y = QMIN( overall.y, y ); -#ifdef QFONTENGINE_WIN_DEBUG - - qDebug ( "QFontEngineWin::boundingBox: overall.x = %d, overall.y = %d\n", overall.x, overall.y ); -#endif - - xmax = QMAX( xmax, x + gmw.gmBlackBoxX ); - ymax = QMAX( ymax, y + gmw.gmBlackBoxY ); - overall.xoff += advances[ i ]; - } - /* - for (int i = 0; i < numGlyphs; i++) { - getGlyphInfo( &xgi, _font, glyphs[i] ); - int x = overall.xoff + offsets[i].x - xgi.x; - int y = overall.yoff + offsets[i].y - xgi.y; - overall.x = QMIN( overall.x, x ); - overall.y = QMIN( overall.y, y ); - xmax = QMAX( xmax, x + xgi.width ); - ymax = QMAX( ymax, y + xgi.height ); - overall.xoff += advances[i]; - } - */ -#ifdef QFONTENGINE_WIN_DEBUG - qDebug ( "QFontEngineWin::boundingBox: overall.xoff = %d, overall.x = %d", overall.xoff, overall.x ); -#endif - - overall.height = ymax - overall.y; - overall.width = xmax - overall.x; - return overall; + int w = 0; + const advance_t *end = advances + numGlyphs; + while(end > advances) { + --end; + w += *end; + } + return glyph_metrics_t(0, -tm.w.tmAscent, w, tm.w.tmHeight, w, 0); } glyph_metrics_t QFontEngineWin::boundingBox( glyph_t glyph ) |
From: Christian E. <che...@us...> - 2005-10-28 14:12:07
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24304/src/kernel Modified Files: Tag: QT_WIN32_3_3_BRANCH qfont_win.cpp Log Message: should be fine now - compared to qt4 and found no significant differences removed unneded code astyle'd Index: qfont_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfont_win.cpp,v retrieving revision 1.1.2.16.2.14 retrieving revision 1.1.2.16.2.15 diff -u -r1.1.2.16.2.14 -r1.1.2.16.2.15 --- qfont_win.cpp 27 Oct 2005 19:15:29 -0000 1.1.2.16.2.14 +++ qfont_win.cpp 28 Oct 2005 14:11:59 -0000 1.1.2.16.2.15 @@ -76,44 +76,44 @@ #define QT_CHECK_STATE -extern HDC shared_dc; // common dc for all fonts +extern HDC shared_dc; // common dc for all fonts // ### maybe move to qapplication_win -QFont qt_LOGFONTtoQFont(LOGFONT& lf, bool /*scale*/) +QFont qt_LOGFONTtoQFont( LOGFONT& lf, bool /*scale*/ ) { - QString family = QT_WA_INLINE(QString::fromUcs2((ushort*)lf.lfFaceName), - QString::fromLocal8Bit((char*)lf.lfFaceName)); - QFont qf(family); - qf.setItalic(lf.lfItalic); - if (lf.lfWeight != FW_DONTCARE) { + QString family = QT_WA_INLINE( QString::fromUcs2( ( ushort* ) lf.lfFaceName ), + QString::fromLocal8Bit( ( char* ) lf.lfFaceName ) ); + QFont qf( family ); + qf.setItalic( lf.lfItalic ); + if ( lf.lfWeight != FW_DONTCARE ) { int weight; - if (lf.lfWeight < 400) + if ( lf.lfWeight < 400 ) weight = QFont::Light; - else if (lf.lfWeight < 600) + else if ( lf.lfWeight < 600 ) weight = QFont::Normal; - else if (lf.lfWeight < 700) + else if ( lf.lfWeight < 700 ) weight = QFont::DemiBold; - else if (lf.lfWeight < 800) + else if ( lf.lfWeight < 800 ) weight = QFont::Bold; else weight = QFont::Black; - qf.setWeight(weight); + qf.setWeight( weight ); } - int lfh = QABS(lf.lfHeight); - Q_ASSERT(shared_dc); - qf.setPointSize(lfh * 72.0 / GetDeviceCaps(shared_dc,LOGPIXELSY)); - qf.setUnderline(false); - qf.setOverline(false); - qf.setStrikeOut(false); + int lfh = QABS( lf.lfHeight ); + Q_ASSERT( shared_dc ); + qf.setPointSize( lfh * 72.0 / GetDeviceCaps( shared_dc, LOGPIXELSY ) ); + qf.setUnderline( false ); + qf.setOverline( false ); + qf.setStrikeOut( false ); return qf; } static inline double pixelSize( const QFontDef &request, QPaintDevice *paintdevice ) { double pSize; - int dpi = GetDeviceCaps(qt_display_dc(),LOGPIXELSY); - if (request.pointSize != -1) - pSize = request.pointSize * dpi/ 72.; + int dpi = GetDeviceCaps( qt_display_dc(), LOGPIXELSY ); + if ( request.pointSize != -1 ) + pSize = request.pointSize * dpi / 72.; else pSize = request.pixelSize; return pSize / 10; @@ -122,9 +122,9 @@ static inline double pointSize( const QFontDef &fd, QPaintDevice *paintdevice ) { double pSize; - int dpi = GetDeviceCaps(qt_display_dc(),LOGPIXELSY); - if (fd.pointSize < 0) - pSize = fd.pixelSize * 72. / ((float)dpi); + int dpi = GetDeviceCaps( qt_display_dc(), LOGPIXELSY ); + if ( fd.pointSize < 0 ) + pSize = fd.pixelSize * 72. / ( ( float ) dpi ); else pSize = fd.pointSize; return pSize / 10; @@ -159,19 +159,6 @@ return ret; } -//333 -// Sets the fallback family for the specified script. -void qt_set_fallback_font_family( QFont::Script script, const QString &family ) -{ - ensure_fallback_map(); - - if ( ! family.isEmpty() ) - fallbackMap->insert( script, family ); - else - fallbackMap->remove - ( script ); -} - QFont::Script QFontPrivate::defaultScript = QFont::UnknownScript; //int QFontPrivate::defaultEncodingID = -1; @@ -185,12 +172,59 @@ */ void QFont::initialize() { - if (QFontCache::instance) - return; - shared_dc = CreateCompatibleDC(qt_display_dc()); - if (!shared_dc) - qWarning("QFont::initialize: CreateCompatibleDC failed"); + if ( QFontCache::instance ) + return ; + shared_dc = CreateCompatibleDC( qt_display_dc() ); + if ( !shared_dc ) + qWarning( "QFont::initialize: CreateCompatibleDC failed" ); new QFontCache(); + + // get some sample text based on the users locale. we use this to determine the + // default script for the font system + QTextCodec *codec = QTextCodec::codecForLocale(); + QCString oldlctime = setlocale( LC_TIME, 0 ); + QCString lctime = setlocale( LC_TIME, "" ); + + time_t ttmp = time( 0 ); + struct tm *tt = 0; + char samp[ 64 ]; + QString sample; + + if ( ttmp != -1 ) { +#if defined(QT_THREAD_SUPPORT) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) + // use the reentrant versions of localtime() where available + tm res; + tt = localtime_r( &ttmp, &res ); +#else + + tt = localtime( &ttmp ); +#endif // QT_THREAD_SUPPORT && _POSIX_THREAD_SAFE_FUNCTIONS + + if ( tt != 0 && strftime( samp, 64, "%A%B", tt ) > 0 ) + if ( codec ) + sample = codec->toUnicode( samp ); + } + + if ( ! sample.isNull() && ! sample.isEmpty() ) { + QFont::Script cs = QFont::NoScript, tmp; + const QChar *uc = sample.unicode(); + QFontPrivate *priv = new QFontPrivate; + + for ( uint i = 0; i < sample.length(); i++ ) { + SCRIPT_FOR_CHAR( tmp, *uc ); + uc++; + if ( tmp != cs && tmp != QFont::UnknownScript ) { + cs = tmp; + break; + } + } + delete priv; + + if ( cs != QFont::UnknownScript ) + QFontPrivate::defaultScript = cs; + } + + setlocale( LC_TIME, oldlctime.data() ); } /*! \internal @@ -200,7 +234,7 @@ void QFont::cleanup() { delete QFontCache::instance; - DeleteDC(shared_dc); + DeleteDC( shared_dc ); shared_dc = 0; } @@ -293,7 +327,7 @@ QStringList::ConstIterator it = family_list.begin(), end = family_list.end(); for ( ; ! engine && it != end; ++it ) { req.family = *it; - //qDebug("calling findFont with %s for %d",req.family.latin1(),script); + //qDebug("calling findFont with %s for %d",req.family.latin1(),script); engine = QFontDatabase::findFont( script, this, req ); if ( engine ) { if ( engine->type() != QFontEngine::Box ) @@ -315,7 +349,6 @@ Returns TRUE if the font attributes have been changed and the font has to be (re)loaded; otherwise returns FALSE. */ -//333 bool QFont::dirty() const { return d->engineData == 0; @@ -343,217 +376,47 @@ return 0; } -/*! - Returns the name of the font within the underlying window system. - - On Windows, this is usually just the family name of a TrueType - font. - - On X11, it is an XLFD (X Logical Font Description). When Qt is - build with Xft support on X11, the return value can be an Xft - pattern or an XLFD. - - Using the return value of this function is usually \e not \e - portable. - - \sa setRawName() -*/ QString QFont::rawName() const { - QFontEngine * engine = d->engineForScript( QFontPrivate::defaultScript ); -#ifdef QT_CHECK_STATE - - Q_ASSERT( engine != 0 ); -#endif // QT_CHECK_STATE - - return QString::fromLatin1( engine->name() ); - //return family(); + return family(); } -/*! - Sets a font by its system specific name. The function is - particularly useful under X, where system font settings (for - example X resources) are usually available in XLFD (X Logical Font - Description) form only. You can pass an XLFD as \a name to this - function. - - A font set with setRawName() is still a full-featured QFont. It can - be queried (for example with italic()) or modified (for example with - setItalic()) and is therefore also suitable for rendering rich text. - - If Qt's internal font database cannot resolve the raw name, the - font becomes a raw font with \a name as its family. - - Note that the present implementation does not handle wildcards in - XLFDs well, and that font aliases (file \c fonts.alias in the font - directory on X11) are not supported. - - \sa rawName(), setRawMode(), setFamily() -*/ void QFont::setRawName( const QString &name ) { - detach(); - - // from qfontdatabase_x11.cpp - /* - extern bool qt_fillFontDef( const QCString &xlfd, QFontDef *fd, int screen ); - - if ( ! qt_fillFontDef( qt_fixXLFD( name.latin1() ), &d->request, d->screen ) ) { - #ifdef QT_CHECK_STATE - qWarning("QFont::setRawMode(): Invalid XLFD: \"%s\"", name.latin1()); - #endif // QT_CHECK_STATE - */ setFamily( name ); - setRawMode( TRUE ); - /* - } else { - d->mask = QFontPrivate::Complete; - } - */ } - -/*! - Returns the "last resort" font family name. - - The current implementation tries a wide variety of common fonts, - returning the first one it finds. Is is possible that no family is - found in which case a null string is returned. - - \sa lastResortFont() -*/ -//333 -QString QFont::lastResortFamily() const -{ - return QString::fromLatin1( "Helvetica" ); -} - -/*! - Returns the family name that corresponds to the current style - hint. - - \sa StyleHint styleHint() setStyleHint() -*/ -//333 QString QFont::defaultFamily() const { switch ( d->request.styleHint ) { case QFont::Times: - return QString::fromLatin1( "Times" ); - + return QString::fromLatin1( "Times New Roman" ); case QFont::Courier: - return QString::fromLatin1( "Courier" ); - + return QString::fromLatin1( "Courier New" ); case QFont::Decorative: - return QString::fromLatin1( "Old English" ); - + return QString::fromLatin1( "Bookman Old Style" ); case QFont::Helvetica: + return QString::fromLatin1( "Arial" ); case QFont::System: default: - return QString::fromLatin1( "Helvetica" ); + return QString::fromLatin1( "MS Sans Serif" ); } } -/* - Returns a last resort raw font name for the font matching algorithm. - This is used if even the last resort family is not available. It - returns \e something, almost no matter what. The current - implementation tries a wide variety of common fonts, returning the - first one it finds. The implementation may change at any time. -*/ -//333 -static const char * const tryFonts[] = - { - "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-courier-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-times-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-lucida-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-helvetica-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-courier-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-times-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-lucida-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-helvetica-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-courier-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-times-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-lucida-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*", - "6x13", - "7x13", - "8x13", - "9x15", - "fixed", - 0 - }; - -// Returns TRUE if the font exists, FALSE otherwise -static bool fontExists( const QString &fontName ) -{ - /* - int count; - char **fontNames = XListFonts( QPaintDevice::x11AppDisplay(), - (char*)fontName.latin1(), 32768, &count ); - if ( fontNames ) XFreeFontNames( fontNames ); - - return count != 0; - */ - return true; +QString QFont::lastResortFamily() const +{ + return QString::fromLatin1( "helvetica" ); } - -/*! - Returns a "last resort" font name for the font matching algorithm. - This is used if the last resort family is not available. It will - always return a name, if necessary returning something like - "fixed" or "system". - - The current implementation tries a wide variety of common fonts, - returning the first one it finds. The implementation may change - at any time, but this function will always return a string - containing something. - - It is theoretically possible that there really isn't a - lastResortFont() in which case Qt will abort with an error - message. We have not been able to identify a case where this - happens. Please \link bughowto.html report it as a bug\endlink if - it does, preferably with a list of the fonts you have installed. - - \sa lastResortFamily() rawName() -*/ -//333 QString QFont::lastResortFont() const { - static QString last; - - // already found - if ( ! last.isNull() ) - return last; - - int i = 0; - const char* f; - - while ( ( f = tryFonts[ i ] ) ) { - last = QString::fromLatin1( f ); - - if ( fontExists( last ) ) - return last; - - i++; - } - -#if defined(CHECK_NULL) - qFatal( "QFontPrivate::lastResortFont: Cannot find any reasonable font" ); -#endif - - return last; - // return "Arial"; + return QString::fromLatin1( "arial" ); } - // ********************************************************************** // QFontMetrics member methods // ********************************************************************** -//333 int QFontMetrics::width( QChar ch ) const { unsigned short uc = ch.unicode(); @@ -585,7 +448,6 @@ return advances[ 0 ]; } -//333 int QFontMetrics::charWidth( const QString &str, int pos ) const { if ( pos < 0 || pos > ( int ) str.length() ) @@ -654,8 +516,6 @@ return gi.x; } - - int QFontMetrics::rightBearing( QChar ch ) const { QFont::Script script; |
From: Christian E. <che...@us...> - 2005-10-27 19:15:39
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14344/src/kernel Modified Files: Tag: QT_WIN32_3_3_BRANCH qapplication_win.cpp qfont_win.cpp qfontdatabase_win.cpp Log Message: small fixes - standard font should now choosed correct Index: qapplication_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qapplication_win.cpp,v retrieving revision 1.1.2.30.2.96 retrieving revision 1.1.2.30.2.97 diff -u -r1.1.2.30.2.96 -r1.1.2.30.2.97 --- qapplication_win.cpp 26 Oct 2005 20:36:56 -0000 1.1.2.30.2.96 +++ qapplication_win.cpp 27 Oct 2005 19:15:29 -0000 1.1.2.30.2.97 @@ -509,16 +509,14 @@ smallTitleFont = qt_LOGFONTtoQFont((LOGFONT&)ncm.lfSmCaptionFont,true); }); - QApplication::setFont(menuFont, true, "QMenuBar"); - QApplication::setFont(menuFont, true, "QMenuData"); -// QApplication::setFont(menuFont, true, "QPopupMenu"); -// QApplication::setFont(menuFont, true, "QPushButton"); - QApplication::setFont(messageFont, true, "QMessageBox"); -// QApplication::setFont(messageFont, true, "QMessageBoxLabel"); - QApplication::setFont(statusFont, true, "QTipLabel"); - QApplication::setFont(statusFont, true, "QStatusBar"); - QApplication::setFont(titleFont, true, "QTitleBar"); - QApplication::setFont(smallTitleFont, true, "QDockWidgetTitle"); + QApplication::setFont(menuFont, true, "QMenuBar"); // ok + QApplication::setFont(menuFont, true, "QMenuData"); // ok (win2k only?) + QApplication::setFont(menuFont, true, "QPopupMenu"); // ok (winxp) + QApplication::setFont(messageFont, true, "QMessageBox"); // ok + QApplication::setFont(statusFont, true, "QTipLabel"); // ok + QApplication::setFont(statusFont, true, "QStatusBar"); // ?? + QApplication::setFont(titleFont, true, "QTitleBar"); // ok + QApplication::setFont(smallTitleFont, true, "QDockWindowTitleBar"); // I think ok #else LOGFONT lf; HGDIOBJ stockFont = GetStockObject(SYSTEM_FONT); @@ -583,6 +581,8 @@ if (GetObjectA(hfont, sizeof(lf), &lf)) f = qt_LOGFONTtoQFont((LOGFONT&)lf,true); }); + // lf.familyName is MS Shell Dlg which is somewhat wrong ... + f.setFamily("MS Sans Serif"); QApplication::setFont(f); } qt_set_windows_resources(); @@ -2881,11 +2881,15 @@ QApplication::postEvent( widget, new QEvent( QEvent::LocaleChange ) ); } if (QApplication::desktopSettingsAware() && wParam != SPI_SETWORKAREA) { - if (widget) { - widget->markFrameStrutDirty(); - if (!widget->parentWidget()) - qt_set_windows_resources(); - } + widget->markFrameStrutDirty(); + if (!widget->parentWidget()) + qt_set_windows_resources(); + } + break; + case WM_SYSCOLORCHANGE: + if (QApplication::desktopSettingsAware()) { + if (!widget->parentWidget()) + qt_set_windows_resources(); } break; Index: qfont_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfont_win.cpp,v retrieving revision 1.1.2.16.2.13 retrieving revision 1.1.2.16.2.14 diff -u -r1.1.2.16.2.13 -r1.1.2.16.2.14 --- qfont_win.cpp 25 Oct 2005 19:42:13 -0000 1.1.2.16.2.13 +++ qfont_win.cpp 27 Oct 2005 19:15:29 -0000 1.1.2.16.2.14 @@ -293,7 +293,7 @@ QStringList::ConstIterator it = family_list.begin(), end = family_list.end(); for ( ; ! engine && it != end; ++it ) { req.family = *it; - qDebug("calling findFont with %s for %d",req.family.latin1(),script); + //qDebug("calling findFont with %s for %d",req.family.latin1(),script); engine = QFontDatabase::findFont( script, this, req ); if ( engine ) { if ( engine->type() != QFontEngine::Box ) Index: qfontdatabase_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfontdatabase_win.cpp,v retrieving revision 1.1.2.6.2.23 retrieving revision 1.1.2.6.2.24 diff -u -r1.1.2.6.2.23 -r1.1.2.6.2.24 --- qfontdatabase_win.cpp 25 Oct 2005 19:42:14 -0000 1.1.2.6.2.23 +++ qfontdatabase_win.cpp 27 Oct 2005 19:15:29 -0000 1.1.2.6.2.24 @@ -9,7 +9,7 @@ ** Copyright (C) 2003 Ivan de Jesus Deras Tabora ** Copyright (C) 2004 Ralf Habacker ** Copyright (C) 2004 Peter Kuemmel -** Copyright (C) 2004 Christian Ehrlicher +** Copyright (C) 2004, 2005 Christian Ehrlicher ** ** This file is part of the kernel module of the Qt GUI Toolkit. ** @@ -550,7 +550,9 @@ if (!hasScript) family->scripts[QFont::UnknownScript] = QtFontFamily::Supported; // qDebug("usb=%08x %08x csb=%08x for %s", signature.fsUsb[0], signature.fsUsb[1], signature.fsCsb[0], familyName.latin1()); - } + } else { + family->scripts[QFont::UnknownScript] = QtFontFamily::Supported; + } } return 1; } @@ -610,6 +612,7 @@ populate_database(QString()); // don't know why I have to do this... + // but when I don't, the fonts set with QApplication::setFont() don't work for (int f = 0; f < db->count; f++) { QtFontFamily *family = db->families[f]; populate_database(family->name); |
From: Christian E. <che...@us...> - 2005-10-27 18:44:32
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5808/src/kernel Modified Files: Tag: QT_WIN32_3_3_BRANCH qfontengine_win.cpp Log Message: rearranged functions to fit with qt4 Index: qfontengine_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfontengine_win.cpp,v retrieving revision 1.1.2.36 retrieving revision 1.1.2.37 diff -u -r1.1.2.36 -r1.1.2.37 --- qfontengine_win.cpp 26 Oct 2005 20:36:56 -0000 1.1.2.36 +++ qfontengine_win.cpp 27 Oct 2005 18:44:24 -0000 1.1.2.37 @@ -166,6 +166,69 @@ } } +inline unsigned int getChar(const QChar *str, int &i, const int len) +{ + unsigned int uc = str[i].unicode(); + if (uc >= 0xd800 && uc < 0xdc00 && i < len-1) { + uint low = str[i+1].unicode(); + if (low >= 0xdc00 && low < 0xe000) { + uc = (uc - 0xd800)*0x400 + (low - 0xdc00) + 0x10000; + ++i; + } + } + return uc; +} + +void QFontEngine::getGlyphIndexes( const QChar *str, int numChars, glyph_t *glyphs, bool mirrored ) const +{ + if (mirrored) { + if (symbol) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, uc); + if(!*glyphs && uc < 0x100) + *glyphs = getGlyphIndex(cmap, uc + 0xf000); + glyphs++; + } + } else if (ttf) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, ::mirroredChar(uc).unicode()); + glyphs++; + } + } else { + for (int i = 0; i < numChars; ++i) { + *glyphs = ::mirroredChar(str->unicode()).unicode(); + glyphs++; + str++; + } + } + } else { + if (symbol) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, uc); + if(!*glyphs && uc < 0x100) + *glyphs = getGlyphIndex(cmap, uc + 0xf000); + glyphs++; + } + } else if (ttf) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, uc); + glyphs++; + } + } else { + for (int i = 0; i < numChars; ++i) { + *glyphs = str->unicode(); + glyphs++; + str++; + } + } + } + return; +} + // ------------------------------------------------------------------ // The box font engine // ------------------------------------------------------------------ @@ -326,10 +389,6 @@ return Box; } - - - - // ------------------------------------------------------------------ // Win font engine // ------------------------------------------------------------------ @@ -371,68 +430,6 @@ memset(widthCache, 0, sizeof(widthCache)); } -inline unsigned int getChar(const QChar *str, int &i, const int len) -{ - unsigned int uc = str[i].unicode(); - if (uc >= 0xd800 && uc < 0xdc00 && i < len-1) { - uint low = str[i+1].unicode(); - if (low >= 0xdc00 && low < 0xe000) { - uc = (uc - 0xd800)*0x400 + (low - 0xdc00) + 0x10000; - ++i; - } - } - return uc; -} - -void QFontEngine::getGlyphIndexes( const QChar *str, int numChars, glyph_t *glyphs, bool mirrored ) const -{ - if (mirrored) { - if (symbol) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - *glyphs = getGlyphIndex(cmap, uc); - if(!*glyphs && uc < 0x100) - *glyphs = getGlyphIndex(cmap, uc + 0xf000); - glyphs++; - } - } else if (ttf) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - *glyphs = getGlyphIndex(cmap, ::mirroredChar(uc).unicode()); - glyphs++; - } - } else { - for (int i = 0; i < numChars; ++i) { - *glyphs = ::mirroredChar(str->unicode()).unicode(); - glyphs++; - str++; - } - } - } else { - if (symbol) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - *glyphs = getGlyphIndex(cmap, uc); - if(!*glyphs && uc < 0x100) - *glyphs = getGlyphIndex(cmap, uc + 0xf000); - glyphs++; - } - } else if (ttf) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - *glyphs = getGlyphIndex(cmap, uc); - glyphs++; - } - } else { - for (int i = 0; i < numChars; ++i) { - *glyphs = str->unicode(); - glyphs++; - str++; - } - } - } - return; -} QFontEngine::Error QFontEngineWin::stringToCMap( const QChar *str, int len, glyph_t *glyphs, advance_t *advances, int *nglyphs, bool mirrored ) const { @@ -440,21 +437,6 @@ *nglyphs = len; return OutOfMemory; } - /* - TCHAR* uc; - TCHAR g64 [ 64 ]; - bool uc_delete = false; - if ( len < 64 ) - uc = g64; - else { - uc = new TCHAR [ len ]; - uc_delete = true; - } - - for ( int i = 0;i < len;i++ ) { - QT_WA_INLINE( uc[ i ] = str[ i ].unicode(), uc[ i ] = str[ i ].latin1()); - } - */ // if called before draw then hdc is wong !!!! (painter setfont??? @@ -499,11 +481,6 @@ } } - /* - if ( uc_delete ) - delete [] uc; - */ - return NoError; } @@ -664,9 +641,6 @@ SetBkMode( hdc, oldBkMode ); } - - - glyph_metrics_t QFontEngineWin::boundingBox( const glyph_t *glyphs, const advance_t *advances, const qoffset_t *offsets, int numGlyphs ) { glyph_metrics_t overall; @@ -846,7 +820,6 @@ } - const char *QFontEngineWin::name() const { return _name; @@ -854,27 +827,38 @@ bool QFontEngineWin::canRender( const QChar *string, int len ) { - glyph_t glyphs[ 256 ]; - int nglyphs = 255; - glyph_t *g = glyphs; - if ( stringToCMap( string, len, g, 0, &nglyphs, FALSE ) == OutOfMemory ) { - g = ( glyph_t * ) malloc( nglyphs * sizeof( glyph_t ) ); - stringToCMap( string, len, g, 0, &nglyphs, FALSE ); - } - - bool allExist = TRUE; - for ( int i = 0; i < nglyphs; i++ ) { - /*if ( !g[i] || !charStruct( tm.a , g[i] ) ) //todo - { - allExist = FALSE; - break; - }*/ + if (symbol) { + for (int i = 0; i < len; ++i) { + unsigned int uc = getChar(string, i, len); + if (getGlyphIndex(cmap, uc) == 0) { + if (uc < 0x100) { + if (getGlyphIndex(cmap, uc + 0xf000) == 0) + return false; + } else { + return false; + } + } + } + } else if (ttf) { + for (int i = 0; i < len; ++i) { + unsigned int uc = getChar(string, i, len); + if (getGlyphIndex(cmap, uc) == 0) + return false; + } + } else { + QT_WA({ + while(len--) { + if (tm.w.tmFirstChar > string->unicode() || tm.w.tmLastChar < string->unicode()) + return false; + } + }, { + while(len--) { + if (tm.a.tmFirstChar > string->unicode() || tm.a.tmLastChar < string->unicode()) + return false; + } + }); } - - if ( g != glyphs ) - free( g ); - - return allExist; + return true; } QFontEngine::Type QFontEngineWin::type() const @@ -882,7 +866,9 @@ return Win; } - +// ---------------------------------------------------------------------------- +// True type support methods +// ---------------------------------------------------------------------------- #define MAKE_TAG(ch1, ch2, ch3, ch4) (\ (((DWORD)(ch4)) << 24) | \ |
From: Christian E. <che...@us...> - 2005-10-26 20:37:05
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25879/src/kernel Modified Files: Tag: QT_WIN32_3_3_BRANCH qapplication_win.cpp qfontengine_win.cpp Log Message: more fixes Index: qapplication_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qapplication_win.cpp,v retrieving revision 1.1.2.30.2.95 retrieving revision 1.1.2.30.2.96 diff -u -r1.1.2.30.2.95 -r1.1.2.30.2.96 --- qapplication_win.cpp 24 Oct 2005 17:33:29 -0000 1.1.2.30.2.95 +++ qapplication_win.cpp 26 Oct 2005 20:36:56 -0000 1.1.2.30.2.96 @@ -233,6 +233,10 @@ { QWidget::clearWFlags( f ); } + void markFrameStrutDirty() + { + fstrut_dirty = 1; + } bool translateMouseEvent( const MSG &msg ); @@ -505,12 +509,12 @@ smallTitleFont = qt_LOGFONTtoQFont((LOGFONT&)ncm.lfSmCaptionFont,true); }); - QApplication::setFont(menuFont, true, "QMenu"); QApplication::setFont(menuFont, true, "QMenuBar"); - QApplication::setFont(menuFont, true, "QPopupMenu"); - QApplication::setFont(menuFont, true, "QPushButton"); + QApplication::setFont(menuFont, true, "QMenuData"); +// QApplication::setFont(menuFont, true, "QPopupMenu"); +// QApplication::setFont(menuFont, true, "QPushButton"); QApplication::setFont(messageFont, true, "QMessageBox"); - QApplication::setFont(messageFont, true, "QMessageBoxLabel"); +// QApplication::setFont(messageFont, true, "QMessageBoxLabel"); QApplication::setFont(statusFont, true, "QTipLabel"); QApplication::setFont(statusFont, true, "QStatusBar"); QApplication::setFont(titleFont, true, "QTitleBar"); @@ -2876,6 +2880,13 @@ if ( area == "intl" ) QApplication::postEvent( widget, new QEvent( QEvent::LocaleChange ) ); } + if (QApplication::desktopSettingsAware() && wParam != SPI_SETWORKAREA) { + if (widget) { + widget->markFrameStrutDirty(); + if (!widget->parentWidget()) + qt_set_windows_resources(); + } + } break; #ifndef Q_OS_TEMP Index: qfontengine_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfontengine_win.cpp,v retrieving revision 1.1.2.35 retrieving revision 1.1.2.36 diff -u -r1.1.2.35 -r1.1.2.36 --- qfontengine_win.cpp 25 Oct 2005 19:42:14 -0000 1.1.2.35 +++ qfontengine_win.cpp 26 Oct 2005 20:36:56 -0000 1.1.2.36 @@ -30,6 +30,7 @@ ** **********************************************************************/ #include <limits.h> +#include <math.h> #include "qbitmap.h" #include "qcstring.h" @@ -55,16 +56,16 @@ //extern int qt_mib_for_xlfd_encoding( const char *encoding ); //extern int qt_xlfd_encoding_id( const char *encoding ); +typedef signed short qint16; +typedef unsigned short quint16; +typedef unsigned int quint32; + +static unsigned char *getCMap(HDC hdc, bool &); +static quint32 getGlyphIndex(unsigned char *table, unsigned int unicode); HDC shared_dc = 0; // common dc for all fonts static HFONT stock_sysfont = 0; - -static inline HFONT systemFont() -{ - if (stock_sysfont == 0) - stock_sysfont = (HFONT)GetStockObject(SYSTEM_FONT); - return stock_sysfont; -} +extern Qt::WindowsVersion qt_winver; extern void qt_draw_transformed_rect( QPainter *p, int x, int y, int w, int h, bool fill ); @@ -94,6 +95,13 @@ } } +static inline HFONT systemFont() +{ + if (stock_sysfont == 0) + stock_sysfont = (HFONT)GetStockObject(SYSTEM_FONT); + return stock_sysfont; +} + QFontEngine::~QFontEngine() { // make sure we aren't by accident still selected @@ -123,6 +131,41 @@ return pos ? pos : 1; } +void QFontEngine::getCMap() +{ + QT_WA({ + ttf = (bool)(tm.w.tmPitchAndFamily & TMPF_TRUETYPE); + } , { + ttf = (bool)(tm.a.tmPitchAndFamily & TMPF_TRUETYPE); + }); +// HDC hdc = shared_dc; +// SelectObject(hdc, hfont); + bool symb = false; + cmap = ttf ? ::getCMap(hdc, symb) : 0; + if (!cmap) { + ttf = false; + symb = false; + } + symbol = symb; + script_cache = 0; + // !Qt4 designToDevice = 1.; + // !Qt4 unitsPerEm = tm.w.tmHeight; + if(cmap) { + QT_WA( { + OUTLINETEXTMETRICW metric; + GetOutlineTextMetricsW(hdc, sizeof(OUTLINETEXTMETRICW), &metric); + // !Qt4 designToDevice = (float)metric.otmTextMetrics.tmHeight/(float)metric.otmEMSquare; + // !Qt4 unitsPerEm = metric.otmEMSquare; + }, { + OUTLINETEXTMETRICA metric; + GetOutlineTextMetricsA(hdc, sizeof(OUTLINETEXTMETRICA), &metric); + // !Qt4 designToDevice = (float)metric.otmTextMetrics.tmHeight/(float)metric.otmEMSquare; + // !Qt4 unitsPerEm = metric.otmEMSquare; + } ) + // !Qt4 kerning_pairs = getKerning(hdc, designToDevice); + } +} + // ------------------------------------------------------------------ // The box font engine // ------------------------------------------------------------------ @@ -291,80 +334,105 @@ // Win font engine // ------------------------------------------------------------------ - -#ifndef QFONTENGINE_ENABLE_QT4CODE - QFontEngineWin::QFontEngineWin( const char *nameIn, HDC hdcIn, HFONT hfIn, bool bIn, LOGFONT lfIn ) { _name = nameIn; + hfont = hfIn; + hdc = CreateCompatibleDC(hdcIn ? hdcIn : shared_dc); logfont = lfIn; - cmap = 0; - - if ( hdcIn ) { - hdc = hdcIn; - if ( HGDI_ERROR == SelectObject( hdc, hfIn ) ) { -# ifdef QFONTENGINE_WIN_LASTERROR - qlasterror ( "QFontEngineWin::QFontEngineWin(...) SelectObject:", GetLastError () ); -# endif - // what to do? - } else { - hfont = ( HFONT ) SelectObject( hdc, hfIn ); - } - QT_WA( GetTextMetricsW( hdc, &tm.w ); , GetTextMetricsA( hdc, &tm.a ); ); - } else { - hdc = GetDC( NULL ); - hfont = ( HFONT ) SelectObject( hdc, hfont ); - QT_WA( GetTextMetricsW( hdc, &tm.w ); , GetTextMetricsA( hdc, &tm.a ); ); - ReleaseDC( NULL, hdc ); - } + SelectObject( hdc, hfont ); + stockFont = false; lbearing = SHRT_MIN; rbearing = SHRT_MIN; - memset( widthCache, 0, sizeof( widthCache ) ); -} -#endif - - - + BOOL res; + QT_WA({ + res = GetTextMetricsW(shared_dc, &tm.w); + } , { + res = GetTextMetricsA(shared_dc, &tm.a); + }); + if (!res) + qWarning("QFontEngineWin: GetTextMetrics failed"); + cache_cost = tm.w.tmHeight * tm.w.tmAveCharWidth * 2000; + getCMap(); -#ifndef QFONTENGINE_ENABLE_QT4CODE + useTextOutA = false; +#ifndef Q_OS_TEMP + // TextOutW doesn't work for symbol fonts on Windows 95! + // since we're using glyph indices we don't care for ttfs about this! + if (qt_winver == Qt::WV_95 && !ttf && + (_name == QString("Marlett").latin1() || _name == QString("Symbol").latin1() || + _name == QString("Webdings").latin1() || _name == QString("Wingdings").latin1())) + useTextOutA = true; +#endif + memset(widthCache, 0, sizeof(widthCache)); +} -void QFontEngine::getGlyphIndexes( const QChar *ch, int numChars, glyph_t *glyphs, bool mirrored ) const +inline unsigned int getChar(const QChar *str, int &i, const int len) { - /* - TCHAR uc; - QT_WA_INLINE( uc = ch[ 0 ].unicode() , uc = ch[ 0 ].latin1() ); - */ - - if ( qt_winunicode ) { - GCP_RESULTSW gi = {0, 0, 0, 0, 0, 0, 0, 0, 0}; - gi.nGlyphs = numChars; - gi.lpGlyphs = ( LPWSTR ) glyphs; - if ( 0 == GetCharacterPlacementW( hdc, ( LPCWSTR ) QString ( ch, numChars ).ucs2 (), numChars, 0, &gi, 0 ) ) { -#ifdef QFONTENGINE_WIN_LASTERROR - qlasterror( "QFontEngineWin::getGlyphIndexes(...) GetCharacterPlacementW:", GetLastError() ); -#endif + unsigned int uc = str[i].unicode(); + if (uc >= 0xd800 && uc < 0xdc00 && i < len-1) { + uint low = str[i+1].unicode(); + if (low >= 0xdc00 && low < 0xe000) { + uc = (uc - 0xd800)*0x400 + (low - 0xdc00) + 0x10000; + ++i; + } + } + return uc; +} +void QFontEngine::getGlyphIndexes( const QChar *str, int numChars, glyph_t *glyphs, bool mirrored ) const +{ + if (mirrored) { + if (symbol) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, uc); + if(!*glyphs && uc < 0x100) + *glyphs = getGlyphIndex(cmap, uc + 0xf000); + glyphs++; + } + } else if (ttf) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, ::mirroredChar(uc).unicode()); + glyphs++; + } + } else { + for (int i = 0; i < numChars; ++i) { + *glyphs = ::mirroredChar(str->unicode()).unicode(); + glyphs++; + str++; + } } } else { - GCP_RESULTSA gi = {0, 0, 0, 0, 0, 0, 0, 0, 0}; - gi.nGlyphs = numChars; - gi.lpGlyphs = ( LPWSTR ) glyphs; - if ( 0 == GetCharacterPlacementA( hdc, ( LPCSTR ) QString ( ch, numChars ).latin1 (), numChars, 0, &gi, 0 ) ) { -#ifdef QFONTENGINE_WIN_LASTERROR - qlasterror( "QFontEngineWin::getGlyphIndexes(...) GetCharacterPlacementA:", GetLastError() ); -#endif - + if (symbol) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, uc); + if(!*glyphs && uc < 0x100) + *glyphs = getGlyphIndex(cmap, uc + 0xf000); + glyphs++; + } + } else if (ttf) { + for (int i = 0; i < numChars; ++i) { + unsigned int uc = getChar(str, i, numChars); + *glyphs = getGlyphIndex(cmap, uc); + glyphs++; + } + } else { + for (int i = 0; i < numChars; ++i) { + *glyphs = str->unicode(); + glyphs++; + str++; + } } } + return; } -#endif //QFONTENGINE_ENABLE_QT4CODE - - -#ifndef QFONTENGINE_ENABLE_QT4CODE_2 QFontEngine::Error QFontEngineWin::stringToCMap( const QChar *str, int len, glyph_t *glyphs, advance_t *advances, int *nglyphs, bool mirrored ) const { @@ -439,12 +507,6 @@ return NoError; } -#endif - - - -#include <math.h> - // CCJ: TODO: doesn't support scaling, etc. void QFontEngineWin::draw( QPainter *p, int x, int y, const QTextEngine *engine, const QScriptItem *si, int textFlags ) { @@ -671,42 +733,36 @@ glyph_metrics_t QFontEngineWin::boundingBox( glyph_t glyph ) { - /* - XGlyphInfo xgi; - getGlyphInfo( &xgi, _font, glyph ); - glyph_metrics_t gm = glyph_metrics_t( -xgi.x, -xgi.y, xgi.width, xgi.height, xgi.xOff, -xgi.yOff ); - if ( _scale != 1. ) { - gm.x = qRound(gm.x * _scale); - gm.y = qRound(gm.y * _scale); - gm.height = qRound(gm.height * _scale); - gm.width = qRound(gm.width * _scale); - gm.xoff = qRound(gm.xoff * _scale); - gm.yoff = qRound(gm.yoff * _scale); - } - return gm; - */ - GLYPHMETRICS gmw = {0}; - MAT2 mat; - ZeroMemory( &mat, sizeof mat ); - mat.eM11.value = mat.eM22.value = 1; - if ( GDI_ERROR == GetGlyphOutline( hdc, glyph, GGO_METRICS | GGO_GLYPH_INDEX, &gmw, 0, 0, &mat ) ) { -#ifdef QFONTENGINE_WIN_LASTERROR - //qDebug ("QFontEngineWin::boundingBox( glyph_t ) glyph: %d ", glyph); - qlasterror( "QFontEngineWin::boundingBox( glyph_t ) GetGlyphOutline:", GetLastError() ); -#endif +#ifndef Q_OS_TEMP + GLYPHMETRICS gm; +// HDC hdc = shared_dc; +// SelectObject(hdc, hfont); + if(!ttf) { + SIZE s = {0, 0}; + WCHAR ch = glyph; + BOOL res = GetTextExtentPoint32W(hdc, &ch, 1, &s); + Q_UNUSED(res); + int overhang = (qt_winver & Qt::WV_DOS_based) ? tm.a.tmOverhang : 0; + return glyph_metrics_t(0, -tm.a.tmAscent, s.cx, tm.a.tmHeight, s.cx-overhang, 0); + } else { + DWORD res = 0; + MAT2 mat; + mat.eM11.value = mat.eM22.value = 1; + mat.eM11.fract = mat.eM22.fract = 0; + mat.eM21.value = mat.eM12.value = 0; + mat.eM21.fract = mat.eM12.fract = 0; + QT_WA({ + res = GetGlyphOutlineW(hdc, glyph, GGO_METRICS|GGO_GLYPH_INDEX, &gm, 0, 0, &mat); + } , { + res = GetGlyphOutlineA(hdc, glyph, GGO_METRICS|GGO_GLYPH_INDEX, &gm, 0, 0, &mat); + }); + if (res != GDI_ERROR) + return glyph_metrics_t(gm.gmptGlyphOrigin.x, -gm.gmptGlyphOrigin.y, + gm.gmBlackBoxX, gm.gmBlackBoxY, gm.gmCellIncX, gm.gmCellIncY); } - - glyph_metrics_t gm; - - gm.x = - gmw.gmptGlyphOrigin.x; - gm.y = - gmw.gmptGlyphOrigin.y; - gm.width = gmw.gmBlackBoxX; - gm.height = gmw.gmBlackBoxY; - gm.xoff = + gmw.gmCellIncX; - gm.yoff = - gmw.gmCellIncY; - - return gm; +#endif + return glyph_metrics_t(); } @@ -828,13 +884,12 @@ - - -#ifdef QFONTENGINE_ENABLE_QT4CODE - -typedef short qint16; -typedef unsigned short quint16; -typedef unsigned int quint32; +#define MAKE_TAG(ch1, ch2, ch3, ch4) (\ + (((DWORD)(ch4)) << 24) | \ + (((DWORD)(ch3)) << 16) | \ + (((DWORD)(ch2)) << 8) | \ + ((DWORD)(ch1)) \ + ) static inline quint32 getUInt(unsigned char *p) { @@ -856,182 +911,15 @@ return val; } -#define MAKE_TAG(ch1, ch2, ch3, ch4) (\ -(((DWORD)(ch4)) << 24) | \ -(((DWORD)(ch3)) << 16) | \ -(((DWORD)(ch2)) << 8) | \ -((DWORD)(ch1)) \ -) - -static unsigned char *getCMap(HDC hdc, bool &symbol) -{ - const DWORD CMAP = MAKE_TAG('c', 'm', 'a', 'p'); - - unsigned char header[8]; - - // get the CMAP header and the number of encoding tables - DWORD bytes = -#ifndef Q_OS_TEMP - GetFontData(hdc, CMAP, 0, &header, 4); -#else - 0; -#endif - if (bytes == GDI_ERROR) - return 0; - { - unsigned short version = getUShort(header); - if (version != 0) - return 0; - } - - unsigned short numTables = getUShort(header+2); - unsigned char *maps = new unsigned char[8*numTables]; - - // get the encoding table and look for Unicode -#ifndef Q_OS_TEMP - bytes = GetFontData(hdc, CMAP, 4, maps, 8*numTables); -#endif - if (bytes == GDI_ERROR) - return 0; - - quint32 version = 0; - unsigned int unicode_table = 0; - for (int n = 0; n < numTables; n++) { - quint32 v = getUInt(maps + 8*n); - // accept both symbol and Unicode encodings. prefer unicode. - if(v == 0x00030001 || v == 0x00030000 || v == 0x0003000a) { - if (v > version) { - version = v; - unicode_table = getUInt(maps + 8*n + 4); - } - } - } - symbol = version == 0x00030000; - - if (!unicode_table) { - // qDebug("no unicode table found"); - return 0; - } - - delete [] maps; - - // get the header of the unicode table -#ifndef Q_OS_TEMP - bytes = GetFontData(hdc, CMAP, unicode_table, &header, 8); -#endif - if (bytes == GDI_ERROR) - return 0; - - unsigned short format = getUShort(header); - unsigned int length; - if(format < 8) - length = getUShort(header+2); - else - length = getUInt(header+4); - unsigned char *unicode_data = new unsigned char[length]; - - // get the cmap table itself -#ifndef Q_OS_TEMP - bytes = GetFontData(hdc, CMAP, unicode_table, unicode_data, length); -#endif - if (bytes == GDI_ERROR) { - delete [] unicode_data; - return 0; - } - return unicode_data; -} - -void QFontEngine::getCMap() -{ - QT_WA({ - ttf = (bool)(tm.w.tmPitchAndFamily & TMPF_TRUETYPE); - } , { - ttf = (bool)(tm.a.tmPitchAndFamily & TMPF_TRUETYPE); - }); - HDC hdc = shared_dc; - SelectObject(hdc, hfont); - bool symb = false; - cmap = ttf ? ::getCMap(hdc, symb) : 0; - if (!cmap) { - ttf = false; - symb = false; - } - symbol = symb; - script_cache = 0; - // !Qt4 designToDevice = 1.; - // !Qt4 unitsPerEm = tm.w.tmHeight; - if(cmap) { - QT_WA( { - OUTLINETEXTMETRICW metric; - GetOutlineTextMetricsW(hdc, sizeof(OUTLINETEXTMETRICW), &metric); - // !Qt4 designToDevice = (float)metric.otmTextMetrics.tmHeight/(float)metric.otmEMSquare; - // !Qt4 unitsPerEm = metric.otmEMSquare; - }, { - OUTLINETEXTMETRICA metric; - GetOutlineTextMetricsA(hdc, sizeof(OUTLINETEXTMETRICA), &metric); - // !Qt4 designToDevice = (float)metric.otmTextMetrics.tmHeight/(float)metric.otmEMSquare; - // !Qt4 unitsPerEm = metric.otmEMSquare; - } ) - // !Qt4 kerning_pairs = getKerning(hdc, designToDevice); - } -} - -inline unsigned int getChar(const QChar *str, int &i, const int len) +static inline void tag_to_string(char *string, quint32 tag) { - unsigned int uc = str[i].unicode(); - if (uc >= 0xd800 && uc < 0xdc00 && i < len-1) { - uint low = str[i+1].unicode(); - if (low >= 0xdc00 && low < 0xe000) { - uc = (uc - 0xd800)*0x400 + (low - 0xdc00) + 0x10000; - ++i; - } - } - return uc; + string[0] = (tag >> 24)&0xff; + string[1] = (tag >> 16)&0xff; + string[2] = (tag >> 8)&0xff; + string[3] = tag&0xff; + string[4] = 0; } -//QFontEngineWin::QFontEngineWin(const QString &name, HFONT _hfont, bool stockFont, LOGFONT lf) -QFontEngineWin::QFontEngineWin(const char *name3, HDC shared_dc, HFONT _hfont, bool stockFont, LOGFONT lf) -{ - QString name(name3); // !Qt4 - _name = name; - - qDebug("regular windows font engine created: font='%s', size=%d", name, lf.lfHeight); - - hfont = _hfont; - logfont = lf; - SelectObject(shared_dc, hfont); - this->stockFont = stockFont; - - lbearing = SHRT_MIN; - rbearing = SHRT_MIN; - - BOOL res; - QT_WA({ - res = GetTextMetricsW(shared_dc, &tm.w); - } , { - res = GetTextMetricsA(shared_dc, &tm.a); - }); - if (!res) - qWarning("QFontEngineWin: GetTextMetrics failed"); // !Qt4 - - cache_cost = tm.w.tmHeight * tm.w.tmAveCharWidth * 2000; - getCMap(); - - useTextOutA = false; -#ifndef Q_OS_TEMP - // TextOutW doesn't work for symbol fonts on Windows 95! - // since we're using glyph indices we don't care for ttfs about this! - // !Qt4 if (QSysInfo::WindowsVersion == QSysInfo::WV_95 && !ttf && - // !Qt4 (_name == QLatin1String("Marlett") || _name == QLatin1String("Symbol") || - // !Qt4 _name == QLatin1String("Webdings") || _name == QLatin1String("Wingdings"))) - // !Qt4 useTextOutA = true; -#endif - memset(widthCache, 0, sizeof(widthCache)); - // !Qt4 designAdvances = 0; - // !Qt4 designAdvancesSize = 0; -} - - static quint32 getGlyphIndex(unsigned char *table, unsigned int unicode) { unsigned short format = getUShort(table); @@ -1095,164 +983,81 @@ return 0; } +static unsigned char *getCMap(HDC hdc, bool &symbol) +{ + const DWORD CMAP = MAKE_TAG('c', 'm', 'a', 'p'); + unsigned char header[8]; -// !Qt4 : -struct BackPortGlyph -{ - glyph_t glyph; - advance_t *advances; -}; + // get the CMAP header and the number of encoding tables + DWORD bytes = +#ifndef Q_OS_TEMP + GetFontData(hdc, CMAP, 0, &header, 4); +#else + 0; +#endif + if (bytes == GDI_ERROR) + return 0; + { + unsigned short version = getUShort(header); + if (version != 0) + return 0; + } -//int QFontEngine::getGlyphIndexes(const QChar *str, int numChars, QGlyphLayout *glyphs, bool mirrored) const // Qt4 -void QFontEngine::getGlyphIndexes( const QChar *str, int numChars, glyph_t *glyphs3, bool mirrored) const -{ - BackPortGlyph glyphs4; // !Qt4 - BackPortGlyph* glyphs = &glyphs4; // !Qt4 - glyphs->glyph = *glyphs3; // !Qt4 + unsigned short numTables = getUShort(header+2); + unsigned char *maps = new unsigned char[8*numTables]; + // get the encoding table and look for Unicode +#ifndef Q_OS_TEMP + bytes = GetFontData(hdc, CMAP, 4, maps, 8*numTables); +#endif + if (bytes == GDI_ERROR) + return 0; - //QGlyphLayout *g = glyphs; // !Qt4 - if (mirrored) { - if (symbol) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - glyphs->glyph = getGlyphIndex(cmap, uc); - if(!glyphs->glyph && uc < 0x100) - glyphs->glyph = getGlyphIndex(cmap, uc + 0xf000); - glyphs++; - } - } else if (ttf) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - glyphs->glyph = getGlyphIndex(cmap, ::mirroredChar(uc).unicode()); - glyphs++; - } - } else { - for (int i = 0; i < numChars; ++i) { - glyphs->glyph = ::mirroredChar(str->unicode()).unicode(); - glyphs++; - str++; - } - } - } else { - if (symbol) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - glyphs->glyph = getGlyphIndex(cmap, uc); - if(!glyphs->glyph && uc < 0x100) - glyphs->glyph = getGlyphIndex(cmap, uc + 0xf000); - glyphs++; - } - } else if (ttf) { - for (int i = 0; i < numChars; ++i) { - unsigned int uc = getChar(str, i, numChars); - glyphs->glyph = getGlyphIndex(cmap, uc); - glyphs++; - } - } else { - for (int i = 0; i < numChars; ++i) { - glyphs->glyph = str->unicode(); - glyphs++; - str++; + quint32 version = 0; + unsigned int unicode_table = 0; + for (int n = 0; n < numTables; n++) { + quint32 v = getUInt(maps + 8*n); + // accept both symbol and Unicode encodings. prefer unicode. + if(v == 0x00030001 || v == 0x00030000 || v == 0x0003000a) { + if (v > version) { + version = v; + unicode_table = getUInt(maps + 8*n + 4); } } } - - //return glyphs - g; // !QT4 -} - -#endif - - - - - -#if defined(QFONTENGINE_ENABLE_QT4CODE_2) && defined(QFONTENGINE_ENABLE_QT4CODE) - -enum ShaperFlag { - RightToLeft = 0x0001, - Mirrored = 0x0001, - DesignMetrics = 0x0002 -}; - - -//bool QFontEngineWin::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const -QFontEngine::Error QFontEngineWin::stringToCMap(const QChar *str, int len, glyph_t *glyphs3, advance_t *advances, int *nglyphs, bool mirrored) const -{ - BackPortGlyph glyphs4; - BackPortGlyph* glyphs = &glyphs4; - glyphs->glyph = *glyphs3; + symbol = version == 0x00030000; - if (*nglyphs < len) { - *nglyphs = len; - return false; + if (!unicode_table) { + // qDebug("no unicode table found"); + return 0; } - *nglyphs = getGlyphIndexes(str, len, glyphs, flags & QTextEngine::RightToLeft); + delete [] maps; - HDC hdc = shared_dc; - if (flags & QTextEngine::DesignMetrics) { - HGDIOBJ oldFont = 0; - float overhang = 0; - - int glyph_pos = 0; - for(register int i = 0; i < len; i++) { - bool surrogate = (str[i].unicode() >= 0xd800 && str[i].unicode() < 0xdc00 && i < len-1 - && str[i+1].unicode() >= 0xdc00 && str[i+1].unicode() < 0xe000); - unsigned int glyph = glyphs[glyph_pos].glyph; - if(int(glyph) >= designAdvancesSize) { - int newSize = (glyph + 256) >> 8 << 8; - designAdvances = (float *)realloc(designAdvances, newSize*sizeof(float)); - for(int i = designAdvancesSize; i < newSize; ++i) - designAdvances[i] = -1000000; - designAdvancesSize = newSize; - } - if(designAdvances[glyph] < -999999) { - if(!oldFont) - oldFont = selectDesignFont(&overhang); - SIZE size = {0, 0}; - GetTextExtentPoint32W(hdc, (wchar_t *)(str+i), surrogate ? 2 : 1, &size); - designAdvances[glyph] = size.cx*designToDevice; - } - glyphs[glyph_pos].advance.setX(designAdvances[glyph]); - glyphs[glyph_pos].advance.setY(0); - if (surrogate) - ++i; - ++glyph_pos; - } - if(oldFont) - DeleteObject(SelectObject(hdc, oldFont)); - } else { - HGDIOBJ oldFont = SelectObject(hdc, hfont); - int overhang = (QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based) ? tm.a.tmOverhang : 0; - int glyph_pos = 0; - for(register int i = 0; i < len; i++) { - bool surrogate = (str[i].unicode() >= 0xd800 && str[i].unicode() < 0xdc00 && i < len-1 - && str[i+1].unicode() >= 0xdc00 && str[i+1].unicode() < 0xe000); - unsigned int glyph = glyphs[i].glyph; - glyphs[glyph_pos].advance.setX((glyph < widthCacheSize) ? widthCache[glyph] : 0); - glyphs[glyph_pos].advance.setY(0); - // font-width cache failed - if (!glyphs[glyph_pos].advance.x()) { - SIZE size = {0, 0}; - GetTextExtentPoint32W(hdc, (wchar_t *)str + i, surrogate ? 2 : 1, &size); - size.cx -= overhang; - glyphs[glyph_pos].advance.setX(size.cx); - // if glyph's within cache range, store it for later - if (glyph < widthCacheSize && size.cx > 0 && size.cx < 0x100) - widthCache[glyph] = size.cx; - } - if (surrogate) - ++i; - ++glyph_pos; - } - SelectObject(hdc, oldFont); - } - return true; + // get the header of the unicode table +#ifndef Q_OS_TEMP + bytes = GetFontData(hdc, CMAP, unicode_table, &header, 8); +#endif + if (bytes == GDI_ERROR) + return 0; + unsigned short format = getUShort(header); + unsigned int length; + if(format < 8) + length = getUShort(header+2); + else + length = getUInt(header+4); + unsigned char *unicode_data = new unsigned char[length]; - return NoError; //!Qt4 + // get the cmap table itself +#ifndef Q_OS_TEMP + bytes = GetFontData(hdc, CMAP, unicode_table, unicode_data, length); +#endif + if (bytes == GDI_ERROR) { + delete [] unicode_data; + return 0; + } + return unicode_data; } -#endif \ No newline at end of file |
From: Christian E. <che...@us...> - 2005-10-25 19:42:23
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8226/src/kernel Modified Files: Tag: QT_WIN32_3_3_BRANCH qfont_win.cpp qfontdatabase_win.cpp qfontengine_win.cpp Log Message: shared_dc like qt4 Index: qfont_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfont_win.cpp,v retrieving revision 1.1.2.16.2.12 retrieving revision 1.1.2.16.2.13 diff -u -r1.1.2.16.2.12 -r1.1.2.16.2.13 --- qfont_win.cpp 24 Oct 2005 18:09:16 -0000 1.1.2.16.2.12 +++ qfont_win.cpp 25 Oct 2005 19:42:13 -0000 1.1.2.16.2.13 @@ -76,6 +76,8 @@ #define QT_CHECK_STATE +extern HDC shared_dc; // common dc for all fonts + // ### maybe move to qapplication_win QFont qt_LOGFONTtoQFont(LOGFONT& lf, bool /*scale*/) { @@ -98,8 +100,8 @@ qf.setWeight(weight); } int lfh = QABS(lf.lfHeight); - Q_ASSERT(qt_display_dc()); - qf.setPointSize(lfh * 72.0 / GetDeviceCaps(qt_display_dc(),LOGPIXELSY)); + Q_ASSERT(shared_dc); + qf.setPointSize(lfh * 72.0 / GetDeviceCaps(shared_dc,LOGPIXELSY)); qf.setUnderline(false); qf.setOverline(false); qf.setStrikeOut(false); @@ -183,21 +185,23 @@ */ void QFont::initialize() { - // create global font cache - if ( ! QFontCache::instance ) - ( void ) new QFontCache; - + if (QFontCache::instance) + return; + shared_dc = CreateCompatibleDC(qt_display_dc()); + if (!shared_dc) + qWarning("QFont::initialize: CreateCompatibleDC failed"); + new QFontCache(); } /*! \internal Internal function that cleans up the font system. */ -//333 void QFont::cleanup() { - // delete the global font cache delete QFontCache::instance; + DeleteDC(shared_dc); + shared_dc = 0; } /*! \internal Index: qfontdatabase_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfontdatabase_win.cpp,v retrieving revision 1.1.2.6.2.22 retrieving revision 1.1.2.6.2.23 diff -u -r1.1.2.6.2.22 -r1.1.2.6.2.23 --- qfontdatabase_win.cpp 24 Oct 2005 18:09:16 -0000 1.1.2.6.2.22 +++ qfontdatabase_win.cpp 25 Oct 2005 19:42:14 -0000 1.1.2.6.2.23 @@ -50,7 +50,8 @@ #include "qt_windows.h" -static HDC shared_dc; +extern HDC shared_dc; // common dc for all fonts +static HFONT stock_sysfont = 0; static QFontDatabasePrivate *privateDb() { @@ -603,13 +604,16 @@ static void initializeDb() { - shared_dc = GetDC( NULL ); - QFontDatabasePrivate *db = privateDb(); if (!db || db->count) return; populate_database(QString()); + // don't know why I have to do this... + for (int f = 0; f < db->count; f++) { + QtFontFamily *family = db->families[f]; + populate_database(family->name); + } #ifdef QFONTDATABASE_DEBUG // print the database for (int f = 0; f < db->count; f++) { @@ -643,9 +647,6 @@ // -------------------------------------------------------------------------------------- // font loader // -------------------------------------------------------------------------------------- - -static HFONT stock_sysfont = 0; - static inline HFONT systemFont() { if ( stock_sysfont == 0 ) @@ -670,7 +671,7 @@ LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); - HDC hdc = GetDC( NULL ); + HDC hdc = shared_dc; bool stockFont = false; Index: qfontengine_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfontengine_win.cpp,v retrieving revision 1.1.2.34 retrieving revision 1.1.2.35 diff -u -r1.1.2.34 -r1.1.2.35 --- qfontengine_win.cpp 24 Oct 2005 16:07:40 -0000 1.1.2.34 +++ qfontengine_win.cpp 25 Oct 2005 19:42:14 -0000 1.1.2.35 @@ -1,7 +1,4 @@ /**************************************************************************** -** $Id$ -** -** ??? ** ** Created : 20040828 ** @@ -59,7 +56,16 @@ //extern int qt_xlfd_encoding_id( const char *encoding ); -extern HDC shared_dc; +HDC shared_dc = 0; // common dc for all fonts +static HFONT stock_sysfont = 0; + +static inline HFONT systemFont() +{ + if (stock_sysfont == 0) + stock_sysfont = (HFONT)GetStockObject(SYSTEM_FONT); + return stock_sysfont; +} + extern void qt_draw_transformed_rect( QPainter *p, int x, int y, int w, int h, bool fill ); @@ -89,7 +95,12 @@ } QFontEngine::~QFontEngine() -{} +{ + // make sure we aren't by accident still selected + SelectObject(shared_dc, systemFont()); + if (cmap) + delete [] cmap; +} int QFontEngine::lineThickness() const { @@ -121,6 +132,7 @@ : _size( size ) { cache_cost = sizeof( QFontEngineBox ); + cmap = 0; } QFontEngineBox::~QFontEngineBox() @@ -286,6 +298,7 @@ { _name = nameIn; logfont = lfIn; + cmap = 0; if ( hdcIn ) { hdc = hdcIn; |
From: Christian E. <che...@us...> - 2005-10-24 18:10:24
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1592/src/kernel Added Files: Tag: QT_WIN32_3_3_BRANCH qfontdatabase_win_qt4.cpp Log Message: new qt4-code - moved into own file --- NEW FILE: qfontdatabase_win_qt4.cpp --- /**************************************************************************** ** $Id: qfontdatabase_win_qt4.cpp,v 1.1.2.1 2005/10/24 18:10:16 chehrlic Exp $ ** ** Implementation of platform specific QFontDatabase ** ** Created : 20030709 ** ** Copyright (C) 2003 Richard Lärkäng ** Copyright (C) 2003 Ivan de Jesus Deras Tabora ** Copyright (C) 2004 Ralf Habacker ** Copyright (C) 2004 Peter Kuemmel ** Copyright (C) 2004 Christian Ehrlicher ** ** This file is part of the kernel module of the Qt GUI Toolkit. ** ** This file may be distributed under the terms of the Q Public License ** as defined by Trolltech AS of Norway and appearing in the file ** LICENSE.QPL included in the packaging of this file. ** [...1198 lines suppressed...] QFontEngine *loadEngine(int script, const QFontPrivate *fp, const QFontDef &request, QtFontFamily *family, QtFontFoundry *foundry, QtFontStyle *style) { return Qt4::loadEngine(script, fp, request, family, foundry, &Qt4::QtFontStyle(*style)); } void QFontDatabase::createDatabase() { if ( db ) return ; initializeDb(); } #endif |