geowidget.h
00001 /* 00002 This file is part of KAddressBook. 00003 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of TQt, and distribute the resulting executable, 00021 without including the source code for TQt in the source distribution. 00022 */ 00023 00024 #ifndef GEOWIDGET_H 00025 #define GEOWIDGET_H 00026 00027 #include <kdialogbase.h> 00028 00029 #include "contacteditorwidget.h" 00030 00031 namespace KABC { 00032 class Geo; 00033 } 00034 00035 class GeoMapWidget; 00036 00037 class KComboBox; 00038 class KDoubleSpinBox; 00039 00040 class TQCheckBox; 00041 class TQLabel; 00042 class TQSpinBox; 00043 class TQPushButton; 00044 00045 typedef struct { 00046 double latitude; 00047 double longitude; 00048 TQString country; 00049 } GeoData; 00050 00051 class GeoWidget : public KAB::ContactEditorWidget 00052 { 00053 Q_OBJECT 00054 TQ_OBJECT 00055 00056 public: 00057 GeoWidget( KABC::AddressBook *ab, TQWidget *parent, const char *name = 0 ); 00058 ~GeoWidget(); 00059 00060 void loadContact( KABC::Addressee *addr ); 00061 void storeContact( KABC::Addressee *addr ); 00062 00063 void setReadOnly( bool readOnly ); 00064 00065 private slots: 00066 void editGeoData(); 00067 00068 private: 00069 KDoubleSpinBox *mLatitudeBox; 00070 KDoubleSpinBox *mLongitudeBox; 00071 00072 TQCheckBox *mGeoIsValid; 00073 TQPushButton *mExtendedButton; 00074 00075 bool mReadOnly; 00076 }; 00077 00078 class GeoDialog : public KDialogBase 00079 { 00080 Q_OBJECT 00081 TQ_OBJECT 00082 00083 public: 00084 GeoDialog( TQWidget *parent, const char *name = 0 ); 00085 ~GeoDialog(); 00086 00087 void setLatitude( double latitude ); 00088 double latitude() const; 00089 00090 void setLongitude( double longitude ); 00091 double longitude() const; 00092 00093 private slots: 00094 void updateInputs(); 00095 00096 void sexagesimalInputChanged(); 00097 void geoMapChanged(); 00098 void cityInputChanged(); 00099 00100 private: 00101 void loadCityList(); 00102 double calculateCoordinate( const TQString& ) const; 00103 int nearestCity( double, double ) const; 00104 00105 GeoMapWidget *mMapWidget; 00106 KComboBox *mCityCombo; 00107 00108 TQSpinBox *mLatDegrees; 00109 TQSpinBox *mLatMinutes; 00110 TQSpinBox *mLatSeconds; 00111 KComboBox *mLatDirection; 00112 00113 TQSpinBox *mLongDegrees; 00114 TQSpinBox *mLongMinutes; 00115 TQSpinBox *mLongSeconds; 00116 KComboBox *mLongDirection; 00117 00118 double mLatitude; 00119 double mLongitude; 00120 TQMap<TQString, GeoData> mGeoDataMap; 00121 bool mUpdateSexagesimalInput; 00122 }; 00123 00124 class GeoMapWidget : public TQWidget 00125 { 00126 Q_OBJECT 00127 TQ_OBJECT 00128 00129 public: 00130 GeoMapWidget( TQWidget *parent, const char *name = 0 ); 00131 ~GeoMapWidget(); 00132 00133 void setLatitude( double latitude ); 00134 double latitude()const; 00135 00136 void setLongitude( double longitude ); 00137 double longitude()const; 00138 00139 signals: 00140 void changed(); 00141 00142 protected: 00143 virtual void mousePressEvent( TQMouseEvent* ); 00144 virtual void paintEvent( TQPaintEvent* ); 00145 00146 private: 00147 double mLatitude; 00148 double mLongitude; 00149 }; 00150 00151 class GeoWidgetFactory : public KAB::ContactEditorWidgetFactory 00152 { 00153 public: 00154 KAB::ContactEditorWidget *createWidget( KABC::AddressBook *ab, TQWidget *parent, const char *name ) 00155 { 00156 return new GeoWidget( ab, parent, name ); 00157 } 00158 00159 TQString pageIdentifier() const { return "misc"; } 00160 }; 00161 00162 #endif