[haiku-commits] r37400 - haiku/trunk/src/preferences/locale

  • From: pulkomandy@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 5 Jul 2010 15:36:17 +0200 (CEST)

Author: pulkomandy
Date: 2010-07-05 15:36:16 +0200 (Mon, 05 Jul 2010)
New Revision: 37400
Changeset: http://dev.haiku-os.org/changeset/37400/haiku
Ticket: http://dev.haiku-os.org/ticket/5897

Added:
   haiku/trunk/src/preferences/locale/LocaleSettings.cpp
   haiku/trunk/src/preferences/locale/LocaleSettings.h
Modified:
   haiku/trunk/src/preferences/locale/Jamfile
   haiku/trunk/src/preferences/locale/Locale.cpp
   haiku/trunk/src/preferences/locale/LocaleWindow.cpp
   haiku/trunk/src/preferences/locale/LocaleWindow.h
Log:
 * Separate the Settings class from the locale preflet a little (it can be 
reused in other parts of the OS)
 * Improve the settings class so it is able to handle a revert
 * Re-enable the revert button in the preflet and make it work.
This fixes #5897.


Modified: haiku/trunk/src/preferences/locale/Jamfile
===================================================================
--- haiku/trunk/src/preferences/locale/Jamfile  2010-07-05 09:47:48 UTC (rev 
37399)
+++ haiku/trunk/src/preferences/locale/Jamfile  2010-07-05 13:36:16 UTC (rev 
37400)
@@ -7,6 +7,7 @@
 Preference Locale :
        LanguageListView.cpp
        Locale.cpp
+       LocaleSettings.cpp
        LocaleWindow.cpp
        TimeFormatSettingsView.cpp
 

Modified: haiku/trunk/src/preferences/locale/Locale.cpp
===================================================================
--- haiku/trunk/src/preferences/locale/Locale.cpp       2010-07-05 09:47:48 UTC 
(rev 37399)
+++ haiku/trunk/src/preferences/locale/Locale.cpp       2010-07-05 13:36:16 UTC 
(rev 37400)
@@ -1,10 +1,12 @@
 /*
  * Copyright 2005, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx All rights reserved.
+ * Copyright 2010, Adrien Destugues <pulkomandy@xxxxxxxxxxxxxxxxx>. All 
rightts reserved.
  * Distributed under the terms of the MIT License.
  */
 
 
 #include "Locale.h"
+#include "LocaleSettings.h"
 #include "LocaleWindow.h"
 
 #include <AboutWindow.h>
@@ -12,10 +14,7 @@
 #include <Alert.h>
 #include <Catalog.h>
 #include <TextView.h>
-#include <FindDirectory.h>
-#include <File.h>
 #include <Locale.h>
-#include <Path.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -27,111 +26,22 @@
 
 const char* kSignature = "application/x-vnd.Haiku-Locale";
 
-static const uint32 kMsgLocaleSettings = 'LCst';
 
-
-class Settings {
-public:
-                                                       Settings();
-                                                       ~Settings();
-
-       const           BMessage&       Message() const { return fMessage; }
-                               void            UpdateFrom(BMessage* message);
-
-private:
-                               status_t        _Open(BFile* file, int32 mode);
-
-                               BMessage        fMessage;
-                               bool            fUpdated;
-};
-
-
 class LocalePreflet : public BApplication {
-public:
+       public:
                                                        LocalePreflet();
-       virtual                                 ~LocalePreflet();
+               virtual                         ~LocalePreflet();
 
-       virtual void                    MessageReceived(BMessage* message);
-       virtual void                    AboutRequested();
+               virtual void            MessageReceived(BMessage* message);
+               virtual void            AboutRequested();
 
 private:
-                               Settings        fSettings;
-                               LocaleWindow*   fLocaleWindow;
+               LocaleSettings          fSettings;
+               LocaleSettings          fOriginalSettings;
+               LocaleWindow*           fLocaleWindow;
 };
 
 
-//-----------------
-
-
-Settings::Settings()
-       :
-       fMessage(kMsgLocaleSettings),
-       fUpdated(false)
-{
-       BFile file;
-       if (_Open(&file, B_READ_ONLY) != B_OK
-               || fMessage.Unflatten(&file) != B_OK) {
-               // set default prefs
-               fMessage.AddString("language", "en");
-               fMessage.AddString("country", "en_US");
-               return;
-       }
-}
-
-
-Settings::~Settings()
-{
-       if (!fUpdated)
-               return;
-
-       BFile file;
-       if (_Open(&file, B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY) != B_OK)
-               return;
-
-       fMessage.Flatten(&file);
-}
-
-
-status_t
-Settings::_Open(BFile* file, int32 mode)
-{
-       BPath path;
-       if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
-               return B_ERROR;
-
-       path.Append("Locale settings");
-
-       return file->SetTo(path.Path(), mode);
-}
-
-
-void
-Settings::UpdateFrom(BMessage* message)
-{
-       BPoint point;
-       if (message->FindPoint("window_location", &point) == B_OK)
-               fMessage.ReplacePoint("window_location", point);
-
-       BString langName;
-       // We make sure there is at least one string before erasing the previous
-       // settings, then we add the remaining ones, if any
-       if (message->FindString("language", &langName) == B_OK) {
-               // Remove any old data as we know we have newer one to replace 
it
-               fMessage.RemoveName("language");
-               for (int i = 0;; i++) {
-                       if (message->FindString("language", i, &langName) != 
B_OK)
-                               break;
-                       fMessage.AddString("language", langName);
-               }
-       }
-
-       if (message->FindString("country", &langName) == B_OK)
-               fMessage.ReplaceString("country", langName);
-
-       fUpdated = true;
-}
-
-
 //     #pragma mark -
 
 
@@ -141,10 +51,15 @@
 {
        fLocaleWindow = new LocaleWindow();
 
+       fOriginalSettings.Load();
+       fSettings = fOriginalSettings;
+
+       /*
        if (fSettings.Message().HasPoint("window_location")) {
                BPoint point = fSettings.Message().FindPoint("window_location");
                fLocaleWindow->MoveTo(point);
        }
+       */
 
        fLocaleWindow->Show();
 }
@@ -152,6 +67,7 @@
 
 LocalePreflet::~LocalePreflet()
 {
+       fSettings.Save();
 }
 
 
@@ -163,6 +79,10 @@
                        fSettings.UpdateFrom(message);
                        break;
 
+               case kMsgRevert:
+                       fSettings = fOriginalSettings;
+                       break;
+
                default:
                        BApplication::MessageReceived(message);
                        break;

Added: haiku/trunk/src/preferences/locale/LocaleSettings.cpp
===================================================================
--- haiku/trunk/src/preferences/locale/LocaleSettings.cpp                       
        (rev 0)
+++ haiku/trunk/src/preferences/locale/LocaleSettings.cpp       2010-07-05 
13:36:16 UTC (rev 37400)
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2010, Adrien Destugues <pulkomandy@xxxxxxxxxxxxxxxxx>.
+ * Distributed under the terms of the MIT License.
+ */
+
+
+#include "LocaleSettings.h"
+
+#include <FindDirectory.h>
+#include <Path.h>
+#include <String.h>
+#include <SupportDefs.h>
+
+
+static const uint32 kMsgLocaleSettings = 'LCst';
+
+
+LocaleSettings::LocaleSettings()
+       :
+       fMessage(kMsgLocaleSettings),
+       fSaved(false)
+{
+       // Set default preferences
+       fMessage.AddString("language", "en");
+       fMessage.AddString("country", "en_US");
+}
+
+
+status_t
+LocaleSettings::Load()
+{
+       BFile file;
+       status_t err;
+       err = _Open(&file, B_READ_ONLY);
+       if (err != B_OK)
+               return err;
+       err = fMessage.Unflatten(&file);
+       if (err == B_OK)
+               fSaved = true;
+       return err;
+}
+
+
+status_t
+LocaleSettings::Save()
+{
+       BFile file;
+       status_t err;
+       err = _Open(&file, B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY);
+       if (err != B_OK)
+               return err;
+
+       err = fMessage.Flatten(&file);
+       if (err == B_OK)
+               fSaved = true;
+       return err;
+}
+
+
+status_t
+LocaleSettings::_Open(BFile* file, int32 mode)
+{
+       BPath path;
+       if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
+               return B_ERROR;
+
+       path.Append("Locale settings");
+
+       return file->SetTo(path.Path(), mode);
+}
+
+
+void
+LocaleSettings::UpdateFrom(BMessage* message)
+{
+       BString langName;
+
+       if (message->FindString("language", &langName) == B_OK) {
+               fMessage.RemoveName("language");
+
+               for (int i = 0;; i++) {
+                       if (message->FindString("language", i, &langName) != 
B_OK)
+                               break;
+                       fMessage.AddString("language", langName);
+               }
+       }
+
+       if (message->FindString("country", &langName) == B_OK)
+               fMessage.ReplaceString("country", langName);
+
+       fSaved = false;
+}
+

Added: haiku/trunk/src/preferences/locale/LocaleSettings.h
===================================================================
--- haiku/trunk/src/preferences/locale/LocaleSettings.h                         
(rev 0)
+++ haiku/trunk/src/preferences/locale/LocaleSettings.h 2010-07-05 13:36:16 UTC 
(rev 37400)
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010, Adrien Destugues <pulkomandy@xxxxxxxxxxxxxxxxx>.
+ * Distributed under the terms of the MIT License.
+ */
+
+
+#ifndef __LOCALE_SETTINGS_H__
+#define __LOCALE_SETTINGS_H__
+
+
+#include <File.h>
+#include <Message.h>
+
+
+class LocaleSettings {
+       public:
+                                       LocaleSettings();
+
+               status_t        Load();
+               status_t        Save();
+
+               bool            Saved();
+               bool            operator==(const LocaleSettings& other);
+
+               void            UpdateFrom(BMessage* message);
+
+               /*
+               void            SetPreferredLanguages();
+               void            GetPreferredLanguages();
+               void            SetCountry();
+               void            GetCountry();
+
+               void            SetDateFormat();
+               void            GetDateFormat();
+               void            SetTimeFormat();
+               void            GetTimeFormat();
+               void            SetNumberFormat();
+               void            GetNumberFormat();
+               void            SetMoneyFormat();
+               void            GetMoneyFormat();
+               */
+
+       private:
+               status_t        _Open(BFile* file, int32 mode);
+
+               BMessage        fMessage;
+               bool            fSaved;
+};
+
+
+#endif
+

Modified: haiku/trunk/src/preferences/locale/LocaleWindow.cpp
===================================================================
--- haiku/trunk/src/preferences/locale/LocaleWindow.cpp 2010-07-05 09:47:48 UTC 
(rev 37399)
+++ haiku/trunk/src/preferences/locale/LocaleWindow.cpp 2010-07-05 13:36:16 UTC 
(rev 37400)
@@ -45,7 +45,6 @@
 static const uint32 kMsgPreferredLanguageDeleted = 'PLDl';
 static const uint32 kMsgCountrySelection = 'csel';
 static const uint32 kMsgDefaults = 'dflt';
-static const uint32 kMsgRevert = 'revt';
 
 static const uint32 kMsgPreferredLanguagesChanged = 'lang';
 
@@ -215,23 +214,23 @@
 
        BButton* button = new BButton(B_TRANSLATE("Defaults"),
                new BMessage(kMsgDefaults));
-#if 0
+
        fRevertButton = new BButton(B_TRANSLATE("Revert"),
                new BMessage(kMsgRevert));
        fRevertButton->SetEnabled(false);
-#endif
 
        BLayoutBuilder::Group<>(this, B_VERTICAL, spacing)
                .Add(tabView)
                .AddGroup(B_HORIZONTAL, spacing)
                        .Add(button)
-//                     .Add(fRevertButton)
+                       .Add(fRevertButton)
                        .AddGlue()
                        .End()
                .SetInsets(spacing, spacing, spacing, spacing)
                .End();
 
        _UpdatePreferredFromLocaleRoster();
+       SettingsReverted();
        CenterOnScreen();
 }
 
@@ -250,7 +249,8 @@
                        break;
 
                case kMsgRevert:
-                       // TODO
+                       be_app_messenger.SendMessage(message);
+                       _UpdatePreferredFromLocaleRoster();
                        break;
 
                case kMsgLanguageDragged:
@@ -345,6 +345,7 @@
                        BMessage newMessage(kMsgSettingsChanged);
                        newMessage.AddString("country", item->ID());
                        be_app_messenger.SendMessage(&newMessage);
+                       SettingsChanged();
 
                        BCountry* country = new BCountry(item->ID());
                        fFormatView->SetCountry(country);
@@ -361,15 +362,25 @@
 bool
 LocaleWindow::QuitRequested()
 {
-       BMessage update(kMsgSettingsChanged);
-       update.AddPoint("window_location", Frame().LeftTop());
-       be_app_messenger.SendMessage(&update);
-
        return true;
 }
 
 
 void
+LocaleWindow::SettingsChanged()
+{
+       fRevertButton->SetEnabled(true);
+}
+
+
+void
+LocaleWindow::SettingsReverted()
+{
+       fRevertButton->SetEnabled(false);
+}
+
+
+void
 LocaleWindow::_PreferredLanguagesChanged()
 {
        BMessage update(kMsgSettingsChanged);
@@ -412,6 +423,8 @@
                }
        }
 
+       SettingsChanged();
+
        EnableUpdates();
 }
 
@@ -495,5 +508,7 @@
        update.AddString("language", "en");
 
        be_app_messenger.SendMessage(&update);
+       SettingsChanged();
        _UpdatePreferredFromLocaleRoster();
 }
+

Modified: haiku/trunk/src/preferences/locale/LocaleWindow.h
===================================================================
--- haiku/trunk/src/preferences/locale/LocaleWindow.h   2010-07-05 09:47:48 UTC 
(rev 37399)
+++ haiku/trunk/src/preferences/locale/LocaleWindow.h   2010-07-05 13:36:16 UTC 
(rev 37400)
@@ -9,6 +9,9 @@
 #include <Window.h>
 
 
+static const uint32 kMsgRevert = 'revt';
+
+
 class BButton;
 class BListView;
 class FormatView;
@@ -24,6 +27,9 @@
        virtual void                            MessageReceived(BMessage* 
message);
        virtual bool                            QuitRequested();
 
+                       void                            SettingsChanged();
+                       void                            SettingsReverted();
+
 private:
                        void                            
_PreferredLanguagesChanged();
                        void                            
_EnableDisableLanguages();
@@ -32,7 +38,6 @@
                                                                        int32 
atIndex = -1);
                        void                            _Defaults();
 
-private:
                        BButton*                        fRevertButton;
                        LanguageListView*       fLanguageListView;
                        LanguageListView*       fPreferredListView;


Other related posts:

  • » [haiku-commits] r37400 - haiku/trunk/src/preferences/locale - pulkomandy