From 0d84b3133439c9c988fc33babd83781378200349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Tue, 13 Apr 2010 11:25:15 +0000 Subject: [PATCH] Patch by Shisui: Automatic filename basename selection and "Save" as default button for Screenshot. Fixes #5626. Thanks a lot! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36208 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/screenshot/ScreenshotWindow.cpp | 30 ++++++++++++++++++++++-- src/apps/screenshot/ScreenshotWindow.h | 2 ++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/apps/screenshot/ScreenshotWindow.cpp b/src/apps/screenshot/ScreenshotWindow.cpp index bc0b5b33f0..2a3bc36c4d 100644 --- a/src/apps/screenshot/ScreenshotWindow.cpp +++ b/src/apps/screenshot/ScreenshotWindow.cpp @@ -159,6 +159,9 @@ ScreenshotWindow::MessageReceived(BMessage* message) BCardLayout* layout = dynamic_cast (GetLayout()); if (layout) layout->SetVisibleItem(1L); + + fSaveScreenshot->MakeDefault(true); + SetTitle(TR("Save screenshot")); break; } @@ -168,12 +171,14 @@ ScreenshotWindow::MessageReceived(BMessage* message) _TakeScreenshot(); _UpdatePreviewPanel(); Show(); + _UpdateFilenameSelection(); break; case kImageOutputFormat: message->FindInt32("be:type", &fImageFileType); message->FindInt32("be:translator", &fTranslator); fNameControl->SetText(_FindValidFileName(fNameControl->Text()).String()); + _UpdateFilenameSelection(); break; case kLocationChanged: @@ -183,6 +188,7 @@ ScreenshotWindow::MessageReceived(BMessage* message) fLastSelectedPath = static_cast (source); fNameControl->SetText(_FindValidFileName(fNameControl->Text()).String()); + _UpdateFilenameSelection(); break; } @@ -235,6 +241,7 @@ ScreenshotWindow::MessageReceived(BMessage* message) if (layout) layout->SetVisibleItem(0L); + SetDefaultButton(NULL); SetTitle(TR("Take Screenshot")); fBackToSave->SetEnabled(true); @@ -280,8 +287,11 @@ ScreenshotWindow::_InitWindow() _TakeScreenshot(); _UpdatePreviewPanel(); layout->SetVisibleItem(1L); - } else + fSaveScreenshot->MakeDefault(true); + } else { layout->SetVisibleItem(0L); + SetDefaultButton(NULL); + } } @@ -392,6 +402,9 @@ ScreenshotWindow::_SetupSecondLayoutItem(BCardLayout* layout) BBox* divider = new BBox(B_FANCY_BORDER, NULL); divider->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, 1)); + fSaveScreenshot = new BButton("", + TR("Save"), new BMessage(kFinishScreenshot)); + BGridLayout* gridLayout = BGridLayoutBuilder(0.0, 5.0) .Add(fNameControl->CreateLabelLayoutItem(), 0, 0) .Add(fNameControl->CreateTextViewLayoutItem(), 1, 0) @@ -416,7 +429,7 @@ ScreenshotWindow::_SetupSecondLayoutItem(BCardLayout* layout) .Add(new BButton("", TR("Options"), new BMessage(kShowOptions))) .AddGlue() .Add(new BButton("", TR("Cancel"), new BMessage(B_QUIT_REQUESTED))) - .Add(new BButton("", TR("Save"), new BMessage(kFinishScreenshot))) + .Add(fSaveScreenshot) .End() .SetInsets(10.0, 10.0, 10.0, 10.0) ); @@ -561,10 +574,23 @@ ScreenshotWindow::_UpdatePreviewPanel() if (layout) layout->SetVisibleItem(1L); + _UpdateFilenameSelection(); + SetTitle(TR("Save screenshot")); } +void +ScreenshotWindow::_UpdateFilenameSelection() +{ + fNameControl->MakeFocus(true); + fNameControl->TextView()->Select(0, + fNameControl->TextView()->TextLength() - + fExtension.Length()); + fNameControl->TextView()->ScrollToSelection(); +} + + BString ScreenshotWindow::_FindValidFileName(const char* name) { diff --git a/src/apps/screenshot/ScreenshotWindow.h b/src/apps/screenshot/ScreenshotWindow.h index f556a9c467..7928c041e1 100644 --- a/src/apps/screenshot/ScreenshotWindow.h +++ b/src/apps/screenshot/ScreenshotWindow.h @@ -56,6 +56,7 @@ private: BString& label, int32 index, bool markItem); void _UpdatePreviewPanel(); + void _UpdateFilenameSelection(); BString _FindValidFileName(const char* name); int32 _PathIndexInMenu(const BString& path) const; @@ -76,6 +77,7 @@ private: BCheckBox* fShowMouse; BButton* fBackToSave; BButton* fTakeScreenshot; + BButton* fSaveScreenshot; BTextControl* fNameControl; BMenu* fTranslatorMenu; BMenu* fOutputPathMenu;