From 41e68f21b2e6b464149f0dd7a56d662118b53ba9 Mon Sep 17 00:00:00 2001 From: "em.colombo" Date: Fri, 28 Jun 2013 16:26:58 +0000 Subject: [PATCH] Commit source code for R6 rlease in trunk --- buddylistitemmodel.cpp | 9 +- buddylistitemmodel.h | 2 + dukto.icns | Bin 0 -> 157992 bytes dukto.pro | 13 +- dukto.rc | 16 +- duktoprotocol.cpp | 158 +++++++++++++++--- duktoprotocol.h | 8 + duktowindow.cpp | 4 +- guibehind.cpp | 137 ++++++++++++++- guibehind.h | 24 +++ main.cpp | 20 ++- platform.cpp | 155 ++++++++++++++++- platform.h | 11 +- qml.qrc | 6 +- qml/dukto/AboutPage.qml | 2 +- qml/dukto/ColorBox.qml | 5 +- qml/dukto/ColorPicker.qml | 64 +++++++ qml/dukto/ColorSlider.qml | 41 +++++ qml/dukto/ColorUtils.js | 22 +++ qml/dukto/Dukto.qml | 5 +- qml/dukto/DuktoOverlay.qml | 5 + qml/dukto/SBPicker.qml | 66 ++++++++ qml/dukto/SendPage.qml | 23 ++- qml/dukto/SettingsPage.qml | 98 +++++------ qmlapplicationviewer/qmlapplicationviewer.cpp | 51 +++--- qmlapplicationviewer/qmlapplicationviewer.h | 6 +- qmlapplicationviewer/qmlapplicationviewer.pri | 37 +++- qtsingleapplication/qtlocalpeer.cpp | 1 + settings.cpp | 14 ++ settings.h | 2 + theme.cpp | 30 +++- theme.h | 5 + updateschecker.cpp | 4 +- 33 files changed, 892 insertions(+), 152 deletions(-) create mode 100644 dukto.icns create mode 100644 qml/dukto/ColorPicker.qml create mode 100644 qml/dukto/ColorSlider.qml create mode 100644 qml/dukto/ColorUtils.js create mode 100644 qml/dukto/SBPicker.qml diff --git a/buddylistitemmodel.cpp b/buddylistitemmodel.cpp index 769991b..b15f2e4 100644 --- a/buddylistitemmodel.cpp +++ b/buddylistitemmodel.cpp @@ -116,7 +116,10 @@ void BuddyListItemModel::addBuddy(QString ip, qint16 port, QString username, QSt // Add elemento to the list if (add) { appendRow(it); - if (ip != "") mItemsMap.insert(ip, it); + if (ip != "") + mItemsMap.insert(ip, it); + else + mMeItem = it; } } @@ -177,3 +180,7 @@ QString BuddyListItemModel::fistBuddyIp() return this->index(2, 0).data(BuddyListItemModel::Ip).toString(); } +void BuddyListItemModel::updateMeElement() +{ + mMeItem->setData(Platform::getSystemUsername(), BuddyListItemModel::Username); +} diff --git a/buddylistitemmodel.h b/buddylistitemmodel.h index 2c5d077..04bc7d3 100644 --- a/buddylistitemmodel.h +++ b/buddylistitemmodel.h @@ -34,6 +34,7 @@ class BuddyListItemModel : public QStandardItemModel void addBuddy(Peer& peer); void removeBuddy(QString ip); void showSingleBack(int idx); + void updateMeElement(); QString buddyNameByIp(QString ip); QStandardItem* buddyByIp(QString ip); QString fistBuddyIp(); @@ -52,6 +53,7 @@ class BuddyListItemModel : public QStandardItemModel private: QHash mItemsMap; + QStandardItem* mMeItem; }; #endif // BUDDYLISTITEMMODEL_H diff --git a/dukto.icns b/dukto.icns new file mode 100644 index 0000000000000000000000000000000000000000..c0c5f5d6d496db4db0156f13a7edab71306f3f40 GIT binary patch literal 157992 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 De=b~x literal 0 HcmV?d00001 diff --git a/dukto.pro b/dukto.pro index 62e1d42..af031a5 100644 --- a/dukto.pro +++ b/dukto.pro @@ -1,7 +1,7 @@ # Add more folders to ship with the application, here -qml_folder.source = qml/dukto -qml_folder.target = qml -DEPLOYMENTFOLDERS = qml_folder +#qml_folder.source = qml/dukto +#qml_folder.target = qml +#DEPLOYMENTFOLDERS = qml_folder # Additional import path used to resolve QML modules in Creator's code model QML_IMPORT_PATH = @@ -9,8 +9,11 @@ QML_IMPORT_PATH = QT += network win32:RC_FILE = dukto.rc -win32:LIBS += libWs2_32 libole32 -win32:VERSION = 5.0.0 +win32:LIBS += libWs2_32 libole32 libNetapi32 + +mac:ICON = dukto.icns + +VERSION = 6.0.0 # Smart Installer package's UID # This UID is from the protected range and therefore the package will diff --git a/dukto.rc b/dukto.rc index 1d722f0..5d71044 100644 --- a/dukto.rc +++ b/dukto.rc @@ -2,20 +2,20 @@ IDI_ICON1 ICON DISCARDABLE "dukto.ico" #include -#define VER_FILEVERSION 4,9,8,0 -#define VER_FILEVERSION_STR "4.9.8.0\0" +#define VER_FILEVERSION 6,0,0,0 +#define VER_FILEVERSION_STR "6.0.0.0\0" -#define VER_PRODUCTVERSION 4,9,8,0 -#define VER_PRODUCTVERSION_STR "4.9\0" +#define VER_PRODUCTVERSION 6,0,0,0 +#define VER_PRODUCTVERSION_STR "6.0\0" #define VER_COMPANYNAME_STR "msec.it" -#define VER_FILEDESCRIPTION_STR "Dukto R5" -#define VER_INTERNALNAME_STR "Dukto R5" -#define VER_LEGALCOPYRIGHT_STR "Copyright © 2010 Emanuele Colombo" +#define VER_FILEDESCRIPTION_STR "Dukto R6" +#define VER_INTERNALNAME_STR "Dukto R6" +#define VER_LEGALCOPYRIGHT_STR "Copyright © 2013 Emanuele Colombo" #define VER_LEGALTRADEMARKS1_STR "All Rights Reserved" #define VER_LEGALTRADEMARKS2_STR VER_LEGALTRADEMARKS1_STR #define VER_ORIGINALFILENAME_STR "dukto.exe" -#define VER_PRODUCTNAME_STR "Dukto R5" +#define VER_PRODUCTNAME_STR "Dukto R6" #define VER_COMPANYDOMAIN_STR "msec.it" diff --git a/duktoprotocol.cpp b/duktoprotocol.cpp index 4652fb0..d9d7550 100644 --- a/duktoprotocol.cpp +++ b/duktoprotocol.cpp @@ -42,6 +42,7 @@ DuktoProtocol::DuktoProtocol() mIsSending = false; mIsReceiving = false; + mSendingScreen = false; } DuktoProtocol::~DuktoProtocol() @@ -144,10 +145,13 @@ void DuktoProtocol::newUdpData() { while (mSocket->hasPendingDatagrams()) { QByteArray datagram; - datagram.resize(mSocket->pendingDatagramSize()); + const int maxLength = 65536; // Theoretical max length in IPv4 + datagram.resize(maxLength); + // datagram.resize(mSocket->pendingDatagramSize()); QHostAddress sender; quint16 senderPort; - mSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); + int size = mSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); + datagram.resize(size); handleMessage(datagram, sender); } } @@ -162,7 +166,7 @@ void DuktoProtocol::handleMessage(QByteArray &data, QHostAddress &sender) case 0x02: // HELLO (unicast) data.remove(0, 1); if (data != getSystemSignature()) { - mPeers[sender.toString()] = Peer(sender, data, DEFAULT_UDP_PORT); + mPeers[sender.toString()] = Peer(sender, QString::fromUtf8(data), DEFAULT_UDP_PORT); if (msgtype == 0x01) sayHello(sender, DEFAULT_UDP_PORT); emit peerListAdded(mPeers[sender.toString()]); } @@ -179,7 +183,7 @@ void DuktoProtocol::handleMessage(QByteArray &data, QHostAddress &sender) qint16 port = *((qint16*) data.constData()); data.remove(0, 2); if (data != getSystemSignature()) { - mPeers[sender.toString()] = Peer(sender, data, port); + mPeers[sender.toString()] = Peer(sender, QString::fromUtf8(data), port); if (msgtype == 0x04) sayHello(sender, port); emit peerListAdded(mPeers[sender.toString()]); } @@ -233,6 +237,7 @@ void DuktoProtocol::newIncomingConnection() mRootFolderName = ""; mRootFolderRenamed = ""; mReceivingText = false; + mRecvStatus = FILENAME; // -- Lettura header generale -- // Numero entità da ricevere @@ -248,31 +253,38 @@ void DuktoProtocol::newIncomingConnection() // Processo di lettura principale void DuktoProtocol::readNewData() { - // Temporanea disconnessione per evitare di - // ricevere altri segnali mentre ne sto già gestendo uno - disconnect(mCurrentSocket, SIGNAL(readyRead()), this, SLOT(readNewData())); // Fino a che ci sono dati da leggere while (mCurrentSocket->bytesAvailable() > 0) { - // Verifico se devo leggere un header - if (mElementSize == -1) + // In base allo stato in cui mi trovo leggo quello che mi aspetto + switch (mRecvStatus) + { + + case FILENAME: { - // Lettura nome char c; while (1) { - bool ret = mCurrentSocket->getChar(&c); - if (!ret) return; - if (c == '\0') break; + int ret = mCurrentSocket->read(&c, sizeof(c)); + if (ret < 1) return; + if (c == '\0') + { + mRecvStatus = FILESIZE; + break; + } mPartialName.append(c); } - QString name = QString::fromUtf8(mPartialName); - mPartialName.clear(); + } + break; - // Lettura dimensioni + case FILESIZE: + { + if (!(mCurrentSocket->bytesAvailable() >= sizeof(qint64))) return; mCurrentSocket->read((char*) &mElementSize, sizeof(qint64)); mElementReceivedData = 0; + QString name = QString::fromUtf8(mPartialName); + mPartialName.clear(); // Se l'elemento corrente è una cartella, la creo e passo all'elemento successivo if (mElementSize == -1) @@ -301,8 +313,30 @@ void DuktoProtocol::readNewData() // Creo la cartella QDir dir("."); - dir.mkpath(name); - continue; + bool ret = dir.mkpath(name); + if (!ret) + { + emit receiveFileCancelled(); + // Chiusura socket + if (mCurrentSocket) + { + mCurrentSocket->disconnect(); + mCurrentSocket->disconnectFromHost(); + mCurrentSocket->close(); + mCurrentSocket->deleteLater(); + mCurrentSocket = NULL; + } + + // Rilascio memoria + delete mReceivedFiles; + mReceivedFiles = NULL; + + // Impostazione stato + mIsReceiving = false; + return; + } + mRecvStatus = FILENAME; + break; } // Potrebbe essere un invio di testo @@ -331,12 +365,37 @@ void DuktoProtocol::readNewData() } mReceivedFiles->append(name); mCurrentFile = new QFile(name); - mCurrentFile->open(QIODevice::WriteOnly); - mReceivingText = false; + bool ret = mCurrentFile->open(QIODevice::WriteOnly); + if (!ret) + { + emit receiveFileCancelled(); + // Chiusura socket + if (mCurrentSocket) + { + mCurrentSocket->disconnect(); + mCurrentSocket->disconnectFromHost(); + mCurrentSocket->close(); + mCurrentSocket->deleteLater(); + mCurrentSocket = NULL; } + // Rilascio memoria + delete mReceivedFiles; + mReceivedFiles = NULL; + + // Impostazione stato + mIsReceiving = false; + return; } + mReceivingText = false; + } + mRecvStatus = DATA; + } + break; + + case DATA: + { // Provo a leggere quanto mi serve per finire il file corrente // (o per svuotare il buffer dei dati ricevuti) qint64 s = (mCurrentSocket->bytesAvailable() > (mElementSize - mElementReceivedData)) @@ -363,16 +422,18 @@ void DuktoProtocol::readNewData() mCurrentFile->deleteLater(); mCurrentFile = NULL; } + mRecvStatus = FILENAME; } } + break; - // Riabilitazione segnale - connect(mCurrentSocket, SIGNAL(readyRead()), this, SLOT(readNewData()), Qt::DirectConnection); + } + } } void DuktoProtocol::closedConnectionTmp() { - QTimer::singleShot(100, this, SLOT(closedConnection())); + QTimer::singleShot(500, this, SLOT(closedConnection())); } // Chiusura della connessione TCP in ricezione @@ -471,6 +532,34 @@ void DuktoProtocol::sendText(QString ipDest, qint16 port, QString text) mCurrentSocket->connectToHost(ipDest, port); } +void DuktoProtocol::sendScreen(QString ipDest, qint16 port, QString path) +{ + // Check for default port + if (port == 0) port = DEFAULT_TCP_PORT; + + // Verifica altre attività in corso + if (mIsReceiving || mIsSending) return; + mIsSending = true; + + // File da inviare + QStringList files; + files.append(path); + mFilesToSend = expandTree(files); + mFileCounter = 0; + mSendingScreen = true; + + // Connessione al destinatario + mCurrentSocket = new QTcpSocket(this); + + // Gestione segnali + connect(mCurrentSocket, SIGNAL(connected()), this, SLOT(sendMetaData()), Qt::DirectConnection); + connect(mCurrentSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(sendConnectError(QAbstractSocket::SocketError)), Qt::DirectConnection); + connect(mCurrentSocket, SIGNAL(bytesWritten(qint64)), this, SLOT(sendData(qint64)), Qt::DirectConnection); + + // Connessione + mCurrentSocket->connectToHost(ipDest, port); +} + void DuktoProtocol::sendMetaData() { // Impostazione buffer di invio @@ -683,7 +772,18 @@ QByteArray DuktoProtocol::nextElementHeader() } // Nome elemento - QString name = fullname; + QString name; + + // Verifico se si tratta di un invio screen + if (mSendingScreen) { + + name = "Screenshot.jpg"; + mSendingScreen = false; + } + else + name = fullname; + + // Aggiunta nome file all'header name.replace(mBasePath + "/", ""); header.append(name.toUtf8() + '\0'); @@ -751,3 +851,13 @@ void DuktoProtocol::abortCurrentTransfer() closeCurrentTransfer(true); emit sendFileAborted(); } + +// Aggiorna il buddy name dell'utente locale +void DuktoProtocol::updateBuddyName() +{ + // Invio pacchetto di disconnessione + sayGoodbye(); + + // Invio pacchetto di annuncio con il nuovo nome + sayHello(QHostAddress::Broadcast, true); +} diff --git a/duktoprotocol.h b/duktoprotocol.h index 6b46a12..0dae853 100644 --- a/duktoprotocol.h +++ b/duktoprotocol.h @@ -45,8 +45,10 @@ class DuktoProtocol : public QObject inline QHash& getPeers() { return mPeers; } void sendFile(QString ipDest, qint16 port, QStringList files); void sendText(QString ipDest, qint16 port, QString text); + void sendScreen(QString ipDest, qint16 port, QString path); inline bool isBusy() { return mIsSending || mIsReceiving; } void abortCurrentTransfer(); + void updateBuddyName(); public slots: void newUdpData(); @@ -103,6 +105,7 @@ public slots: qint64 mSentBuffer; // Quantità di dati rimanenti nel buffer di trasmissione QString mBasePath; // Percorso base per l'invio di file e cartelle QString mTextToSend; // Testo da inviare (in caso di invio testuale) + bool mSendingScreen; // Flag che indica se si sta inviando uno screenshot // Receive members qint64 mElementsToReceiveCount; // Numero di elementi da ricevere @@ -115,6 +118,11 @@ public slots: QByteArray mTextToReceive; // Testo ricevuto in caso di invio testo bool mReceivingText; // Ricezione di testo in corso QByteArray mPartialName; // Nome prossimo file letto solo in parte + enum RecvStatus { + FILENAME, + FILESIZE, + DATA + } mRecvStatus; }; diff --git a/duktowindow.cpp b/duktowindow.cpp index 6577156..01dd015 100644 --- a/duktowindow.cpp +++ b/duktowindow.cpp @@ -31,10 +31,12 @@ DuktoWindow::DuktoWindow(QWidget *parent) : { // Configure window setAcceptDrops(true); - setWindowTitle("Dukto R5"); + setWindowTitle("Dukto"); +#ifndef Q_WS_S60 setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint); setMaximumSize(350, 5000); setMinimumSize(350, 500); +#endif setOrientation(QmlApplicationViewer::ScreenOrientationLockPortrait); // Taskbar integration with Win7 diff --git a/guibehind.cpp b/guibehind.cpp index 9e28afd..a4d0450 100644 --- a/guibehind.cpp +++ b/guibehind.cpp @@ -37,6 +37,21 @@ #include #include #include +#include +#include +#if defined(Q_WS_S60) +#define SYMBIAN +#endif + +#if defined(Q_WS_SIMULATOR) +#define SYMBIAN +#endif + +#ifdef SYMBIAN +#include +#include +#include +#endif #define NETWORK_PORT 4644 // 6742 @@ -112,7 +127,10 @@ GuiBehind::GuiBehind(DuktoWindow* view) : // Load GUI view->setSource(QUrl("qrc:/qml/dukto/Dukto.qml")); + //view->setSource(QUrl::fromLocalFile("c:/users/emanuele/documenti/dukto/qml/dukto/Dukto.qml")); +#ifndef Q_WS_S60 view->restoreGeometry(mSettings->windowGeometry()); +#endif // Start random rotate mShowBackTimer = new QTimer(this); @@ -267,6 +285,18 @@ void GuiBehind::changeDestinationFolder() QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (dirname == "") return; +#ifdef SYMBIAN + // Disable saving on C: + if (dirname.toUpper().startsWith("C:")) { + + setMessagePageTitle("Destination"); + setMessagePageText("Receiving data on C: is disabled for security reasons. Please select another destination folder."); + setMessagePageBackState("settings"); + emit gotoMessagePage(); + return; + } +#endif + // Set the new folder as current QDir::setCurrent(dirname); @@ -349,7 +379,17 @@ void GuiBehind::sendClipboardText() { // Get text to send QString text = mClipboard->text(); +#ifndef Q_WS_S60 if (text == "") return; +#else + if (text == "") { + setMessagePageTitle("Send"); + setMessagePageText("No text appears to be in the clipboard right now!"); + setMessagePageBackState("send"); + emit gotoMessagePage(); + return; + } +#endif // Send text startTransfer(text); @@ -365,6 +405,39 @@ void GuiBehind::sendText() startTransfer(text); } +void GuiBehind::sendScreen() +{ + // Minimize window + mView->setWindowState(Qt::WindowMinimized); + + QTimer::singleShot(500, this, SLOT(sendScreenStage2())); +} + +void GuiBehind::sendScreenStage2() { + + // Screenshot + QPixmap screen = QPixmap::grabWindow(QApplication::desktop()->winId()); + + // Restore window + mView->setWindowState(Qt::WindowActive); + + // Salvataggio screenshot in file + QTemporaryFile tempFile; + tempFile.setAutoRemove(false); + tempFile.open(); + mScreenTempPath = tempFile.fileName(); + tempFile.close(); + screen.save(mScreenTempPath, "JPG", 95); + + // Prepare file transfer + QString ip; + qint16 port; + if (!prepareStartTransfer(&ip, &port)) return; + + // Start screen transfer + mDuktoProtocol.sendScreen(ip, port, mScreenTempPath); +} + void GuiBehind::startTransfer(QStringList files) { // Prepare file transfer @@ -449,11 +522,23 @@ void GuiBehind::sendFileComplete(QStringList *files) // Show completed message setMessagePageTitle("Send"); +#ifndef Q_WS_S60 setMessagePageText("Your data has been sent to your buddy!\n\nDo you want to send other files to your buddy? Just drag and drop them here!"); +#else + setMessagePageText("Your data has been sent to your buddy!"); +#endif setMessagePageBackState("send"); mView->win7()->setProgressState(EcWin7::NoProgress); + // Check for temporary file to delete + if (mScreenTempPath != "") { + + QFile file(mScreenTempPath); + file.remove(); + mScreenTempPath = ""; + } + emit gotoMessagePage(); } @@ -492,6 +577,15 @@ void GuiBehind::sendFileError(int code) setMessagePageText("Sorry, an error has occurred while sending your data...\n\nError code: " + QString::number(code)); setMessagePageBackState("send"); mView->win7()->setProgressState(EcWin7::Error); + + // Check for temporary file to delete + if (mScreenTempPath != "") { + + QFile file(mScreenTempPath); + file.remove(); + mScreenTempPath = ""; + } + emit gotoMessagePage(); } @@ -499,7 +593,7 @@ void GuiBehind::sendFileError(int code) void GuiBehind::receiveFileCancelled() { setMessagePageTitle("Error"); - setMessagePageText("Your buddy has cancelled the curren transfer... The data you received could be incomplete or broken."); + setMessagePageText("An error has occurred during the transfer... The data you received could be incomplete or broken."); setMessagePageBackState(""); mView->win7()->setProgressState(EcWin7::Error); emit gotoMessagePage(); @@ -744,3 +838,44 @@ void GuiBehind::setShowUpdateBanner(bool show) mShowUpdateBanner = show; emit showUpdateBannerChanged(); } + +void GuiBehind::setBuddyName(QString name) +{ + mSettings->saveBuddyName(name.replace(' ', "")); + mDuktoProtocol.updateBuddyName(); + mBuddiesList.updateMeElement(); + emit buddyNameChanged(); +} + +QString GuiBehind::buddyName() +{ + return mSettings->buddyName(); +} + +#if defined(Q_WS_S60) +void GuiBehind::initConnection() +{ + // Connection + QNetworkConfigurationManager manager; + const bool canStartIAP = (manager.capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces); + QNetworkConfiguration cfg = manager.defaultConfiguration(); + if (!cfg.isValid() || (!canStartIAP && cfg.state() != QNetworkConfiguration::Active)) return; + mNetworkSession = new QNetworkSession(cfg, this); + connect(mNetworkSession, SIGNAL(opened()), this, SLOT(connectOpened())); + connect(mNetworkSession, SIGNAL(error(QNetworkSession::SessionError)), this, SLOT(connectError(QNetworkSession::SessionError))); + mNetworkSession->open(); +} + +void GuiBehind::connectOpened() +{ + mDuktoProtocol.sayHello(QHostAddress::Broadcast); +} + +void GuiBehind::connectError(QNetworkSession::SessionError error) +{ + QString msg = "Unable to connecto to the network (code " + QString::number(error) + ")."; + QMessageBox::critical(NULL, tr("Dukto"), msg); + exit(-1); +} + +#endif diff --git a/guibehind.h b/guibehind.h index b2c9ccd..f31ef6f 100644 --- a/guibehind.h +++ b/guibehind.h @@ -20,6 +20,9 @@ #define GUIBEHIND_H #include +#if defined(Q_WS_S60) +#include +#endif #include "buddylistitemmodel.h" #include "recentlistitemmodel.h" @@ -54,6 +57,7 @@ class GuiBehind : public QObject Q_PROPERTY(QString messagePageBackState READ messagePageBackState WRITE setMessagePageBackState NOTIFY messagePageBackStateChanged) Q_PROPERTY(bool showTermsOnStart READ showTermsOnStart WRITE setShowTermsOnStart NOTIFY showTermsOnStartChanged) Q_PROPERTY(bool showUpdateBanner READ showUpdateBanner WRITE setShowUpdateBanner NOTIFY showUpdateBannerChanged) + Q_PROPERTY(QString buddyName READ buddyName WRITE setBuddyName NOTIFY buddyNameChanged) public: explicit GuiBehind(DuktoWindow* view); @@ -95,6 +99,12 @@ class GuiBehind : public QObject void setShowTermsOnStart(bool show); bool showUpdateBanner(); void setShowUpdateBanner(bool show); + void setBuddyName(QString name); + QString buddyName(); + +#if defined(Q_WS_S60) + void initConnection(); +#endif protected: bool eventFilter(QObject *obj, QEvent *event); @@ -116,6 +126,7 @@ class GuiBehind : public QObject void messagePageBackStateChanged(); void showTermsOnStartChanged(); void showUpdateBannerChanged(); + void buddyNameChanged(); // Received by QML void transferStart(); @@ -131,6 +142,7 @@ public slots: void remoteDestinationAddressHandler(); void periodicHello(); void showUpdatesMessage(); + void sendScreenStage2(); // Called by Dukto protocol void peerListAdded(Peer peer); @@ -155,10 +167,16 @@ public slots: void sendFolder(); void sendClipboardText(); void sendText(); + void sendScreen(); void changeThemeColor(QString color); void resetProgressStatus(); void abortTransfer(); +#if defined(Q_WS_S60) + void connectOpened(); + void connectError(QNetworkSession::SessionError error); +#endif + private: DuktoWindow *mView; QTimer *mShowBackTimer; @@ -188,10 +206,16 @@ public slots: QString mMessagePageTitle; QString mMessagePageBackState; bool mShowUpdateBanner; + QString mScreenTempPath; bool prepareStartTransfer(QString *ip, qint16 *port); void startTransfer(QStringList files); void startTransfer(QString text); + +#if defined(Q_WS_S60) + QNetworkSession *mNetworkSession; +#endif + }; #endif // GUIBEHIND_H diff --git a/main.cpp b/main.cpp index 80bff66..ad7997f 100644 --- a/main.cpp +++ b/main.cpp @@ -22,7 +22,15 @@ #include "guibehind.h" #include "duktowindow.h" -#ifndef Q_WS_S60 +#if defined(Q_WS_S60) +#define SYMBIAN +#endif + +#if defined(Q_WS_SIMULATOR) +#define SYMBIAN +#endif + +#ifndef SYMBIAN #include "qtsingleapplication.h" #endif @@ -34,7 +42,7 @@ int main(int argc, char *argv[]) qputenv("QML_ENABLE_TEXT_IMAGE_CACHE", "true"); #endif -#if defined(Q_WS_S60) +#if defined(SYMBIAN) QApplication app(argc, argv); #else // Check for single running instance @@ -46,12 +54,18 @@ int main(int argc, char *argv[]) #endif DuktoWindow viewer; -#ifndef Q_WS_S60 +#ifndef SYMBIAN app.setActivationWindow(&viewer, true); #endif GuiBehind gb(&viewer); + +#ifndef Q_WS_S60 viewer.showExpanded(); app.installEventFilter(&gb); +#else + viewer.showFullScreen(); + gb.initConnection(); +#endif return app.exec(); } diff --git a/platform.cpp b/platform.cpp index e34d025..e5aef87 100644 --- a/platform.cpp +++ b/platform.cpp @@ -22,14 +22,86 @@ #include #include #include +#include + +#if defined(Q_WS_MAC) +#include +#include +#endif + +#if defined(Q_WS_WIN) +#include +#include + +typedef struct _USER_INFO_24 { + BOOL usri24_internet_identity; + DWORD usri24_flags; + LPWSTR usri24_internet_provider_name; + LPWSTR usri24_internet_principal_name; + PSID usri24_user_sid; +} USER_INFO_24, *PUSER_INFO_24, *LPUSER_INFO_24; + + +#endif + +#if defined(Q_WS_S60) +#define SYMBIAN +#include +QTM_USE_NAMESPACE +#endif + +#if defined(Q_WS_SIMULATOR) +#define SYMBIAN +#endif // Returns the system username QString Platform::getSystemUsername() { +#if defined(SYMBIAN) + // Get username from settings + Settings s; + return s.buddyName(); +#else + // Save in a static variable so that It's always ready static QString username = ""; if (username != "") return username; +#if defined (Q_WS_WIN) +/* QString un(getenv("USERNAME")); + if (un != ""){ + USER_INFO_23 *user_info; + wchar_t buff[1024]; + int len = un.toWCharArray(buff); + buff[len] = '\0'; + NET_API_STATUS ret = NetUserGetInfo(NULL, buff, 23, (BYTE**)&user_info); + if (ret == ERROR_INVALID_LEVEL) { + QMessageBox::information(NULL, "1", "NOT SUPPORTED", QMessageBox::Ok); + } + else if (ret == ERROR_SUCCESS) { +*/ /*QMessageBox::information(NULL, "1", "SUCCESSO", QMessageBox::Ok); + QString dato = QString::fromWCharArray(user_info->usri24_internet_provider_name); + QMessageBox::information(NULL, "1", "A" + dato, QMessageBox::Ok); + dato = QString::fromWCharArray(user_info->usri24_internet_principal_name); + QMessageBox::information(NULL, "1", "B" + dato, QMessageBox::Ok);*/ +/* QString dato = QString::fromWCharArray(user_info->usri23_full_name); + QMessageBox::information(NULL, "1", "A" + dato, QMessageBox::Ok); + dato = QString::fromWCharArray(user_info->usri23_name); + QMessageBox::information(NULL, "1", "B" + dato, QMessageBox::Ok); + } + else { + QMessageBox::information(NULL, "1", "ERRORE", QMessageBox::Ok); + } +*/ /*else { + QString fullname = QString::fromWCharArray(user_info->usri24_internet_principal_name); + QMessageBox::information(NULL, "1", fullname, QMessageBox::Ok); + }*/ + /*fullname = QString::fromWCharArray(user_info->usri23_full_name); + QMessageBox::information(NULL, "1", fullname, QMessageBox::Ok);*/ +// } + +#endif + // Looking for the username QString uname(getenv("USERNAME")); if (uname == "") uname = getenv("USER"); @@ -38,6 +110,7 @@ QString Platform::getSystemUsername() username = uname; return uname; +#endif } // Returns the hostname @@ -47,10 +120,19 @@ QString Platform::getHostname() static QString hostname = ""; if (hostname != "") return hostname; +#if defined(Q_WS_S60) + + QSystemDeviceInfo info; + hostname = info.model(); + +#else + // Get the hostname // (replace ".local" for MacOSX) hostname = QHostInfo::localHostName().replace(".local", ""); +#endif + return hostname; } @@ -76,6 +158,8 @@ QString Platform::getAvatarPath() #if defined(Q_WS_WIN) QString username = getSystemUsername().replace("\\", "+"); QString path = QString(getenv("LOCALAPPDATA")) + "\\Temp\\" + username + ".bmp"; + if (!QFile::exists(path)) + path = getWinTempAvatarPath(); if (!QFile::exists(path)) path = QString(getenv("PROGRAMDATA")) + "\\Microsoft\\User Account Pictures\\Guest.bmp"; if (!QFile::exists(path)) @@ -84,7 +168,7 @@ QString Platform::getAvatarPath() path = QString(getenv("ALLUSERSPROFILE")) + "\\" + QDir(getenv("APPDATA")).dirName() + "\\Microsoft\\User Account Pictures\\Guest.bmp"; return path; #elif defined(Q_WS_MAC) - return ""; + return getMacTempAvatarPath(); #elif defined(Q_WS_X11) return getLinuxAvatarPath(); #elif defined(Q_WS_S60) @@ -106,12 +190,15 @@ QString Platform::getDefaultPath() return QString(getenv("HOME")); #elif defined(Q_WS_S60) return "E:\\Dukto"; +#elif defined(Q_WS_SIMULATOR) + return "D:\\"; #else #error "Unknown default path for this platform" #endif } +#if defined(Q_WS_X11) // Special function for Linux QString Platform::getLinuxAvatarPath() { @@ -145,3 +232,69 @@ QString Platform::getLinuxAvatarPath() // Not found return ""; } +#endif + +#if defined(Q_WS_MAC) +static QTemporaryFile macAvatar; + +// Special function for OSX +QString Platform::getMacTempAvatarPath() +{ + // Get image data from system + QByteArray qdata; + CSIdentityQueryRef query = CSIdentityQueryCreateForCurrentUser(kCFAllocatorSystemDefault); + CFErrorRef error; + if (CSIdentityQueryExecute(query, kCSIdentityQueryGenerateUpdateEvents, &error)) { + CFArrayRef foundIds = CSIdentityQueryCopyResults(query); + if (CFArrayGetCount(foundIds) == 1) { + CSIdentityRef userId = (CSIdentityRef) CFArrayGetValueAtIndex(foundIds, 0); + CFDataRef data = CSIdentityGetImageData(userId); + qDebug() << CFDataGetLength(data); + qdata.resize(CFDataGetLength(data)); + CFDataGetBytes(data, CFRangeMake(0, CFDataGetLength(data)), (uint8*)qdata.data()); + } + } + CFRelease(query); + + // Save it to a temporary file + macAvatar.open(); + macAvatar.write(qdata); + macAvatar.close(); + return macAvatar.fileName(); +} +#endif + +#if defined(Q_WS_WIN) + +#include + +#define ARRAYSIZE(a) \ + ((sizeof(a) / sizeof(*(a))) / \ + static_cast(!(sizeof(a) % sizeof(*(a))))) + +typedef HRESULT (WINAPI*pfnSHGetUserPicturePathEx)( + LPCWSTR pwszUserOrPicName, + DWORD sguppFlags, + LPCWSTR pwszDesiredSrcExt, + LPWSTR pwszPicPath, + UINT picPathLen, + LPWSTR pwszSrcPath, + UINT srcLen +); + +// Special function for Windows 8 +QString Platform::getWinTempAvatarPath() +{ + // Get file path + CoInitialize(NULL); + HMODULE hMod = LoadLibrary(L"shell32.dll"); + pfnSHGetUserPicturePathEx picPathFn = (pfnSHGetUserPicturePathEx)GetProcAddress(hMod, (LPCSTR)810); + WCHAR picPath[500] = {0}, srcPath[500] = {0}; + HRESULT ret = picPathFn(NULL, 0, NULL, picPath, ARRAYSIZE(picPath), srcPath, ARRAYSIZE(srcPath)); + if (ret != S_OK) return "C:\\missing.bmp"; + QString result = QString::fromWCharArray(picPath, -1); + CoUninitialize(); + return result; +} + +#endif diff --git a/platform.h b/platform.h index 3b0ab63..fa9e916 100644 --- a/platform.h +++ b/platform.h @@ -19,6 +19,8 @@ #ifndef PLATFORM_H #define PLATFORM_H +#include + class QString; class Platform @@ -30,10 +32,15 @@ class Platform static QString getAvatarPath(); static QString getDefaultPath(); -private: +// private: Platform() {} +#if defined(Q_WS_X11) static QString getLinuxAvatarPath(); - +#elif defined(Q_WS_MAC) + static QString getMacTempAvatarPath(); +#elif defined(Q_WS_WIN) + static QString getWinTempAvatarPath(); +#endif }; #endif // PLATFORM_H diff --git a/qml.qrc b/qml.qrc index b711eae..96c30c3 100644 --- a/qml.qrc +++ b/qml.qrc @@ -38,7 +38,6 @@ qml/dukto/RecentText.png qml/dukto/SendPage.qml qml/dukto/SettingsPage.qml - qml/dukto/ShowIpIcon - Copia.png qml/dukto/ShowIpIcon.png qml/dukto/ShowTextPage.qml qml/dukto/TermsPage.qml @@ -48,5 +47,10 @@ qml/dukto/ToolBar.qml qml/dukto/UnknownLogo.png qml/dukto/WindowsLogo.png + qml/dukto/IosLogo.png + qml/dukto/SBPicker.qml + qml/dukto/ColorPicker.qml + qml/dukto/ColorSlider.qml + qml/dukto/ColorUtils.js diff --git a/qml/dukto/AboutPage.qml b/qml/dukto/AboutPage.qml index 61bb648..58a0495 100644 --- a/qml/dukto/AboutPage.qml +++ b/qml/dukto/AboutPage.qml @@ -40,7 +40,7 @@ Item { y: 80 x: 22 font.pixelSize: 100 - text: "Dukto R5" + text: "Dukto R6" color: theme.color4 } SmoothText { diff --git a/qml/dukto/ColorBox.qml b/qml/dukto/ColorBox.qml index 7ee7eee..54ee1de 100644 --- a/qml/dukto/ColorBox.qml +++ b/qml/dukto/ColorBox.qml @@ -19,12 +19,15 @@ import QtQuick 1.0 Rectangle { + id: root width: 32 height: 32 border.color: boxArea.containsMouse ? "#555555" : "#f0f0f0" border.width: boxArea.containsMouse ? 2 : 2 clip: true + signal clicked(color color) + Image { anchors.fill: parent source: "TileGradient.png" @@ -34,6 +37,6 @@ Rectangle { id: boxArea hoverEnabled: true anchors.fill: parent - onClicked: guiBehind.changeThemeColor(parent.color) + onClicked: root.clicked(parent.color) } } diff --git a/qml/dukto/ColorPicker.qml b/qml/dukto/ColorPicker.qml new file mode 100644 index 0000000..c65c30f --- /dev/null +++ b/qml/dukto/ColorPicker.qml @@ -0,0 +1,64 @@ +// A toy QML colorpicker control, by Ruslan Shestopalyuk +import QtQuick 1.0 +import "ColorUtils.js" as ColorUtils + +Rectangle { + id: colorPicker + property color colorValue: ColorUtils.hsba(hueSlider.value, sbPicker.saturation, + sbPicker.brightness, 1) + width: 144; height: 126 + color: "#FFFFFF" + + signal changed() + + function setColor(color) { + + var h = theme.getHue(color); + var s = theme.getSaturation(color); + var b = theme.getLightness(color); + + hueSlider.setValue(h); + sbPicker.setValue(s, b); + + this.changed(); + } + + Row { + anchors.fill: parent + spacing: 3 + + // saturation/brightness picker box + SBPicker { + id: sbPicker + hueColor : ColorUtils.hsba(hueSlider.value, 1.0, 1.0, 1.0, 1.0) + width: parent.height; height: parent.height + onChanged: { + colorPicker.changed(); + } + } + + // hue picking slider + Item { + width: 12; height: parent.height + Rectangle { + anchors.fill: parent + gradient: Gradient { + GradientStop { position: 1.0; color: "#FF0000" } + GradientStop { position: 0.85; color: "#FFFF00" } + GradientStop { position: 0.76; color: "#00FF00" } + GradientStop { position: 0.5; color: "#00FFFF" } + GradientStop { position: 0.33; color: "#0000FF" } + GradientStop { position: 0.16; color: "#FF00FF" } + GradientStop { position: 0.0; color: "#FF0000" } + } + border.color: "#f0f0f0" + border.width: 2 + } + ColorSlider { + id: hueSlider + anchors.fill: parent + onChanged: colorPicker.changed() + } + } + } +} diff --git a/qml/dukto/ColorSlider.qml b/qml/dukto/ColorSlider.qml new file mode 100644 index 0000000..64c9beb --- /dev/null +++ b/qml/dukto/ColorSlider.qml @@ -0,0 +1,41 @@ +// Vertical "slider" control used in colorpicker +import QtQuick 1.0 +Item { + id: root + property real value: (1 - pickerCursor.y/height) + width: 15; height: 300 + + signal changed() + + function setValue(value) { + pickerCursor.y = (1 - value) * height; + } + + Item { + id: pickerCursor + width: parent.width + Rectangle { + x: -3; y: -height*0.5 + width: parent.width + 4; height: 7 + border.color: "black"; border.width: 1 + color: "transparent" + Rectangle { + anchors.fill: parent; anchors.margins: 2 + border.color: "white"; border.width: 1 + color: "transparent" + } + } + } + MouseArea { + anchors.fill: parent + function handleMouse(mouse) { + if (mouse.buttons & Qt.LeftButton) { + pickerCursor.y = Math.max(0, Math.min(height, mouse.y)) + root.changed(); + } + } + onPositionChanged: handleMouse(mouse) + onPressed: handleMouse(mouse) + } +} + diff --git a/qml/dukto/ColorUtils.js b/qml/dukto/ColorUtils.js new file mode 100644 index 0000000..ab1a862 --- /dev/null +++ b/qml/dukto/ColorUtils.js @@ -0,0 +1,22 @@ +// Color manipulation utilities + +// creates color value from hue, saturation, brightness, alpha +function hsba(h, s, b, a) { + + var lightness = (2 - s)*b; + var satHSL = s*b/((lightness <= 1) ? lightness : 2 - lightness); + lightness /= 2; + + return Qt.hsla(h, satHSL, lightness, a); +} + +// creates a full color string from color value and alpha[0..1], e.g. "#FF00FF00" +function fullColorString(clr, a) { + return "#" + ((Math.ceil(a*255) + 256).toString(16).substr(1, 2) + + clr.toString().substr(1, 6)).toUpperCase(); +} + +// extracts integer color channel value [0..255] from color value +function getChannelStr(clr, channelIdx) { + return parseInt(clr.toString().substr(channelIdx*2 + 1, 2), 16); +} diff --git a/qml/dukto/Dukto.qml b/qml/dukto/Dukto.qml index 2dc41ee..31594ab 100644 --- a/qml/dukto/Dukto.qml +++ b/qml/dukto/Dukto.qml @@ -55,7 +55,10 @@ Rectangle { id: duktoInner anchors.fill: parent onShowIpList: duktoOverlay.state = "ip" - onShowSettings: duktoOverlay.state = "settings" + onShowSettings: { + duktoOverlay.refreshSettingsColor(); + duktoOverlay.state = "settings"; + } } UpdatesBox { diff --git a/qml/dukto/DuktoOverlay.qml b/qml/dukto/DuktoOverlay.qml index e7563d7..16fb058 100644 --- a/qml/dukto/DuktoOverlay.qml +++ b/qml/dukto/DuktoOverlay.qml @@ -22,6 +22,11 @@ Rectangle { color: "#00000000" state: guiBehind.showTermsOnStart ? "termspage" : "" + function refreshSettingsColor() { + + settingsPage.refreshColor(); + } + Rectangle { id: disabler anchors.fill: parent diff --git a/qml/dukto/SBPicker.qml b/qml/dukto/SBPicker.qml new file mode 100644 index 0000000..17f7400 --- /dev/null +++ b/qml/dukto/SBPicker.qml @@ -0,0 +1,66 @@ +// Saturation/brightness picking box +import QtQuick 1.0 + +Item { + id: root + property color hueColor : "blue" + property real saturation : pickerCursor.x/width + property real brightness : 1 - pickerCursor.y/height + + signal changed() + + function setValue(sat, brigh) { + pickerCursor.x = sat * width; + pickerCursor.y = (1 - brigh) * height; + } + + // width: 126; height: 126 + clip: true + Rectangle { + anchors.fill: parent; + rotation: -90 + gradient: Gradient { + GradientStop { position: 0.0; color: "#FFFFFF" } + GradientStop { position: 1.0; color: root.hueColor } + } + border.color: "#f0f0f0" + border.width: 2 + } + Rectangle { + anchors.fill: parent + gradient: Gradient { + GradientStop { position: 1.0; color: "#FF000000" } + GradientStop { position: 0.0; color: "#00000000" } + } + } + Item { + id: pickerCursor + property int r : 8 + Rectangle { + x: -parent.r; y: -parent.r + width: parent.r*2; height: parent.r*2 + radius: parent.r + border.color: "black"; border.width: 2 + color: "transparent" + Rectangle { + anchors.fill: parent; anchors.margins: 2; + border.color: "white"; border.width: 2 + radius: width/2 + color: "transparent" + } + } + } + MouseArea { + anchors.fill: parent + function handleMouse(mouse) { + if (mouse.buttons & Qt.LeftButton) { + pickerCursor.x = Math.max(0, Math.min(width, mouse.x)); + pickerCursor.y = Math.max(0, Math.min(height, mouse.y)); + root.changed(); + } + } + onPositionChanged: handleMouse(mouse) + onPressed: handleMouse(mouse) + } +} + diff --git a/qml/dukto/SendPage.qml b/qml/dukto/SendPage.qml index 6bde2e6..8050b48 100644 --- a/qml/dukto/SendPage.qml +++ b/qml/dukto/SendPage.qml @@ -125,7 +125,7 @@ Rectangle { id: labelAction anchors.left: localBuddy.left anchors.top: localBuddy.bottom - anchors.topMargin: 45 + anchors.topMargin: 35 font.pixelSize: 17 color: theme.color4 text: "What do you want to do?" @@ -134,7 +134,7 @@ Rectangle { ButtonDark { id: buttonSendText anchors.top: labelAction.bottom - anchors.topMargin: 20 + anchors.topMargin: 15 anchors.left: localBuddy.left width: 300 buttonEnabled: guiBehind.currentTransferBuddy !== "" @@ -145,7 +145,7 @@ Rectangle { ButtonDark { id: buttonSendClipboardText anchors.top: buttonSendText.bottom - anchors.topMargin: 20 + anchors.topMargin: 15 anchors.left: localBuddy.left width: 300 label: "Send text from clipboard" @@ -156,7 +156,7 @@ Rectangle { ButtonDark { id: buttonSendFiles anchors.top: buttonSendClipboardText.bottom - anchors.topMargin: 20 + anchors.topMargin: 15 anchors.left: localBuddy.left width: 300 buttonEnabled: guiBehind.currentTransferBuddy !== "" @@ -167,14 +167,25 @@ Rectangle { ButtonDark { id: buttonSendFolder anchors.top: buttonSendFiles.bottom - anchors.topMargin: 20 + anchors.topMargin: 15 anchors.left: localBuddy.left width: 300 buttonEnabled: guiBehind.currentTransferBuddy !== "" label: "Send a folder" onClicked: guiBehind.sendFolder() } - +/* + ButtonDark { + id: buttonSendScreen + anchors.top: buttonSendFolder.bottom + anchors.topMargin: 15 + anchors.left: localBuddy.left + width: 300 + buttonEnabled: guiBehind.currentTransferBuddy !== "" + label: "Send a screenshot" + onClicked: guiBehind.sendScreen() + } +*/ SText { id: labelDrop anchors.left: localBuddy.left diff --git a/qml/dukto/SettingsPage.qml b/qml/dukto/SettingsPage.qml index b233217..2f4c648 100644 --- a/qml/dukto/SettingsPage.qml +++ b/qml/dukto/SettingsPage.qml @@ -24,6 +24,11 @@ Rectangle { signal back() + function refreshColor() { + + picker.setColor(theme.color2); + } + MouseArea { anchors.fill: parent } @@ -114,12 +119,24 @@ Rectangle { color: theme.color5 } + ColorPicker { + id: picker + anchors.top: labelColor.bottom + anchors.topMargin: 8 + anchors.left: labelColor.left + onChanged: { + guiBehind.changeThemeColor(colorValue); + } + } + ColorBox { id: cbox1 anchors.top: labelColor.bottom anchors.topMargin: 8 - anchors.left: labelColor.left + anchors.left: picker.right + anchors.leftMargin: 20 color: "#248B00" + onClicked: picker.setColor(color) } ColorBox { @@ -128,6 +145,7 @@ Rectangle { anchors.left: cbox1.right anchors.leftMargin: 15 color: "#A80000" + onClicked: picker.setColor(color) } ColorBox { @@ -136,94 +154,60 @@ Rectangle { anchors.left: cbox2.right anchors.leftMargin: 15 color: "#3A6CBC" + onClicked: picker.setColor(color) } ColorBox { id: cbox4 - anchors.top: cbox1.top - anchors.left: cbox3.right - anchors.leftMargin: 15 + anchors.top: cbox1.bottom + anchors.topMargin: 15 + anchors.left: cbox1.left color: "#2e3436" // "#704214" + onClicked: picker.setColor(color) } ColorBox { id: cbox5 anchors.left: cbox4.right - anchors.top: cbox1.top + anchors.top: cbox4.top anchors.leftMargin: 15 color: "#B77994" + onClicked: picker.setColor(color) } ColorBox { id: cbox6 - anchors.top: cbox1.top + anchors.top: cbox4.top anchors.left: cbox5.right anchors.leftMargin: 15 color: "#5B2F42" + onClicked: picker.setColor(color) } ColorBox { id: cbox7 - anchors.top: cbox1.top - anchors.left: cbox6.right - anchors.leftMargin: 15 + anchors.top: cbox4.bottom + anchors.topMargin: 15 + anchors.left: cbox4.left color: "#353B56" + onClicked: picker.setColor(color) } -/* + ColorBox { id: cbox8 - anchors.top: cbox1.bottom - anchors.topMargin: 8 - anchors.left: labelColor.left - color: "#248B00" + anchors.top: cbox7.top + anchors.left: cbox7.right + anchors.leftMargin: 15 + color: "#FB8504" + onClicked: picker.setColor(color) } ColorBox { id: cbox9 - anchors.top: cbox8.top + anchors.top: cbox7.top anchors.left: cbox8.right anchors.leftMargin: 15 - color: "#A80000" - } - - ColorBox { - id: cbox10 - anchors.top: cbox8.top - anchors.left: cbox9.right - anchors.leftMargin: 15 - color: "#3A6CBC" - } - - ColorBox { - id: cbox11 - anchors.top: cbox8.top - anchors.left: cbox10.right - anchors.leftMargin: 15 - color: "#704214" - } - - ColorBox { - id: cbox12 - anchors.top: cbox8.top - anchors.left: cbox11.right - anchors.leftMargin: 15 - color: "#B77994" - } - - ColorBox { - id: cbox13 - anchors.top: cbox8.top - anchors.left: cbox12.right - anchors.leftMargin: 15 - color: "#5B2F42" - } - - ColorBox { - id: cbox14 - anchors.top: cbox8.top - anchors.left: cbox13.right - anchors.leftMargin: 15 - color: "#2e3436" + color: "#6D0D71" + onClicked: picker.setColor(color) } - */ } diff --git a/qmlapplicationviewer/qmlapplicationviewer.cpp b/qmlapplicationviewer/qmlapplicationviewer.cpp index 1cfc3f6..2f78b24 100644 --- a/qmlapplicationviewer/qmlapplicationviewer.cpp +++ b/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -1,4 +1,4 @@ -// checksum 0xee24 version 0x70013 +// checksum 0xbd34 version 0x80016 /* This file was generated by the Qt Quick Application wizard of Qt Creator. QmlApplicationViewer is a convenience class containing mobile device specific @@ -10,12 +10,12 @@ #include "qmlapplicationviewer.h" -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include // MEEGO_EDITION_HARMATTAN @@ -57,17 +57,22 @@ class QmlApplicationViewerPrivate QString QmlApplicationViewerPrivate::adjustPath(const QString &path) { -#ifdef Q_OS_UNIX #ifdef Q_OS_MAC if (!QDir::isAbsolutePath(path)) return QString::fromLatin1("%1/../Resources/%2") .arg(QCoreApplication::applicationDirPath(), path); -#else - const QString pathInInstallDir = +#elif defined(Q_OS_QNX) + if (!QDir::isAbsolutePath(path)) + return QString::fromLatin1("app/native/%1").arg(path); +#elif !defined(Q_OS_ANDROID) + QString pathInInstallDir = QString::fromLatin1("%1/../%2").arg(QCoreApplication::applicationDirPath(), path); if (QFileInfo(pathInInstallDir).exists()) return pathInInstallDir; -#endif + pathInInstallDir = + QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(), path); + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; #endif return path; } @@ -78,6 +83,7 @@ QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) { connect(engine(), SIGNAL(quit()), SLOT(close())); setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in #if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 #if !defined(NO_JSDEBUGGER) @@ -102,7 +108,11 @@ QmlApplicationViewer *QmlApplicationViewer::create() void QmlApplicationViewer::setMainQmlFile(const QString &file) { d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); +#ifdef Q_OS_ANDROID + setSource(QUrl(QLatin1String("assets:/")+d->mainQmlFile)); +#else setSource(QUrl::fromLocalFile(d->mainQmlFile)); +#endif } void QmlApplicationViewer::addImportPath(const QString &path) @@ -112,17 +122,7 @@ void QmlApplicationViewer::addImportPath(const QString &path) void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) { -#if defined(Q_OS_SYMBIAN) - // If the version of Qt on the device is < 4.7.2, that attribute won't work - if (orientation != ScreenOrientationAuto) { - const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.')); - if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) { - qWarning("Screen orientation locking only supported with Qt 4.7.2 and above"); - return; - } - } -#endif // Q_OS_SYMBIAN - +#if QT_VERSION < 0x050000 Qt::WidgetAttribute attribute; switch (orientation) { #if QT_VERSION < 0x040702 @@ -151,13 +151,16 @@ void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) #endif // QT_VERSION < 0x040702 }; setAttribute(attribute, true); +#else // QT_VERSION < 0x050000 + Q_UNUSED(orientation) +#endif // QT_VERSION < 0x050000 } void QmlApplicationViewer::showExpanded() { -#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR) +#if defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR) showFullScreen(); -#elif defined(Q_WS_MAEMO_5) +#elif defined(Q_WS_MAEMO_5) || defined(Q_OS_QNX) showMaximized(); #else show(); diff --git a/qmlapplicationviewer/qmlapplicationviewer.h b/qmlapplicationviewer/qmlapplicationviewer.h index 66be032..d0d3e77 100644 --- a/qmlapplicationviewer/qmlapplicationviewer.h +++ b/qmlapplicationviewer/qmlapplicationviewer.h @@ -1,4 +1,4 @@ -// checksum 0x898f version 0x70013 +// checksum 0xc67a version 0x80016 /* This file was generated by the Qt Quick Application wizard of Qt Creator. QmlApplicationViewer is a convenience class containing mobile device specific @@ -11,7 +11,7 @@ #ifndef QMLAPPLICATIONVIEWER_H #define QMLAPPLICATIONVIEWER_H -#include +#include class QmlApplicationViewer : public QDeclarativeView { @@ -32,7 +32,7 @@ class QmlApplicationViewer : public QDeclarativeView void setMainQmlFile(const QString &file); void addImportPath(const QString &path); - // Note that this will only have an effect on Symbian and Fremantle. + // Note that this will only have an effect on Fremantle. void setOrientation(ScreenOrientation orientation); void showExpanded(); diff --git a/qmlapplicationviewer/qmlapplicationviewer.pri b/qmlapplicationviewer/qmlapplicationviewer.pri index 25227e1..7c42aa1 100644 --- a/qmlapplicationviewer/qmlapplicationviewer.pri +++ b/qmlapplicationviewer/qmlapplicationviewer.pri @@ -1,4 +1,4 @@ -# checksum 0x5b42 version 0x70013 +# checksum 0x77b version 0x80016 # This file was generated by the Qt Quick Application wizard of Qt Creator. # The code below adds the QmlApplicationViewer to the project and handles the # activation of QML debugging. @@ -22,7 +22,7 @@ contains(CONFIG,qdeclarative-boostable):contains(MEEGO_EDITION,harmattan) { DEFINES += HARMATTAN_BOOSTER } # This file was generated by an application wizard of Qt Creator. -# The code below handles deployment to Symbian and Maemo, aswell as copying +# The code below handles deployment to Android and Maemo, aswell as copying # of the application data to shadow build directories on desktop. # It is recommended not to modify this file, since newer versions of Qt Creator # may offer an updated version of it. @@ -30,7 +30,11 @@ contains(CONFIG,qdeclarative-boostable):contains(MEEGO_EDITION,harmattan) { defineTest(qtcAddDeployment) { for(deploymentfolder, DEPLOYMENTFOLDERS) { item = item$${deploymentfolder} - itemsources = $${item}.sources + greaterThan(QT_MAJOR_VERSION, 4) { + itemsources = $${item}.files + } else { + itemsources = $${item}.sources + } $$itemsources = $$eval($${deploymentfolder}.source) itempath = $${item}.path $$itempath= $$eval($${deploymentfolder}.target) @@ -41,9 +45,28 @@ for(deploymentfolder, DEPLOYMENTFOLDERS) { MAINPROFILEPWD = $$PWD -symbian { - isEmpty(ICON):exists($${TARGET}.svg):ICON = $${TARGET}.svg - isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +android { + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = /assets/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + x86 { + target.path = /libs/x86 + } else: armeabi-v7a { + target.path = /libs/armeabi-v7a + } else { + target.path = /libs/armeabi + } + + export(target.path) + INSTALLS += target } else:win32 { copyCommand = for(deploymentfolder, DEPLOYMENTFOLDERS) { @@ -141,8 +164,6 @@ symbian { export (ICON) export (INSTALLS) export (DEPLOYMENT) -export (TARGET.EPOCHEAPSIZE) -export (TARGET.CAPABILITY) export (LIBS) export (QMAKE_EXTRA_TARGETS) } diff --git a/qtsingleapplication/qtlocalpeer.cpp b/qtsingleapplication/qtlocalpeer.cpp index 1d494a7..8cd52ee 100644 --- a/qtsingleapplication/qtlocalpeer.cpp +++ b/qtsingleapplication/qtlocalpeer.cpp @@ -57,6 +57,7 @@ static PProcessIdToSessionId pProcessIdToSessionId = 0; #endif #if defined(Q_OS_UNIX) #include +#include #endif namespace QtLP_Private { diff --git a/settings.cpp b/settings.cpp index c8b3ad9..6386591 100644 --- a/settings.cpp +++ b/settings.cpp @@ -84,3 +84,17 @@ bool Settings::showTermsOnStart() { return mSettings.value("R5/ShowTermsOnStart", true).toBool(); } + +QString Settings::buddyName() +{ + // Retrieve the last saved name (if any) + return mSettings.value("BuddyName", "User").toString(); + +} + +void Settings::saveBuddyName(QString name) +{ + // Save the new name + mSettings.setValue("BuddyName", name); + mSettings.sync(); +} diff --git a/settings.h b/settings.h index 39627f0..232774c 100644 --- a/settings.h +++ b/settings.h @@ -35,6 +35,8 @@ class Settings : public QObject QString themeColor(); void saveShowTermsOnStart(bool show); bool showTermsOnStart(); + QString buddyName(); + void saveBuddyName(QString name); signals: diff --git a/theme.cpp b/theme.cpp index 0f6aa23..24b2902 100644 --- a/theme.cpp +++ b/theme.cpp @@ -35,12 +35,36 @@ void Theme::setThemeColor(QString color) { QColor c; c.setNamedColor(color); - c.setRed(c.red() + 40); - c.setGreen(c.green() + 40); - c.setBlue(c.blue() + 40); + c.setRed(qMin(c.red() + 40, 255)); + c.setGreen(qMin(c.green() + 40, 255)); + c.setBlue(qMin(c.blue() + 40, 255)); mColor2 = color; mColor3 = c.name(); emit color2Changed(); emit color3Changed(); } + +float Theme::getHue(QString color) { + + QColor c; + c.setNamedColor(color); + QColor converted = c.toHsv(); + return converted.hsvHueF(); +} + +float Theme::getSaturation(QString color) { + + QColor c; + c.setNamedColor(color); + QColor converted = c.toHsv(); + return converted.hsvSaturationF(); +} + +float Theme::getLightness(QString color) { + + QColor c; + c.setNamedColor(color); + QColor converted = c.toHsv(); + return converted.valueF(); +} diff --git a/theme.h b/theme.h index bf87c6a..549b2b1 100644 --- a/theme.h +++ b/theme.h @@ -61,6 +61,11 @@ class Theme : public QObject void color8Changed(); void color9Changed(); +public slots: + float getHue(QString color); + float getSaturation(QString color); + float getLightness(QString color); + private: QString mColor1; QString mColor2; diff --git a/updateschecker.cpp b/updateschecker.cpp index 4083bdd..e5318b2 100644 --- a/updateschecker.cpp +++ b/updateschecker.cpp @@ -46,8 +46,10 @@ void UpdatesChecker::run() osver = QString::number(QSysInfo::WindowsVersion); #elif defined(Q_WS_MAC) osver = QString::number(QSysInfo::MacintoshVersion); +#elif defined(Q_WS_S60) + osver = QString::number(QSysInfo::symbianVersion()); #endif - QString ver = "5.0"; + QString ver = "6.0"; QString locale = QLocale::system().name(); // Send check request