[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/base/plasma/applets/worldclock
From: Henry de Valence <hdevalence () gmail ! com>
Date: 2008-04-04 14:29:37
Message-ID: 1207319377.358763.3544.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 793597 by hdevalence:
Added semi-working checkbox on the lat/lon box and
eliminated qt3 support flags from the CMakeLists.txt
M +0 -2 CMakeLists.txt
M +160 -73 latlonbox.cpp
M +20 -2 latlonbox.h
--- trunk/playground/base/plasma/applets/worldclock/CMakeLists.txt #793596:793597
@@ -6,8 +6,6 @@
# I don't know how. - hdevalence
#####
-add_definitions (-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS)
-
project(worldclock)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${CMAKE_SOURCE_DIR}/ )
--- trunk/playground/base/plasma/applets/worldclock/latlonbox.cpp #793596:793597
@@ -19,32 +19,50 @@
#include <QHBoxLayout>
#include <QSpinBox>
+#include <QComboBox>
#include <QLabel>
#include <QObject>
#include <QDebug>
#include <cmath>
+#include <marble/global.h>
+
#include "latlonbox.h"
-LatLonBox::LatLonBox(QWidget *parent) : QWidget( parent ),
+LatLonBox::LatLonBox(QWidget *parent, Marble::Dimension dimension ) : QWidget( \
parent ), m_layout(0),
m_degreesSpin(0),
m_minutesSpin(0),
m_secondsSpin(0),
m_degreesLabel(0),
m_minutesLabel(0),
- m_secondsLabel(0)
+ m_secondsLabel(0),
+ m_comboBox(0)
{
m_value = 0;
+ m_dimension = dimension;
m_layout = new QHBoxLayout;
setLayout( m_layout );
m_degreesSpin = new QSpinBox;
- m_degreesSpin->setMinimum( -180 );
- m_degreesSpin->setMaximum( 180 );
+ m_comboBox = new QComboBox;
+ if( m_dimension == Marble::Longitude ) {
+ m_degreesSpin->setMinimum( -180 );
+ m_degreesSpin->setMaximum( 180 );
+ m_comboBox->addItem( tr("E", "East, the direction" ) );
+ m_comboBox->addItem( tr("W", "West, the direction" ) );
+ } else if( m_dimension == Marble::Latitude ) {
+ m_degreesSpin->setMinimum( -90 );
+ m_degreesSpin->setMaximum( 90 );
+ m_comboBox->addItem( tr("N", "North, the direction" ) );
+ m_comboBox->addItem( tr("S", "East, the direction" ) );
+ } else {
+ qDebug() << "Unrecognized dimension";
+ }
m_degreesSpin->show();
+ m_comboBox->show();
m_minutesSpin = new QSpinBox;
//minimum value is -1 so we can
@@ -68,6 +86,8 @@
m_layout->addWidget( m_minutesLabel );
m_layout->addWidget( m_secondsSpin );
m_layout->addWidget( m_secondsLabel );
+ m_layout->addWidget( m_secondsLabel );
+ m_layout->addWidget( m_comboBox );
connect( m_secondsSpin, SIGNAL( valueChanged( int ) ),
this, SLOT( secondsOverflow( ) ) );
@@ -77,8 +97,75 @@
connect( m_degreesSpin, SIGNAL( valueChanged( int ) ),
this, SLOT( recalculate( ) ) );
+
+ connect( m_comboBox, SIGNAL( currentIndexChanged( const QString & ) ),
+ this, SLOT( comboBoxChanged( const QString & ) ) );
}
+void LatLonBox::checkComboBox()
+{
+ if( m_value < 0 ) {
+ m_comboBox->setEnabled(true);
+ if( m_dimension == Marble::Longitude && m_comboBox->currentText() == tr("N", \
"North, the direction" ) ) { + m_comboBox->setCurrentIndex( m_comboBox->findText( \
tr("S", "South, the direction" ) ) ); + }
+ if( m_dimension == Marble::Latitude && m_comboBox->currentText() == tr("E", "East, \
the direction" ) ) { + m_comboBox->setCurrentIndex( m_comboBox->findText( tr("W", \
"West, the direction" ) ) ); + }
+ } else if( m_value > 0 ) {
+ m_comboBox->setEnabled(true);
+ if( m_dimension == Marble::Longitude && m_comboBox->currentText() == tr("S", \
"South, the direction" ) ) { + m_comboBox->setCurrentIndex( m_comboBox->findText( \
tr("N", "North, the direction" ) ) ); + }
+ if( m_dimension == Marble::Latitude && m_comboBox->currentText() == tr("W", "West, \
the direction" ) ) { + m_comboBox->setCurrentIndex( m_comboBox->findText( tr("E", \
"East, the direction" ) ) ); + }
+ } else {
+ //m_value is zero, so long/lat do not apply
+ m_comboBox->setEnabled(false);
+ }
+}
+
+void LatLonBox::comboBoxChanged( const QString &text )
+{
+ if( ( text == tr("N", "North, the direction" ) || text == tr("E", "East, the \
direction" ) ) && + m_value < 0 ) {
+ m_value -= m_value * 2;
+ reverseRecalculate();
+ } else if( ( text == tr("S", "South, the direction" ) || text == tr("W", "West, the \
direction" ) ) && + m_value > 0 ) {
+ m_value -= m_value * 2;
+ reverseRecalculate();
+ }
+}
+
+void LatLonBox::setDimension( Marble::Dimension dimension )
+{
+ //don't do anything
+ if( m_dimension == dimension ) {
+ return;
+ }
+
+ if( m_dimension == Marble::Longitude ) {
+ m_comboBox->removeItem( m_comboBox->findText( tr("W", "West, the direction" ) ) );
+ m_comboBox->removeItem( m_comboBox->findText( tr("E", "East, the direction" ) ) );
+
+ m_comboBox->addItem( tr("N", "North, the direction" ) );
+ m_comboBox->addItem( tr("S", "South, the direction" ) );
+ } else if( m_dimension == Marble::Latitude ) {
+ m_comboBox->removeItem( m_comboBox->findText( tr("N", "North, the direction" ) ) \
); + m_comboBox->removeItem( m_comboBox->findText( tr("S", "South, the direction" ) \
) ); +
+ m_comboBox->addItem( tr("E", "East, the direction" ) );
+ m_comboBox->addItem( tr("W", "West, the direction" ) );
+ } else {
+ //unknown dimension
+ qDebug() << "unknown dimension, not changing";
+ }
+ m_dimension = dimension;
+
+}
+
void LatLonBox::secondsOverflow()
{
if( m_secondsSpin->value() == 60 ) {
@@ -121,101 +208,101 @@
void LatLonBox::recalculate()
{
+ double newvalue = m_degreesSpin->value();
+ double minsfract = m_minutesSpin->value();
+ double secsfract = m_secondsSpin->value();
+
+ minsfract = minsfract / 60;
+ secsfract = secsfract / 3600;
+
+ qDebug() << "newvalue = " << newvalue;
+ qDebug() << "minsfract = " << minsfract;
+ qDebug() << "secsfract = " << secsfract;
+
//we need two because if the degrees is neg,
//the mins/secs *subtract* from the value
- /*
if( m_degreesSpin->value() >= 0 ) {
- double newvalue = m_degreesSpin->value();
- newvalue += ( m_minutesSpin->value() / 60 );
- newvalue += ( m_secondsSpin->value() / 3600 );
- m_value = newvalue;
- qDebug() << "valueChanged: now " << m_value;
- emit valueChanged( m_value );
- } else {
- double newvalue = m_degreesSpin->value();
- newvalue -= ( m_minutesSpin->value() / 60 );
- newvalue -= ( m_secondsSpin->value() / 3600 );
- m_value = newvalue;
- qDebug() << "valueChanged: now " << m_value;
- emit valueChanged( m_value );
- }
- */
- if( m_degreesSpin->value() >= 0 ) {
- double newvalue = m_degreesSpin->value();
- double minsfract = m_minutesSpin->value();
- double secsfract = m_secondsSpin->value();
- minsfract = minsfract / 60;
- secsfract = secsfract / 3600;
- qDebug() << "newvalue = " << newvalue;
- qDebug() << "minsfract = " << minsfract;
- qDebug() << "secsfract = " << secsfract;
newvalue += minsfract;
newvalue += secsfract;
- m_value = newvalue;
- qDebug() << "valueChanged: now " << m_value;
- emit valueChanged( m_value );
} else {
- double newvalue = m_degreesSpin->value();
- double minsfract = m_minutesSpin->value();
- double secsfract = m_secondsSpin->value();
- minsfract = minsfract / 60;
- secsfract = secsfract / 3600;
- qDebug() << "newvalue = " << newvalue;
- qDebug() << "minsfract = " << minsfract;
- qDebug() << "secsfract = " << secsfract;
newvalue -= minsfract;
newvalue -= secsfract;
- m_value = newvalue;
- qDebug() << "valueChanged: now " << m_value;
- emit valueChanged( m_value );
}
+
+ m_value = newvalue;
+
//you can't have 180*59'59" , only 180.
- if( m_degreesSpin->value() == 180 ||
- m_degreesSpin->value() == -180 ) {
+ //but lat. & lon. have different maximums, so we check
+ if( m_degreesSpin->value() == m_degreesSpin->maximum() ||
+ m_degreesSpin->value() == m_degreesSpin->minimum() ) {
m_minutesSpin->setValue( 0 );
m_secondsSpin->setValue( 0 );
- }
+ }
+
+ if( m_degreesSpin->value() < m_degreesSpin->minimum() ) {
+ m_degreesSpin->setValue( m_degreesSpin->minimum() );
+ m_minutesSpin->setValue( 0 );
+ m_secondsSpin->setValue( 0 );
+ }
+
+ if( m_degreesSpin->value() > m_degreesSpin->maximum() ) {
+ m_degreesSpin->setValue( m_degreesSpin->maximum() );
+ m_minutesSpin->setValue( 0 );
+ m_secondsSpin->setValue( 0 );
+ }
+ qDebug() << "valueChanged: now " << m_value;
+
+ checkComboBox();
+
+ //put this last so combobox &c will be correct
+ //for stuff that needs it
+ emit valueChanged( m_value );
+
}
+
void LatLonBox::reverseRecalculate()
{
int degreesvalue = 0;
int minutesvalue = 0;
int secondsvalue = 0;
+
+ //degreesvalue is the whole degree part
if( m_value >= 0 ) {
- //degreesvalue is the whole degree part
degreesvalue = floor( m_value );
- //minutesremainder is the fraction of a degree that
- //is left over
- double minutesremainder = m_value - degreesvalue;
- //multipy the fraction of a degree by 60 to
- //turn it into minutes
- minutesremainder = minutesremainder * 60;
- //minutesvalue is the whole minutes part
+ } else {
+ degreesvalue = ceil( m_value );
+ }
+
+ //minutesremainder is the fraction of a degree that
+ //is left over
+ double minutesremainder = m_value - degreesvalue;
+ //multipy the fraction of a degree by 60 to
+ //turn it into minutes
+ minutesremainder = minutesremainder * 60;
+ //minutesvalue is the whole minutes part
+ if( m_value >= 0 ) {
minutesvalue = floor( minutesremainder );
- //secondsremainder is the fraction of a minute
- //that is left over
- double secondsremainder = minutesremainder - minutesvalue;
- //multiply the fraction of a minute by 60 to
- //turn it into seconds
- secondsvalue = secondsremainder * 60;
- //now we have all the values, we
- //put them on the boxes.
- m_degreesSpin->setValue( degreesvalue );
- m_minutesSpin->setValue( minutesvalue );
- m_secondsSpin->setValue( secondsvalue );
} else {
- degreesvalue = ceil( m_value );
- double minutesremainder = m_value - degreesvalue;
- minutesremainder = minutesremainder * 60;
minutesvalue = ceil( minutesremainder );
- double secondsremainder = minutesremainder - minutesvalue;
- secondsvalue = secondsremainder * 60;
- m_degreesSpin->setValue( degreesvalue );
- m_minutesSpin->setValue( minutesvalue );
- m_secondsSpin->setValue( secondsvalue );
}
+
+ //secondsremainder is the fraction of a minute
+ //that is left over
+ double secondsremainder = minutesremainder - minutesvalue;
+ //multiply the fraction of a minute by 60 to
+ //turn it into seconds
+ secondsvalue = secondsremainder * 60;
+
+ //now we have all the values, we
+ //put them on the boxes.
+ m_degreesSpin->setValue( degreesvalue );
+ m_minutesSpin->setValue( minutesvalue );
+ m_secondsSpin->setValue( secondsvalue );
+
+ checkComboBox();
}
+
--- trunk/playground/base/plasma/applets/worldclock/latlonbox.h #793596:793597
@@ -22,25 +22,42 @@
#include <QWidget>
#include <QSpinBox>
+#include <QComboBox>
#include <QHBoxLayout>
#include <QLabel>
+#include <marble/global.h>
+
class LatLonBox : public QWidget
{
Q_OBJECT
+ //Q_PROPERTY( double m_value READ value WRITE setValue )
+ //Q_PROPERTY( Marble::Dimension m_dimension READ dimension WRITE setDimension )
public:
- LatLonBox(QWidget *parent = 0);
- double value() { return m_value; };
+ LatLonBox(QWidget *parent = 0, Marble::Dimension dimension = Marble::Longitude );
+ double value();
+ Marble::Dimension dimension();
public slots:
void setValue(double newvalue);
+ void setDimension( Marble::Dimension );
private slots:
+ // changes value based on combobox
+ void comboBoxChanged( const QString &text );
+ // recalculates m_value based on spinboxes
void recalculate();
+ // recalculates spinboxes based on m_value
void reverseRecalculate();
+ // chnges combobox based on value
+ void checkComboBox();
void secondsOverflow();
void minutesOverflow();
private:
QHBoxLayout *m_layout;
+ Marble::Dimension m_dimension;
+
+ QComboBox *m_comboBox;
+
QSpinBox *m_degreesSpin;
QSpinBox *m_minutesSpin;
QSpinBox *m_secondsSpin;
@@ -51,6 +68,7 @@
double m_value;
signals:
+ void dimensionChanged( Marble::Dimension dimension );
void valueChanged( double value );
};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic