diff --git a/src/servers/print/ConfigWindow.cpp b/src/servers/print/ConfigWindow.cpp index ea9dd230ed..2b53242f02 100644 --- a/src/servers/print/ConfigWindow.cpp +++ b/src/servers/print/ConfigWindow.cpp @@ -44,7 +44,7 @@ #include ConfigWindow::ConfigWindow(config_setup_kind kind, Printer* defaultPrinter, BMessage* settings, AutoReply* sender) - : BWindow(BRect(30, 30, 200, 125), "Printer Setup", + : BWindow(ConfigWindow::GetWindowFrame(), "Printer Setup", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE) , fKind(kind) , fDefaultPrinter(defaultPrinter) @@ -112,9 +112,9 @@ void ConfigWindow::Go() { void ConfigWindow::MessageReceived(BMessage* m) { switch (m->what) { - case MSG_PAGE_SETUP: PageSetup(m); + case MSG_PAGE_SETUP: Setup(kPageSetup); break; - case MSG_JOB_SETUP: JobSetup(m); + case MSG_JOB_SETUP: Setup(kJobSetup); break; case MSG_PRINTER_SELECTED: { BString printer; @@ -130,6 +130,27 @@ void ConfigWindow::MessageReceived(BMessage* m) { } } +void ConfigWindow::FrameMoved(BPoint p) { + BRect frame = GetWindowFrame(); + frame.OffsetTo(p); + SetWindowFrame(frame); +} + +BRect ConfigWindow::GetWindowFrame() { + BAutolock lock(gLock); + if (lock.IsLocked()) { + return Settings::GetSettings()->ConfigWindowFrame(); + } + return BRect(30, 30, 300, 300); +} + +void ConfigWindow::SetWindowFrame(BRect r) { + BAutolock lock(gLock); + if (lock.IsLocked()) { + Settings::GetSettings()->SetConfigWindowFrame(r); + } +} + void ConfigWindow::PrinterForMimeType() { BAutolock lock(gLock); if (fCurrentPrinter) { @@ -204,29 +225,19 @@ void ConfigWindow::UpdateSettings(bool read) { } } -void ConfigWindow::PageSetup(BMessage* m) { +void ConfigWindow::Setup(config_setup_kind kind) { if (fCurrentPrinter) { Hide(); UpdateSettings(true); - bool ok = fCurrentPrinter->ConfigurePage(fPageSettings) == B_OK; + bool ok; + if (kind == kPageSetup) { + ok = fCurrentPrinter->ConfigurePage(fPageSettings) == B_OK; + } else { + ok = fCurrentPrinter->ConfigureJob(fJobSettings) == B_OK; + } if (ok) UpdateSettings(false); - if (ok && fKind == kPageSetup) { - fSender->SetReply(&fJobSettings); - Quit(); - } else { - Show(); - } - } -} - -void ConfigWindow::JobSetup(BMessage* m) { - if (fCurrentPrinter) { - Hide(); - UpdateSettings(true); - bool ok = fCurrentPrinter->ConfigureJob(fJobSettings) == B_OK; - if (ok) UpdateSettings(false); - if (ok && fKind == kJobSetup) { - fSender->SetReply(&fJobSettings); + if (ok && fKind == kind) { + fSender->SetReply(kind == kPageSetup ? &fPageSettings : &fJobSettings); Quit(); } else { Show(); diff --git a/src/servers/print/ConfigWindow.h b/src/servers/print/ConfigWindow.h index 9c3c702035..5117bb29d8 100644 --- a/src/servers/print/ConfigWindow.h +++ b/src/servers/print/ConfigWindow.h @@ -56,13 +56,17 @@ public: void MessageReceived(BMessage* m); + void FrameMoved(BPoint p); + + static BRect GetWindowFrame(); + static void SetWindowFrame(BRect frame); + private: void PrinterForMimeType(); void SetupPrintersMenu(BMenu* menu); void UpdateAppSettings(const char* mime, const char* printer); void UpdateSettings(bool read); - void PageSetup(BMessage* m); - void JobSetup(BMessage* m); + void Setup(config_setup_kind); config_setup_kind fKind; Printer* fDefaultPrinter; diff --git a/src/servers/print/PrintServerApp.cpp b/src/servers/print/PrintServerApp.cpp index 1af749948c..28b16299ff 100644 --- a/src/servers/print/PrintServerApp.cpp +++ b/src/servers/print/PrintServerApp.cpp @@ -605,10 +605,16 @@ bool PrintServerApp::OpenSettings(BFile& file, bool forReading) { void PrintServerApp::LoadSettings() { BFile file; - if (OpenSettings(file, true)) fSettings->Load(&file); + if (OpenSettings(file, true)) { + fSettings->Load(&file); + fUseConfigWindow = fSettings->UseConfigWindow(); + } } void PrintServerApp::SaveSettings() { BFile file; - if (OpenSettings(file, false)) fSettings->Save(&file); + if (OpenSettings(file, false)) { + fSettings->SetUseConfigWindow(fUseConfigWindow); + fSettings->Save(&file); + } } diff --git a/src/servers/print/Settings.cpp b/src/servers/print/Settings.cpp index a124c58a49..9c66bcc417 100644 --- a/src/servers/print/Settings.cpp +++ b/src/servers/print/Settings.cpp @@ -57,17 +57,18 @@ PrinterSettings::PrinterSettings(const char* printer, BMessage* pageSettings, BM Settings* Settings::fSingleton = NULL; +static const BRect kConfigWindowFrame(30, 30, 220, 120); + +Settings::Settings() + : fApps(true) // owns AppSettings + , fPrinters(true) // owns PrinterSettings + , fUseConfigWindow(true) + , fConfigWindowFrame(kConfigWindowFrame) +{ +} + Settings::~Settings() { fSingleton = NULL; - - for (int i = 0; i < AppSettingsCount(); i++) { - AppSettings* app = AppSettingsAt(i); - app->Release(); - } - for (int i = 0; i < PrinterSettingsCount(); i++) { - PrinterSettings* p = PrinterSettingsAt(i); - p->Release(); - } } Settings* Settings::GetSettings() { @@ -114,6 +115,9 @@ void Settings::Save(BFile* file) { m.AddMessage("S", p->GetPageSettings()); m.AddMessage("J", p->GetJobSettings()); } + + m.AddBool("UseConfigWindow", fUseConfigWindow); + m.AddRect("ConfigWindowFrame", fConfigWindowFrame); m.Flatten(file); } @@ -133,5 +137,11 @@ void Settings::Load(BFile* file) { m.FindMessage("J", i, &job) == B_OK; i ++) { AddPrinterSettings(new PrinterSettings(printer.String(), &page, &job)); } + + if (m.FindBool("UseConfigWindow", &fUseConfigWindow) != B_OK) + fUseConfigWindow = true; + + if (m.FindRect("ConfigWindowFrame", &fConfigWindowFrame) != B_OK) + fConfigWindowFrame = BRect(kConfigWindowFrame); } } diff --git a/src/servers/print/Settings.h b/src/servers/print/Settings.h index da61b2848e..3f52bddac0 100644 --- a/src/servers/print/Settings.h +++ b/src/servers/print/Settings.h @@ -37,10 +37,10 @@ #include -class AppSettings : public Object { +class AppSettings { private: - BString fMimeType; - BString fPrinter; + BString fMimeType; // application signature + BString fPrinter; // printer used by application (default == empty string) public: AppSettings(const char* mimeType, const char* printer = NULL); @@ -53,11 +53,11 @@ public: }; -class PrinterSettings : public Object { +class PrinterSettings { private: BString fPrinter; - BMessage fPageSettings; - BMessage fJobSettings; + BMessage fPageSettings; // default page settings + BMessage fJobSettings; // default job settings public: PrinterSettings(const char* printer, BMessage* pageSettings = NULL, BMessage* jobSettings = NULL); @@ -65,6 +65,7 @@ public: const char* GetPrinter() const { return fPrinter.String(); } BMessage* GetPageSettings() { return &fPageSettings; } BMessage* GetJobSettings() { return &fJobSettings; } + void SetPrinter(const char* p) { fPrinter = p; } void SetPageSettings(BMessage* s) { fPageSettings = *s; } void SetJobSettings(BMessage* s) { fJobSettings = *s; } @@ -74,9 +75,11 @@ class Settings { private: BObjectList fApps; BObjectList fPrinters; + bool fUseConfigWindow; + BRect fConfigWindowFrame; static Settings* fSingleton; - Settings() { } + Settings(); public: static Settings* GetSettings(); @@ -93,6 +96,11 @@ public: void AddPrinterSettings(PrinterSettings* s) { fPrinters.AddItem(s); } void RemovePrinterSettings(int i); PrinterSettings* FindPrinterSettings(const char* printer); + + bool UseConfigWindow() const { return fUseConfigWindow; } + void SetUseConfigWindow(bool b) { fUseConfigWindow = b; } + BRect ConfigWindowFrame() const { return fConfigWindowFrame; } + void SetConfigWindowFrame(BRect r) { fConfigWindowFrame = r; } void Save(BFile* settings_file); void Load(BFile* settings_file);