@@ -1,4 +1,4 | |||||
1 | integrated_build:{ |
|
1 | local_build:{ | |
2 | INCLUDEPATH += $$CHART_BUILD_PUBLIC_HEADER_DIR |
|
2 | INCLUDEPATH += $$CHART_BUILD_PUBLIC_HEADER_DIR | |
3 |
|
3 | |||
4 | !win32: { |
|
4 | !win32: { |
@@ -1,15 +1,20 | |||||
1 |
!include(co |
|
1 | !include(config.pri) { | |
2 |
error(' |
|
2 | error('Missing config.pri') | |
3 | } |
|
3 | } | |
4 |
|
4 | |||
5 | TEMPLATE = subdirs |
|
5 | TEMPLATE = subdirs | |
6 |
SUBDIRS |
|
6 | SUBDIRS = src qmlplugin examples demos test | |
7 |
|
7 | |||
8 | integrated_build:{ |
|
8 | local_build:{ | |
9 |
message('Configured for |
|
9 | message('Configured for local build against local libs...') | |
|
10 | message('You can run "make" to build qchart library, examples and demos...') | |||
10 | } else { |
|
11 | } else { | |
11 | message('Running build aginst system libs...') |
|
12 | message('Running build aginst system libs...') | |
12 | message('Please build example test and qmlplugin after installing library.') |
|
13 | message('Bulding only charts library...') | |
|
14 | message('You can run "make install" to build and install charts.') | |||
|
15 | message('Afterwards you can run "cd examples; qmake ; make " to build examples.') | |||
|
16 | message('Run qmake CONFIG+=local_build' to build everything at once.) | |||
|
17 | SUBDIRS = src | |||
13 | } |
|
18 | } | |
14 |
|
19 | |||
15 | CONFIG += ordered |
|
20 | CONFIG += ordered |
@@ -1,5 +1,5 | |||||
1 | CONFIG+=integrated_build #remove if you want to build against installed libs |
|
|||
2 |
|
1 | |||
|
2 | #check if shadow build | |||
3 | !contains($${PWD}, $${OUT_PWD}){ |
|
3 | !contains($${PWD}, $${OUT_PWD}){ | |
4 | search = "$$PWD:::" |
|
4 | search = "$$PWD:::" | |
5 | temp = $$split(search,"/") |
|
5 | temp = $$split(search,"/") | |
@@ -10,6 +10,7 CONFIG+=integrated_build #remove if you want to build against installed libs | |||||
10 | temp = $$first(temp) |
|
10 | temp = $$first(temp) | |
11 | path = "$${path}$${temp}" |
|
11 | path = "$${path}$${temp}" | |
12 |
SHADOW=$$path |
|
12 | SHADOW=$$path | |
|
13 | CONFIG-=developer_build | |||
13 | }else{ |
|
14 | }else{ | |
14 | SHADOW=$$PWD |
|
15 | SHADOW=$$PWD | |
15 | } |
|
16 | } | |
@@ -42,3 +43,5 mac: { | |||||
42 | QMAKE_CXXFLAGS *= -mmacosx-version-min=10.5 |
|
43 | QMAKE_CXXFLAGS *= -mmacosx-version-min=10.5 | |
43 | QMAKE_LFLAGS *= -mmacosx-version-min=10.5 |
|
44 | QMAKE_LFLAGS *= -mmacosx-version-min=10.5 | |
44 | } |
|
45 | } | |
|
46 | ||||
|
47 | developer_build: DEFINES+=DEVELOPER_BUILD No newline at end of file |
@@ -1,9 +1,9 | |||||
1 |
!include( ../co |
|
1 | !include( ../config.pri ) { | |
2 |
error( "Couldn't find the co |
|
2 | error( "Couldn't find the config.pri file!" ) | |
3 | } |
|
3 | } | |
4 |
|
4 | |||
5 |
!include( ../ |
|
5 | !include( ../build.pri ) { | |
6 |
error( "Couldn't find the |
|
6 | error( "Couldn't find the build.pri file !") | |
7 | } |
|
7 | } | |
8 |
|
8 | |||
9 | DESTDIR = $$CHART_BUILD_BIN_DIR |
|
9 | DESTDIR = $$CHART_BUILD_BIN_DIR |
@@ -1,9 +1,9 | |||||
1 |
!include( ../co |
|
1 | !include( ../config.pri ) { | |
2 |
error( "Couldn't find the co |
|
2 | error( "Couldn't find the config.pri file!" ) | |
3 | } |
|
3 | } | |
4 |
|
4 | |||
5 |
!include( ../ |
|
5 | !include( ../build.pri ) { | |
6 |
error( "Couldn't find the |
|
6 | error( "Couldn't find the build.pri file !") | |
7 | } |
|
7 | } | |
8 |
|
8 | |||
9 | DESTDIR = $$CHART_BUILD_BIN_DIR |
|
9 | DESTDIR = $$CHART_BUILD_BIN_DIR |
@@ -24,6 +24,7 | |||||
24 | #include "qchartglobal.h" |
|
24 | #include "qchartglobal.h" | |
25 | #include <QObject> |
|
25 | #include <QObject> | |
26 | #include <QPointF> |
|
26 | #include <QPointF> | |
|
27 | #include <QTextStream> | |||
27 |
|
28 | |||
28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
29 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
29 |
|
30 |
@@ -3,11 +3,11 TARGET = qtcommercialchartqml | |||||
3 | CONFIG += qt plugin |
|
3 | CONFIG += qt plugin | |
4 | QT += declarative |
|
4 | QT += declarative | |
5 |
|
5 | |||
6 |
!include( ../co |
|
6 | !include( ../config.pri ) { | |
7 | error( "Couldn't find the common.pri file!" ) |
|
7 | error( "Couldn't find the common.pri file!" ) | |
8 | } |
|
8 | } | |
9 |
!include( ../ |
|
9 | !include( ../build.pri ) { | |
10 |
error( "Couldn't find the |
|
10 | error( "Couldn't find the build.pri file !") | |
11 | } |
|
11 | } | |
12 |
|
12 | |||
13 | DESTDIR = $$CHART_BUILD_PLUGIN_DIR |
|
13 | DESTDIR = $$CHART_BUILD_PLUGIN_DIR |
@@ -20,6 +20,7 | |||||
20 |
|
20 | |||
21 | #include "splineanimation_p.h" |
|
21 | #include "splineanimation_p.h" | |
22 | #include "splinechartitem_p.h" |
|
22 | #include "splinechartitem_p.h" | |
|
23 | #include <QDebug> | |||
23 |
|
24 | |||
24 | Q_DECLARE_METATYPE(QVector<QPointF>) |
|
25 | Q_DECLARE_METATYPE(QVector<QPointF>) | |
25 | Q_DECLARE_METATYPE(SplineVector) |
|
26 | Q_DECLARE_METATYPE(SplineVector) |
@@ -20,6 +20,7 | |||||
20 |
|
20 | |||
21 | #include "xyanimation_p.h" |
|
21 | #include "xyanimation_p.h" | |
22 | #include "xychartitem_p.h" |
|
22 | #include "xychartitem_p.h" | |
|
23 | #include <QDebug> | |||
23 |
|
24 | |||
24 | Q_DECLARE_METATYPE(QVector<QPointF>) |
|
25 | Q_DECLARE_METATYPE(QVector<QPointF>) | |
25 |
|
26 |
@@ -25,6 +25,7 | |||||
25 | #include "chartpresenter_p.h" |
|
25 | #include "chartpresenter_p.h" | |
26 | #include "chartanimator_p.h" |
|
26 | #include "chartanimator_p.h" | |
27 | #include <QPainter> |
|
27 | #include <QPainter> | |
|
28 | #include <QDebug> | |||
28 | #include <cmath> |
|
29 | #include <cmath> | |
29 |
|
30 | |||
30 | static int label_padding = 5; |
|
31 | static int label_padding = 5; | |
@@ -365,7 +366,7 void Axis::setLayout(QVector<qreal> &layout) | |||||
365 | } |
|
366 | } | |
366 | break; |
|
367 | break; | |
367 | default: |
|
368 | default: | |
368 |
|
|
369 | qWarning()<<"Unknown axis type"; | |
369 | break; |
|
370 | break; | |
370 | } |
|
371 | } | |
371 |
|
372 |
@@ -31,6 +31,7 | |||||
31 | #define QCHARTAXISCATEGORIES_P_H |
|
31 | #define QCHARTAXISCATEGORIES_P_H | |
32 |
|
32 | |||
33 | #include "qchartaxiscategories.h" |
|
33 | #include "qchartaxiscategories.h" | |
|
34 | #include <QMap> | |||
34 |
|
35 | |||
35 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
36 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
36 |
|
37 |
@@ -2,6 +2,7 | |||||
2 | #define QBARSET_P_H |
|
2 | #define QBARSET_P_H | |
3 |
|
3 | |||
4 | #include "qbarset.h" |
|
4 | #include "qbarset.h" | |
|
5 | #include <QMap> | |||
5 |
|
6 | |||
6 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
7 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
7 |
|
8 |
@@ -20,6 +20,7 | |||||
20 |
|
20 | |||
21 | #include "chart_p.h" |
|
21 | #include "chart_p.h" | |
22 | #include "chartpresenter_p.h" |
|
22 | #include "chartpresenter_p.h" | |
|
23 | #include <QDebug> | |||
23 |
|
24 | |||
24 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
25 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
25 |
|
26 |
@@ -22,6 +22,7 | |||||
22 | #define CHART_H |
|
22 | #define CHART_H | |
23 |
|
23 | |||
24 | #include "qchartglobal.h" |
|
24 | #include "qchartglobal.h" | |
|
25 | #include <QObject> | |||
25 | #include <QRect> |
|
26 | #include <QRect> | |
26 |
|
27 | |||
27 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
@@ -22,24 +22,28 | |||||
22 | #define CHARTCONFIG_H |
|
22 | #define CHARTCONFIG_H | |
23 |
|
23 | |||
24 | #include "qchartglobal.h" |
|
24 | #include "qchartglobal.h" | |
|
25 | ||||
25 | #ifdef Q_CC_MSVC |
|
26 | #ifdef Q_CC_MSVC | |
26 | // There is a problem with jom.exe currently. It does not seem to understand QMAKE_EXTRA_TARGETS properly. |
|
27 | // There is a problem with jom.exe currently. It does not seem to understand QMAKE_EXTRA_TARGETS properly. | |
27 | // This is the case at least with shadow builds. |
|
28 | // This is the case at least with shadow builds. | |
28 | // http://qt-project.org/wiki/jom |
|
29 | // http://qt-project.org/wiki/jom | |
29 | const char *buildTime = __DATE__; |
|
30 | #undef DEVELOPER_BUILD | |
|
31 | #endif | |||
|
32 | ||||
|
33 | #ifndef DEVELOPER_BUILD | |||
|
34 | const char *buildTime = __TIME__" "__DATE__; | |||
30 | const char *gitHead = "unknown"; |
|
35 | const char *gitHead = "unknown"; | |
31 | #else |
|
36 | #else | |
32 | #include "qchartversion_p.h" |
|
37 | #include "qchartversion_p.h" | |
33 | #endif |
|
38 | #endif | |
34 |
|
39 | |||
35 |
|
||||
36 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
40 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
37 |
|
41 | |||
38 | class ChartConfig { |
|
42 | class ChartConfig { | |
39 |
|
43 | |||
40 | private: |
|
44 | private: | |
41 | ChartConfig(){ |
|
45 | ChartConfig(){ | |
42 | #ifndef QT_NO_DEBUG |
|
46 | #if defined(DEVELOPMENT_BUILD) && !defined(QT_NO_DEBUG) | |
43 | qDebug()<<"buildTime" << buildTime; |
|
47 | qDebug()<<"buildTime" << buildTime; | |
44 | qDebug()<<"gitHead" << gitHead; |
|
48 | qDebug()<<"gitHead" << gitHead; | |
45 | #endif |
|
49 | #endif |
@@ -23,6 +23,7 | |||||
23 | #include "qchartglobal.h" |
|
23 | #include "qchartglobal.h" | |
24 | #include <QRectF> |
|
24 | #include <QRectF> | |
25 | #include <QSizeF> |
|
25 | #include <QSizeF> | |
|
26 | #include <QDebug> | |||
26 |
|
27 | |||
27 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
28 |
|
29 |
@@ -25,7 +25,6 | |||||
25 | #include "chartpresenter_p.h" |
|
25 | #include "chartpresenter_p.h" | |
26 | #include "chartdataset_p.h" |
|
26 | #include "chartdataset_p.h" | |
27 | #include "chartanimator_p.h" |
|
27 | #include "chartanimator_p.h" | |
28 | #include <QDebug> |
|
|||
29 | #include <QPainter> |
|
28 | #include <QPainter> | |
30 | #include <QTimer> |
|
29 | #include <QTimer> | |
31 |
|
30 |
@@ -25,7 +25,6 | |||||
25 | #include "qpieslice.h" |
|
25 | #include "qpieslice.h" | |
26 | #include <QPen> |
|
26 | #include <QPen> | |
27 | #include <QBrush> |
|
27 | #include <QBrush> | |
28 | #include <QDebug> |
|
|||
29 |
|
28 | |||
30 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
29 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
31 |
|
30 |
@@ -24,7 +24,6 | |||||
24 | #include "qpieslice.h" |
|
24 | #include "qpieslice.h" | |
25 | #include "chartpresenter_p.h" |
|
25 | #include "chartpresenter_p.h" | |
26 | #include <QPainter> |
|
26 | #include <QPainter> | |
27 | #include <QDebug> |
|
|||
28 | #include <qmath.h> |
|
27 | #include <qmath.h> | |
29 | #include <QGraphicsSceneEvent> |
|
28 | #include <QGraphicsSceneEvent> | |
30 | #include <QTime> |
|
29 | #include <QTime> |
@@ -27,7 +27,6 | |||||
27 | #include "chartanimator_p.h" |
|
27 | #include "chartanimator_p.h" | |
28 | #include "legendmarker_p.h" |
|
28 | #include "legendmarker_p.h" | |
29 | #include <QAbstractItemModel> |
|
29 | #include <QAbstractItemModel> | |
30 | #include <QDebug> |
|
|||
31 |
|
30 | |||
32 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
31 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
33 |
|
32 |
@@ -42,13 +42,14 | |||||
42 | # define QTCOMMERCIALCHART_USE_NAMESPACE |
|
42 | # define QTCOMMERCIALCHART_USE_NAMESPACE | |
43 | #endif |
|
43 | #endif | |
44 |
|
44 | |||
45 | #define CHART_DEBUG chartDebug(3,__LINE__,__FILE__,__FUNCTION__); |
|
45 | #if defined(DEVELOPER_BUILD) && !defined(QT_NO_DEBUG) | |
|
46 | #define CHART_DEBUG chartDebug(3,__LINE__,__FILE__,__FUNCTION__) | |||
|
47 | ||||
46 |
|
48 | |||
47 | #include <stdarg.h> |
|
49 | #include <stdarg.h> | |
48 | #include <QDebug> |
|
50 | #include <QDebug> | |
49 |
|
51 | |||
50 | /* |
|
52 | static inline QDebug chartDebug(int numargs,...) | |
51 | static QDebug chartDebug(int numargs,...) |
|
|||
52 | { |
|
53 | { | |
53 | va_list valist; |
|
54 | va_list valist; | |
54 | va_start(valist,numargs); |
|
55 | va_start(valist,numargs); | |
@@ -59,5 +60,5 static QDebug chartDebug(int numargs,...) | |||||
59 | va_end(valist); |
|
60 | va_end(valist); | |
60 | return qDebug()<<QString().append(function).append("(").append(file).append(":%1)").arg(line); |
|
61 | return qDebug()<<QString().append(function).append("(").append(file).append(":%1)").arg(line); | |
61 | } |
|
62 | } | |
62 | */ |
|
63 | #endif | |
63 | #endif |
|
64 | #endif |
@@ -24,6 +24,7 | |||||
24 | #include "chartpresenter_p.h" |
|
24 | #include "chartpresenter_p.h" | |
25 | #include <QPainter> |
|
25 | #include <QPainter> | |
26 | #include <QGraphicsScene> |
|
26 | #include <QGraphicsScene> | |
|
27 | #include <QDebug> | |||
27 |
|
28 | |||
28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
29 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
29 |
|
30 |
@@ -21,6 +21,7 | |||||
21 | #include "scroller_p.h" |
|
21 | #include "scroller_p.h" | |
22 | #include "qlegend.h" |
|
22 | #include "qlegend.h" | |
23 | #include <QGraphicsSceneMouseEvent> |
|
23 | #include <QGraphicsSceneMouseEvent> | |
|
24 | #include <QDebug> | |||
24 |
|
25 | |||
25 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
26 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
26 |
|
27 |
@@ -1,4 +1,4 | |||||
1 |
!include( ../co |
|
1 | !include( ../config.pri ):error( Couldn't find the config.pri file! ) | |
2 | TARGET = QtCommercialChart |
|
2 | TARGET = QtCommercialChart | |
3 | DESTDIR = $$CHART_BUILD_LIB_DIR |
|
3 | DESTDIR = $$CHART_BUILD_LIB_DIR | |
4 | TEMPLATE = lib |
|
4 | TEMPLATE = lib | |
@@ -70,6 +70,7 DEFINES += QTCOMMERCIALCHART_LIBRARY | |||||
70 | }else{ |
|
70 | }else{ | |
71 | command = "echo \"$${LITERAL_HASH}include \\\"qchartglobal.h\\\"\" > $$CHART_BUILD_PUBLIC_HEADER_DIR/QChartGlobal" |
|
71 | command = "echo \"$${LITERAL_HASH}include \\\"qchartglobal.h\\\"\" > $$CHART_BUILD_PUBLIC_HEADER_DIR/QChartGlobal" | |
72 | } |
|
72 | } | |
|
73 | PUBLIC_QT_HEADERS += $$CHART_BUILD_PUBLIC_HEADER_DIR/QChartGlobal | |||
73 | system($$command) |
|
74 | system($$command) | |
74 | } |
|
75 | } | |
75 |
|
76 | |||
@@ -121,19 +122,20 install_build_private_headers.CONFIG += target_predeps \ | |||||
121 | QMAKE_EXTRA_COMPILERS += install_build_public_headers \ |
|
122 | QMAKE_EXTRA_COMPILERS += install_build_public_headers \ | |
122 | install_build_private_headers \ |
|
123 | install_build_private_headers \ | |
123 |
|
124 | |||
124 |
|
||||
125 | !win32-msvc*: { |
|
|||
126 |
|
||||
127 |
|
|
125 | # There is a problem with jom.exe currently. It does not seem to understand QMAKE_EXTRA_TARGETS properly. | |
128 |
|
|
126 | # This is the case at least with shadow builds. | |
129 |
|
|
127 | # http://qt-project.org/wiki/jom | |
130 |
|
128 | |||
|
129 | developer_build:!win32-msvc*:{ | |||
131 | chartversion.target = $$PWD/qchartversion_p.h |
|
130 | chartversion.target = $$PWD/qchartversion_p.h | |
132 |
|
131 | |||
133 | unix:{ |
|
132 | unix:{ | |
134 | chartversion.commands = @echo \ |
|
133 | chartversion.commands = @echo \ | |
135 | "const char *buildTime = \\\"`date +'%y%m%d%H%M'`\\\" \\; \ |
|
134 | \" $${LITERAL_HASH}ifndef QCHARTVERSION_P_H\\n\ | |
136 | const char *gitHead = \\\"`git rev-parse HEAD`\\\" \\; " \ |
|
135 | $${LITERAL_HASH}define QCHARTVERSION_P_H\\n\ | |
|
136 | const char *buildTime = \\\"`date +'%y%m%d%H%M'`\\\" ; \\n\ | |||
|
137 | const char *gitHead = \\\"`git rev-parse HEAD`\\\" ; \\n \ | |||
|
138 | $${LITERAL_HASH}endif \" \ | |||
137 | > \ |
|
139 | > \ | |
138 | $$chartversion.target; |
|
140 | $$chartversion.target; | |
139 | }else{ |
|
141 | }else{ | |
@@ -147,7 +149,7 QMAKE_EXTRA_COMPILERS += install_build_public_headers \ | |||||
147 | chartversion.depends = $$HEADERS \ |
|
149 | chartversion.depends = $$HEADERS \ | |
148 | $$SOURCES |
|
150 | $$SOURCES | |
149 |
|
151 | |||
150 |
PRE_TARGETDEPS += $$ |
|
152 | PRE_TARGETDEPS += $$chartversion.target | |
151 | QMAKE_CLEAN += $$PWD/qchartversion_p.h |
|
153 | QMAKE_CLEAN += $$PWD/qchartversion_p.h | |
152 | QMAKE_EXTRA_TARGETS += chartversion |
|
154 | QMAKE_EXTRA_TARGETS += chartversion | |
153 | } |
|
155 | } |
@@ -1,17 +1,6 | |||||
1 |
!include( ../ |
|
1 | !include( ../test.pri ) { | |
2 |
error( "Couldn't find the |
|
2 | error( "Couldn't find the test.pri file!" ) | |
3 | } |
|
|||
4 | !include( ../../integrated.pri ) { |
|
|||
5 | error( "Couldn't find the integrated.pri file !") |
|
|||
6 | } |
|
3 | } | |
7 |
|
4 | |||
8 | TEMPLATE = app |
|
|||
9 | CONFIG += qtestlib |
|
5 | CONFIG += qtestlib | |
10 |
|
||||
11 | DESTDIR = $$CHART_BUILD_BIN_DIR/test |
|
|||
12 | OBJECTS_DIR = $$CHART_BUILD_DIR/test/$$TARGET |
|
|||
13 | MOC_DIR = $$CHART_BUILD_DIR/test/$$TARGET |
|
|||
14 | UI_DIR = $$CHART_BUILD_DIR/test/$$TARGET |
|
|||
15 | RCC_DIR = $$CHART_BUILD_DIR/test/$$TARGET |
|
|||
16 |
|
||||
17 | !contains(TARGET, ^tst_.*):TARGET = $$join(TARGET,,"tst_") |
|
6 | !contains(TARGET, ^tst_.*):TARGET = $$join(TARGET,,"tst_") |
@@ -36,6 +36,7 | |||||
36 | #include <QRadioButton> |
|
36 | #include <QRadioButton> | |
37 | #include <QStringList> |
|
37 | #include <QStringList> | |
38 | #include <QSqlQuery> |
|
38 | #include <QSqlQuery> | |
|
39 | #include <QDebug> | |||
39 |
|
40 | |||
40 | QTCOMMERCIALCHART_USE_NAMESPACE |
|
41 | QTCOMMERCIALCHART_USE_NAMESPACE | |
41 |
|
42 |
@@ -1,8 +1,8 | |||||
1 |
!include( ../co |
|
1 | !include( ../config.pri ) { | |
2 |
error( "Couldn't find the co |
|
2 | error( "Couldn't find the config.pri file!" ) | |
3 | } |
|
3 | } | |
4 |
!include( ../ |
|
4 | !include( ../build.pri ) { | |
5 |
error( "Couldn't find the |
|
5 | error( "Couldn't find the build.pri file !") | |
6 | } |
|
6 | } | |
7 |
|
7 | |||
8 | TEMPLATE = app |
|
8 | TEMPLATE = app |
General Comments 0
You need to be logged in to leave comments.
Login now