From 30cd0762c8b65f17f24714d7df35882f98cf73d4 Mon Sep 17 00:00:00 2001 From: Michael Pfeiffer Date: Mon, 13 Jan 2003 07:03:35 +0000 Subject: [PATCH] Simplified user interface for selection of link border, bookmarks and cross references definition file. Added ability to close status window automatically after PDF generation. Added button to advanced settings window to open the settings folder in Tracker. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2444 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../pdf/source/AdvancedSettingsWindow.cpp | 144 +++++++++++++----- .../pdf/source/AdvancedSettingsWindow.h | 6 + .../drivers/pdf/source/PageSetupWindow.cpp | 9 ++ .../print/drivers/pdf/source/PrinterDriver.h | 10 ++ .../drivers/pdf/source/PrinterSettings.cpp | 4 + .../drivers/pdf/source/PrinterSettings.h | 1 + .../print/drivers/pdf/source/StatusWindow.cpp | 16 ++ .../print/drivers/pdf/source/StatusWindow.h | 1 + 8 files changed, 157 insertions(+), 34 deletions(-) diff --git a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp b/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp index 1e2a73d736..0c76dd4803 100644 --- a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp +++ b/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.cpp @@ -32,6 +32,11 @@ THE SOFTWARE. #include #include "AdvancedSettingsWindow.h" + +#define SETTINGS_PATH "/boot/home/config/settings/PDF Writer/" +#define BOOKMARKS_PATH SETTINGS_PATH "bookmarks/" +#define XREFS_PATH SETTINGS_PATH "xrefs/" + static BMessage* BorderWidthMessage(uint32 what, float width) { BMessage* m = new BMessage(what); @@ -41,7 +46,7 @@ static BMessage* BorderWidthMessage(uint32 what, float width) // -------------------------------------------------- AdvancedSettingsWindow::AdvancedSettingsWindow(BMessage *settings) - : HWindow(BRect(0,0,400,220), "Advanced Settings", B_TITLED_WINDOW_LOOK, + : HWindow(BRect(0,0,400,180), "Advanced Settings", B_TITLED_WINDOW_LOOK, B_MODAL_APP_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_MINIMIZABLE | B_NOT_ZOOMABLE) { @@ -63,34 +68,43 @@ AdvancedSettingsWindow::AdvancedSettingsWindow(BMessage *settings) x = 5; y = 5; w = r.Width(); h = r.Height(); // web links + if (settings->FindBool("create_web_links", &fCreateLinks) != B_OK) fCreateLinks = false; +/* cb = new BCheckBox(BRect(x, y, x+w-10, y+14), "create_links", "Create links for URLs", new BMessage(CREATE_LINKS_MSG)); panel->AddChild(cb); - if (settings->FindBool("create_web_links", &fCreateLinks) != B_OK) fCreateLinks = false; cb->SetValue(fCreateLinks ? B_CONTROL_ON : B_CONTROL_OFF); y += cb->Bounds().Height() + 5; +*/ BMenuItem* item; if (settings->FindFloat("link_border_width", &fLinkBorderWidth)) fLinkBorderWidth = 1; BPopUpMenu* m = new BPopUpMenu("link_border_width"); m->SetRadioMode(true); - m->AddItem(item = new BMenuItem("no border", BorderWidthMessage(LINK_BORDER_MSG, 0.0))); - if (fLinkBorderWidth == 0) item->SetMarked(true); - m->AddItem(item = new BMenuItem("normal", BorderWidthMessage(LINK_BORDER_MSG, 1.0))); - if (fLinkBorderWidth == 1) item->SetMarked(true); - m->AddItem(item = new BMenuItem("bold", BorderWidthMessage(LINK_BORDER_MSG, 2.0))); - if (fLinkBorderWidth == 2) item->SetMarked(true); + m->AddItem(item = new BMenuItem("None", new BMessage(CREATE_LINKS_MSG))); + item->SetMarked(!fCreateLinks); + m->AddSeparatorItem(); + + m->AddItem(item = new BMenuItem("No Border", BorderWidthMessage(LINK_BORDER_MSG, 0.0))); + if (fCreateLinks && fLinkBorderWidth == 0) item->SetMarked(true); + m->AddItem(item = new BMenuItem("Normal Border", BorderWidthMessage(LINK_BORDER_MSG, 1.0))); + if (fCreateLinks && fLinkBorderWidth == 1) item->SetMarked(true); + m->AddItem(item = new BMenuItem("Bold Border", BorderWidthMessage(LINK_BORDER_MSG, 2.0))); + if (fCreateLinks && fLinkBorderWidth == 2) item->SetMarked(true); - mf = new BMenuField(BRect(x, y, x+w-10, y+14), "link_border_width_menu", "Link Border Width:", m); + mf = new BMenuField(BRect(x, y, x+w-10, y+14), "link_border_width_menu", "Link:", m); mf->ResizeToPreferred(); panel->AddChild(mf); y += mf->Bounds().Height() + 15; // bookmarks + if (settings->FindBool("create_bookmarks", &fCreateBookmarks) != B_OK) fCreateBookmarks = false; +/* cb = new BCheckBox(BRect(x, y, x+w-10, y+14), "create_bookmarks", "Create bookmarks", new BMessage(CREATE_BOOKMARKS_MSG)); cb->SetValue(fCreateBookmarks ? B_CONTROL_ON : B_CONTROL_OFF); panel->AddChild(cb); y += cb->Bounds().Height() + 5; +*/ m = new BPopUpMenu("definition"); m->SetRadioMode(true); @@ -100,46 +114,74 @@ AdvancedSettingsWindow::AdvancedSettingsWindow(BMessage *settings) if (settings->FindString("bookmark_definition_file", &fBookmarkDefinition) != B_OK) fBookmarkDefinition = ""; - BDirectory Folder; + m->AddItem(item = new BMenuItem("None", new BMessage(CREATE_BOOKMARKS_MSG))); + item->SetMarked(!fCreateBookmarks); + m->AddSeparatorItem(); + + BDirectory folder; BEntry entry; // XXX: B_USER_SETTINGS_DIRECTORY - Folder.SetTo ("/boot/home/config/settings/PDF Writer/bookmarks/"); - if (Folder.InitCheck() == B_OK) { - while (Folder.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) { + folder.SetTo (BOOKMARKS_PATH); + if (folder.InitCheck() == B_OK) { + while (folder.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) { char name[B_FILE_NAME_LENGTH]; if (entry.GetName(name) == B_NO_ERROR) m->AddItem (item = new BMenuItem(name, new BMessage(DEFINITION_MSG))); - if (strcmp(name, fBookmarkDefinition.String()) == 0) item->SetMarked(true); + if (fCreateBookmarks && strcmp(name, fBookmarkDefinition.String()) == 0) item->SetMarked(true); } } // cross references if (settings->FindBool("create_xrefs", &fCreateXRefs) != B_OK) fCreateXRefs = false; - +/* cb = new BCheckBox(BRect(x, y, x+w-10, y+14), "create_xrefs", "Create cross references", new BMessage(CREATE_XREFS_MSG)); cb->SetValue(fCreateXRefs ? B_CONTROL_ON : B_CONTROL_OFF); panel->AddChild(cb); y += cb->Bounds().Height() + 5; - +*/ m = new BPopUpMenu("cross references"); m->SetRadioMode(true); mf = new BMenuField(BRect(x, y, x+w-10, y+14), "xrefs_menu", "Cross References File:", m); panel->AddChild(mf); + y += mf->Bounds().Height() + 15; if (settings->FindString("xrefs_file", &fXRefs) != B_OK) fXRefs = ""; + m->AddItem(item = new BMenuItem("None", new BMessage(CREATE_XREFS_MSG))); + item->SetMarked(!fCreateXRefs); + m->AddSeparatorItem(); + // XXX: B_USER_SETTINGS_DIRECTORY - Folder.SetTo ("/boot/home/config/settings/PDF Writer/xrefs/"); - if (Folder.InitCheck() == B_OK) { - while (Folder.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) { + folder.SetTo (XREFS_PATH); + if (folder.InitCheck() == B_OK) { + while (folder.GetNextEntry(&entry) != B_ENTRY_NOT_FOUND) { char name[B_FILE_NAME_LENGTH]; if (entry.GetName(name) == B_NO_ERROR) m->AddItem (item = new BMenuItem(name, new BMessage(XREFS_MSG))); - if (strcmp(name, fXRefs.String()) == 0) item->SetMarked(true); + if (fCreateXRefs && strcmp(name, fXRefs.String()) == 0) item->SetMarked(true); } } + // close automatically status window after pdf generation + // - Never + // - No Errors + // - No Errors and Warnings + // - Always + m = new BPopUpMenu("close option"); + m->SetRadioMode(true); + mf = new BMenuField(BRect(x, y, x+w-10, y+14), "close_option_menu", "Close status window when done:", m); + panel->AddChild(mf); + + int32 closeOption; + if (settings->FindInt32("close_option", &closeOption) != B_OK) closeOption = kNever; + fCloseOption = (CloseOption)closeOption; + AddMenuItem(m, "Never", kNever); + AddMenuItem(m, "No Errors", kNoErrors); + AddMenuItem(m, "No Errors or Warnings", kNoErrorsOrWarnings); + AddMenuItem(m, "No Errors, Warnings or Info", kNoErrorsWarningsOrInfo); + AddMenuItem(m, "Always", kAlways); + // add a "OK" button, and make it default button = new BButton(r, NULL, "OK", new BMessage(OK_MSG), B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM); @@ -155,8 +197,19 @@ AdvancedSettingsWindow::AdvancedSettingsWindow(BMessage *settings) B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM); button->GetPreferredSize(&w, &h); button->ResizeToPreferred(); - button->MoveTo(x - w - 8, y); + x -= w + 8; + button->MoveTo(x, y); panel->AddChild(button); + + // add a "Open Settings Folder" button + button = new BButton(r, NULL, "Open Settings Folder", new BMessage(OPEN_SETTINGS_FOLDER_MSG), + B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM); + button->GetPreferredSize(&w, &h); + button->ResizeToPreferred(); + x = r.left + 8; + button->MoveTo(x, y); + panel->AddChild(button); + // add a separator line... BBox * line = new BBox(BRect(r.left, y - 9, r.right, y - 8), NULL, @@ -207,6 +260,21 @@ AdvancedSettingsWindow::UpdateSettings() } else { fSettings->AddString("xrefs_file", fXRefs.String()); } + + if (fSettings->HasInt32("close_option")) { + fSettings->ReplaceInt32("close_option", fCloseOption); + } else { + fSettings->AddInt32("close_option", fCloseOption); + } +} + +// -------------------------------------------------- +void AdvancedSettingsWindow::AddMenuItem(BPopUpMenu* menu, const char* label, CloseOption option) { + BMessage* msg = new BMessage(AUTO_CLOSE_MSG); + msg->AddInt32("close_option", option); + BMenuItem* item = new BMenuItem(label, msg); + menu->AddItem(item); + if (fCloseOption == option) item->SetMarked(true); } @@ -216,6 +284,7 @@ AdvancedSettingsWindow::MessageReceived(BMessage *msg) { float w; void *source; + int32 closeOption; if (msg->FindPointer("source", &source) != B_OK) source = NULL; @@ -227,43 +296,50 @@ AdvancedSettingsWindow::MessageReceived(BMessage *msg) break; case CREATE_LINKS_MSG: - if (source) { - BCheckBox* cb = (BCheckBox*)source; - fCreateLinks = cb->Value() == B_CONTROL_ON; - } + fCreateLinks = false; break; case LINK_BORDER_MSG: if (msg->FindFloat("width", &w) == B_OK) { - fLinkBorderWidth = w; + fLinkBorderWidth = w; + fCreateLinks = true; } break; case CREATE_BOOKMARKS_MSG: - if (source) { - BCheckBox* cb = (BCheckBox*)source; - fCreateBookmarks = cb->Value() == B_CONTROL_ON; - } + fCreateBookmarks = false; break; case DEFINITION_MSG: if (source) { BMenuItem* item = (BMenuItem*)source; fBookmarkDefinition = item->Label(); + fCreateBookmarks = true; } break; case CREATE_XREFS_MSG: - if (source) { - BCheckBox* cb = (BCheckBox*)source; - fCreateXRefs = cb->Value() == B_CONTROL_ON; - } + fCreateXRefs = false; break; case XREFS_MSG: if (source) { BMenuItem* item = (BMenuItem*)source; fXRefs = item->Label(); + fCreateXRefs = true; + } + break; + + case AUTO_CLOSE_MSG: + if (msg->FindInt32("close_option", &closeOption) == B_OK) { + fCloseOption = (CloseOption)closeOption; + } + break; + + case OPEN_SETTINGS_FOLDER_MSG: + { + char* argv[] = { SETTINGS_PATH }; + be_roster->Launch("application/x-vnd.Be-TRAK", 1, argv); } break; diff --git a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h b/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h index 7bef94e350..7a54bb77db 100644 --- a/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h +++ b/src/add-ons/print/drivers/pdf/source/AdvancedSettingsWindow.h @@ -40,6 +40,7 @@ THE SOFTWARE. #include #include #include "Utils.h" +#include "PrinterDriver.h" class AdvancedSettingsWindow : public HWindow { @@ -60,6 +61,8 @@ public: DEFINITION_MSG = 'defi', CREATE_XREFS_MSG = 'cxrf', XREFS_MSG = 'xref', + AUTO_CLOSE_MSG = 'acls', + OPEN_SETTINGS_FOLDER_MSG = 'opsf', }; // Virtual function overrides @@ -67,6 +70,7 @@ public: virtual void MessageReceived(BMessage *msg); private: + BMessage* fSettings; bool fCreateLinks; @@ -75,8 +79,10 @@ private: BString fBookmarkDefinition; bool fCreateXRefs; BString fXRefs; + CloseOption fCloseOption; void UpdateSettings(); + void AddMenuItem(BPopUpMenu* menu, const char* label, CloseOption option); }; #endif diff --git a/src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp b/src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp index 7ae5b8a5fc..d9fb2e2fad 100644 --- a/src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp +++ b/src/add-ons/print/drivers/pdf/source/PageSetupWindow.cpp @@ -435,6 +435,7 @@ PageSetupWindow::UpdateSetupMessage() bool b; float f; BString s; + int32 i; if (fAdvancedSettings.FindBool("create_web_links", &b) == B_OK) { if (fSetupMsg->HasBool("create_web_links")) { @@ -484,6 +485,14 @@ PageSetupWindow::UpdateSetupMessage() } } + if (fAdvancedSettings.FindInt32("close_option", &i) == B_OK) { + if (fSetupMsg->HasInt32("close_option")) { + fSetupMsg->ReplaceInt32("close_option", i); + } else { + fSetupMsg->AddInt32("close_option", i); + } + } + // save the settings to be new defaults PrinterSettings *ps = new PrinterSettings(fPrinterDirName.String()); if (ps->InitCheck() == B_OK) { diff --git a/src/add-ons/print/drivers/pdf/source/PrinterDriver.h b/src/add-ons/print/drivers/pdf/source/PrinterDriver.h index b0efe90539..178081b29a 100644 --- a/src/add-ons/print/drivers/pdf/source/PrinterDriver.h +++ b/src/add-ons/print/drivers/pdf/source/PrinterDriver.h @@ -50,6 +50,16 @@ extern "C" { class StatusWindow; +// close StatusWindow after pdf generation +enum CloseOption { + kAlways, + kNoErrors, + kNoErrorsOrWarnings, + kNoErrorsWarningsOrInfo, + kNever, +}; + + /** * Class PrinterDriver diff --git a/src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp b/src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp index 1edb943c31..de03612468 100644 --- a/src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp +++ b/src/add-ons/print/drivers/pdf/source/PrinterSettings.cpp @@ -180,6 +180,7 @@ PrinterSettings::GetDefaults(BMessage *msg) msg->AddString("bookmark_definition_file", BOOKMARK_DEFINITION_FILE); msg->AddBool("create_xrefs", CREATE_XREFS); msg->AddString("xrefs_file", XREFS_FILE); + msg->AddInt32("close_option", CLOSE_OPTION); // create pdf_printer_settings file prefs->SaveSettings(msg); @@ -255,6 +256,9 @@ PrinterSettings::Validate(const BMessage *msg) if (msg->FindString("xrefs_file", &s) != B_OK) { return B_ERROR; } + if (msg->FindInt32("close_option", &i32) != B_OK) { + return B_ERROR; + } // message ok return B_OK; } diff --git a/src/add-ons/print/drivers/pdf/source/PrinterSettings.h b/src/add-ons/print/drivers/pdf/source/PrinterSettings.h index 4f06d4df55..aed0a606cc 100644 --- a/src/add-ons/print/drivers/pdf/source/PrinterSettings.h +++ b/src/add-ons/print/drivers/pdf/source/PrinterSettings.h @@ -56,6 +56,7 @@ const bool CREATE_BOOKMARKS = false; const char BOOKMARK_DEFINITION_FILE[] = ""; const bool CREATE_XREFS = false; const char XREFS_FILE[] = ""; +const int32 CLOSE_OPTION = 0; /** * Class diff --git a/src/add-ons/print/drivers/pdf/source/StatusWindow.cpp b/src/add-ons/print/drivers/pdf/source/StatusWindow.cpp index cef2b0f118..61acf6974d 100644 --- a/src/add-ons/print/drivers/pdf/source/StatusWindow.cpp +++ b/src/add-ons/print/drivers/pdf/source/StatusWindow.cpp @@ -49,6 +49,11 @@ StatusWindow::StatusWindow(int32 passes, int32 pages, PrinterDriver *pd) // fPopyCount = 0; fReportIndex = 0; fCloseSem = -1; + int32 closeOption; + + if (pd->JobMsg()->FindInt32("close_option", &closeOption) != B_OK) closeOption = kNever; + fCloseOption = (CloseOption)closeOption; + BRect r(0, 0, Frame().Width(), Frame().Height()); // view for the background color @@ -206,6 +211,17 @@ void StatusWindow::WaitForClose() { fCancel->SetLabel("Close"); fCancel->SetEnabled(true); UpdateReport(); + + bool hasErrors = r->Count(kError); + bool hasErrorsOrWarnings = hasErrors || r->Count(kWarning); + bool hasErrorsWarningsOrInfo = hasErrorsOrWarnings || r->Count(kInfo); + + if (fCloseOption == kAlways || + fCloseOption == kNoErrors && !hasErrors || + fCloseOption == kNoErrorsOrWarnings && !hasErrorsOrWarnings || + fCloseOption == kNoErrorsWarningsOrInfo && !hasErrorsWarningsOrInfo) { + PostMessage('cncl'); + } Unlock(); acquire_sem(fCloseSem); diff --git a/src/add-ons/print/drivers/pdf/source/StatusWindow.h b/src/add-ons/print/drivers/pdf/source/StatusWindow.h index 2c5ca8bd3d..fba2160b5f 100644 --- a/src/add-ons/print/drivers/pdf/source/StatusWindow.h +++ b/src/add-ons/print/drivers/pdf/source/StatusWindow.h @@ -56,6 +56,7 @@ private: int32 fReportIndex; BTextView* fReport; sem_id fCloseSem; + CloseOption fCloseOption; void UpdateReport(); public: