HaikuDepoStore and restore column state

* Better mechanism totore and restore window
   settiings.
This commit is contained in:
Stephan Aßmus
2013-09-29 14:57:08 +02:00
parent 81a828b660
commit 572c729258
6 changed files with 42 additions and 16 deletions
+12 -10
View File
@@ -37,10 +37,12 @@ bool
App::QuitRequested() App::QuitRequested()
{ {
if (fMainWindow->LockLooperWithTimeout(1500000) == B_OK) { if (fMainWindow->LockLooperWithTimeout(1500000) == B_OK) {
BRect windowFrame = fMainWindow->Frame(); BMessage windowSettings;
fMainWindow->StoreSettings(windowSettings);
fMainWindow->UnlockLooper(); fMainWindow->UnlockLooper();
_StoreSettings(windowFrame); _StoreSettings(windowSettings);
} }
return true; return true;
@@ -60,7 +62,7 @@ App::ReadyToRun()
make_sure_frame_is_on_screen(frame); make_sure_frame_is_on_screen(frame);
fMainWindow = new MainWindow(frame); fMainWindow = new MainWindow(frame, settings);
fMainWindow->Show(); fMainWindow->Show();
} }
@@ -71,9 +73,11 @@ App::MessageReceived(BMessage* message)
switch (message->what) { switch (message->what) {
case MSG_MAIN_WINDOW_CLOSED: case MSG_MAIN_WINDOW_CLOSED:
{ {
BRect windowFrame; BMessage windowSettings;
if (message->FindRect("window frame", &windowFrame) == B_OK) if (message->FindMessage("window settings",
_StoreSettings(windowFrame); &windowSettings) == B_OK) {
_StoreSettings(windowSettings);
}
Quit(); Quit();
break; break;
@@ -87,10 +91,8 @@ App::MessageReceived(BMessage* message)
void void
App::_StoreSettings(const BRect& windowFrame) App::_StoreSettings(const BMessage& windowSettings)
{ {
BMessage settings; save_settings(&windowSettings, "main_settings", "HaikuDepot");
settings.AddRect("window frame", windowFrame);
save_settings(&settings, "main_settings", "HaikuDepot");
} }
+1 -1
View File
@@ -22,7 +22,7 @@ public:
virtual void MessageReceived(BMessage* message); virtual void MessageReceived(BMessage* message);
private: private:
void _StoreSettings(const BRect& windowFrame); void _StoreSettings(const BMessage& windowSettings);
MainWindow* fMainWindow; MainWindow* fMainWindow;
}; };
+23 -2
View File
@@ -72,7 +72,7 @@ struct RefreshWorkerParameters {
}; };
MainWindow::MainWindow(BRect frame) MainWindow::MainWindow(BRect frame, const BMessage& settings)
: :
BWindow(frame, B_TRANSLATE_SYSTEM_NAME("HaikuDepot"), BWindow(frame, B_TRANSLATE_SYSTEM_NAME("HaikuDepot"),
B_DOCUMENT_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_DOCUMENT_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
@@ -106,6 +106,11 @@ MainWindow::MainWindow(BRect frame)
fSplitView->SetCollapsible(0, false); fSplitView->SetCollapsible(0, false);
fSplitView->SetCollapsible(1, false); fSplitView->SetCollapsible(1, false);
// Restore settings
BMessage columnSettings;
if (settings.FindMessage("column settings", &columnSettings) == B_OK)
fPackageListView->LoadState(&columnSettings);
_StartRefreshWorker(); _StartRefreshWorker();
fPendingActionsSem = create_sem(0, "PendingPackageActions"); fPendingActionsSem = create_sem(0, "PendingPackageActions");
@@ -135,8 +140,12 @@ MainWindow::~MainWindow()
bool bool
MainWindow::QuitRequested() MainWindow::QuitRequested()
{ {
BMessage settings;
StoreSettings(settings);
BMessage message(MSG_MAIN_WINDOW_CLOSED); BMessage message(MSG_MAIN_WINDOW_CLOSED);
message.AddRect("window frame", Frame()); message.AddMessage("window settings", &settings);
be_app->PostMessage(&message); be_app->PostMessage(&message);
return true; return true;
@@ -229,6 +238,18 @@ MainWindow::MessageReceived(BMessage* message)
} }
void
MainWindow::StoreSettings(BMessage& settings) const
{
settings.AddRect("window frame", Frame());
BMessage columnSettings;
fPackageListView->SaveState(&columnSettings);
settings.AddMessage("column settings", &columnSettings);
}
void void
MainWindow::PackageChanged(const PackageInfoEvent& event) MainWindow::PackageChanged(const PackageInfoEvent& event)
{ {
+4 -1
View File
@@ -29,13 +29,16 @@ enum {
class MainWindow : public BWindow, private PackageInfoListener, class MainWindow : public BWindow, private PackageInfoListener,
private PackageActionHandler { private PackageActionHandler {
public: public:
MainWindow(BRect frame); MainWindow(BRect frame,
const BMessage& settings);
virtual ~MainWindow(); virtual ~MainWindow();
// BWindow interface // BWindow interface
virtual bool QuitRequested(); virtual bool QuitRequested();
virtual void MessageReceived(BMessage* message); virtual void MessageReceived(BMessage* message);
void StoreSettings(BMessage& message) const;
private: private:
// PackageInfoListener // PackageInfoListener
virtual void PackageChanged( virtual void PackageChanged(
+1 -1
View File
@@ -46,7 +46,7 @@ load_settings(BMessage* message, const char* fileName, const char* folder)
status_t status_t
save_settings(BMessage* message, const char* fileName, const char* folder) save_settings(const BMessage* message, const char* fileName, const char* folder)
{ {
if (message == NULL || fileName == NULL || fileName[0] == '\0') if (message == NULL || fileName == NULL || fileName[0] == '\0')
return B_BAD_VALUE; return B_BAD_VALUE;
+1 -1
View File
@@ -17,7 +17,7 @@ class BWindow;
status_t load_settings(BMessage* message, const char* fileName, status_t load_settings(BMessage* message, const char* fileName,
const char* folder = NULL); const char* folder = NULL);
status_t save_settings(BMessage* message, const char* fileName, status_t save_settings(const BMessage* message, const char* fileName,
const char* folder = NULL); const char* folder = NULL);
bool make_sure_frame_is_on_screen(BRect& frame, float borderWidth = 5.0f, bool make_sure_frame_is_on_screen(BRect& frame, float borderWidth = 5.0f,