码迷,mamicode.com
首页 > 其他好文 > 详细

LocalUI

时间:2014-12-18 11:43:29      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   io   color   os   sp   on   div   

  1 //LocaleUI.cpp
  2 
  3 
  4 #include "vcf/ApplicationKit/ApplicationKit.h"
  5 #include "vcf/ApplicationKit/TitledBorder.h"
  6 
  7 using namespace VCF;
  8 
  9 
 10 
 11 class DateTimeLabel : public CustomControl {
 12 protected:
 13     TimerComponent* timer;
 14     String extraTxt;
 15     Locale* locale;
 16     void onTimer( Event* e ) {
 17         repaint();
 18     }
 19 public:
 20     DateTimeLabel() : CustomControl(false),locale(NULL){
 21 
 22         setBorder( new TitledBorder() );
 23 
 24         timer = new TimerComponent(this);
 25         timer->setTimeoutInterval ( 1000 );
 26         timer->TimerPulse +=
 27             new ClassProcedure1<Event*,DateTimeLabel>(this, &DateTimeLabel::onTimer, "DateTimeLabel::onTimer" );
 28     }
 29 
 30     virtual ~DateTimeLabel() {
 31         delete locale;
 32     }
 33 
 34     void setLocale( Locale* loc ) {
 35         if ( NULL != locale ) {
 36             delete locale;
 37         }
 38 
 39         locale = new Locale( loc->getLanguageCode(), loc->getCountryCode() );
 40 
 41         TitledBorder* border = (TitledBorder*)getBorder();
 42         border->setCaption( locale->getLanguageName() );
 43         border->getFont()->setLocale( locale );
 44     }
 45 
 46     void setLocale( const String& lang, const String& country ) {
 47         if ( NULL != locale ) {
 48             delete locale;
 49         }
 50 
 51         locale = new Locale( lang, country );
 52 
 53         TitledBorder* border = (TitledBorder*)getBorder();
 54         border->setCaption( locale->getLanguageName() );
 55         border->getFont()->setLocale( locale );
 56     }
 57 
 58     void start() {
 59         timer->setActivated ( true );
 60     }
 61 
 62     void stop() {
 63         timer->setActivated ( false );
 64     }
 65 
 66     void setExtraTxt( const String& val ) {
 67         extraTxt = val;
 68         repaint();
 69     }
 70 
 71     String getExtraTxt() {
 72         return extraTxt;
 73     }
 74 
 75     virtual void paint( GraphicsContext* ctx ) {
 76         CustomControl::paint( ctx );
 77 
 78         //get the current locale
 79         Locale* currentLocale = System::getCurrentThreadLocale();
 80 
 81         if ( NULL != locale ) {
 82             currentLocale = locale;
 83         }
 84 
 85 
 86 
 87         String localizedExtra = extraTxt;
 88 
 89         ctx->getCurrentFont()->setName( "Times New Roman" );
 90         ctx->getCurrentFont()->setPointSize( 16 );
 91 
 92 
 93 
 94 
 95         //check if we can localize the string
 96         if ( getUseLocaleStrings() ) {
 97             //Yep! Let‘s get the localized version. Worst case scenario is that
 98             //no translation exists, which means localizedExtra will be the same
 99             //as extraTxt
100             localizedExtra =   currentLocale->translate( extraTxt );
101         }
102 
103         DateTime dt = DateTime::now();
104         //localize the date/time value into a string
105         String dateStr = currentLocale->toStringFromDate( dt, "dddd, MMM d yyyy" );
106         String timeStr = currentLocale->toStringFromTime ( dt );
107 
108         Rect r = getClientBounds();
109 
110         Rect xtraRect = r;
111         xtraRect.bottom_ = xtraRect.top_ + ctx->getTextHeight( localizedExtra );
112 
113         int32 textDrawOptions = GraphicsContext::tdoCenterHorzAlign;
114 
115         ctx->textBoundedBy( &xtraRect, localizedExtra, textDrawOptions );
116 
117         Rect textRect = r;
118 
119         textRect.inflate( -10, -10 );
120         textRect.top_ = xtraRect.bottom_;
121 
122 
123         ctx->getCurrentFont()->setBold( true );
124 
125         textDrawOptions = GraphicsContext::tdoWordWrap | GraphicsContext::tdoCenterHorzAlign;
126         ctx->textBoundedBy( &textRect, dateStr + "\n" + timeStr, textDrawOptions );
127     }
128 };
129 
130 class LocaleUIWindow : public Window {
131 public:
132     LocaleUIWindow() {
133         setCaption( "LocaleUI" );
134 
135         DateTimeLabel* label;
136 
137         label = new DateTimeLabel();
138 
139         label->setLocale( "en", "US" );
140 
141         label->setExtraTxt( "Hello it‘s:" );
142 
143         label->setHeight( 100 );
144 
145         add( label, AlignTop );
146 
147         label->start();
148 
149 
150         label = new DateTimeLabel();
151 
152         label->setLocale( "it", "IT" );
153 
154         label->setExtraTxt( "Hello it‘s:" );
155 
156         label->setHeight( 100 );
157 
158         add( label, AlignTop );
159 
160         label->start();
161 
162 
163         label = new DateTimeLabel();
164 
165         label->setLocale( "pl", "PL" );
166 
167         label->setExtraTxt( "Hello it‘s:" );
168 
169         label->setHeight( 100 );
170 
171         add( label, AlignTop );
172 
173         label->start();
174 
175 
176         label = new DateTimeLabel();
177 
178         label->setLocale( "de", "DE" );
179 
180         label->setExtraTxt( "Hello it‘s:" );
181 
182         label->setHeight( 100 );
183 
184         add( label, AlignTop );
185 
186         label->start();
187 
188 
189         label = new DateTimeLabel();
190 
191         Locale loc( Locale::lcJapanese, Locale::ccJapan );
192         label->setLocale( &loc );
193 
194         label->setExtraTxt( "Hello it‘s:" );
195 
196         label->setHeight( 100 );
197 
198         add( label, AlignTop );
199 
200         label->start();
201 
202         label = new DateTimeLabel();
203 
204         Locale loc2( Locale::lcRussian, Locale::ccRussianFederation );
205         label->setLocale( &loc2 );
206 
207         label->setExtraTxt( "Hello it‘s:" );
208 
209         label->setHeight( 100 );
210 
211         add( label, AlignTop );
212 
213         label->start();
214     }
215 
216     virtual ~LocaleUIWindow(){};
217 
218 };
219 
220 
221 
222 
223 class LocaleUIApplication : public Application {
224 public:
225 
226     LocaleUIApplication( int argc, char** argv ) : Application(argc, argv) {
227 
228     }
229 
230     virtual bool initRunningApplication(){
231         bool result = Application::initRunningApplication();
232 
233         Window* mainWindow = new LocaleUIWindow();
234         setMainWindow(mainWindow);
235         mainWindow->setBounds( 100.0, 100.0, 350.0, 620.0 );
236         mainWindow->show();
237 
238         return result;
239     }
240 
241 };
242 
243 
244 int main(int argc, char *argv[])
245 {
246     Application* app = new LocaleUIApplication( argc, argv );
247 
248     Application::main();
249 
250     return 0;
251 }

 

LocalUI

标签:style   blog   ar   io   color   os   sp   on   div   

原文地址:http://www.cnblogs.com/elitiwin/p/4171197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!