diff --git a/src/prefs/sounds/Utils/BitmapView.h b/src/prefs/sounds/Utils/BitmapView.h deleted file mode 100644 index 618c231fa1..0000000000 --- a/src/prefs/sounds/Utils/BitmapView.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __HBITMAPVIEW_H__ -#define __HBITMAPVIEW_H__ - -#include -#include - -class BitmapView :public BView { -public: - BitmapView(BRect rect, - const char* name, - uint32 resizing_mode, - BBitmap *bitmap, - rgb_color bgcolor = ui_color(B_PANEL_BACKGROUND_COLOR)); -virtual ~BitmapView(); -virtual void Draw(BRect rect); - void SetBitmap(BBitmap *bitmap); -protected: - BBitmap *fBitmap; -}; -#endif \ No newline at end of file diff --git a/src/prefs/sounds/Utils/CTextView.cpp b/src/prefs/sounds/Utils/CTextView.cpp deleted file mode 100644 index e121ee6c2b..0000000000 --- a/src/prefs/sounds/Utils/CTextView.cpp +++ /dev/null @@ -1,118 +0,0 @@ -//*** LICENSE *** -//ColumnListView, its associated classes and source code, and the other components of Santa's Gift Bag are -//being made publicly available and free to use in freeware and shareware products with a price under $25 -//(I believe that shareware should be cheap). For overpriced shareware (hehehe) or commercial products, -//please contact me to negotiate a fee for use. After all, I did work hard on this class and invested a lot -//of time into it. That being said, DON'T WORRY I don't want much. It totally depends on the sort of project -//you're working on and how much you expect to make off it. If someone makes money off my work, I'd like to -//get at least a little something. If any of the components of Santa's Gift Bag are is used in a shareware -//or commercial product, I get a free copy. The source is made available so that you can improve and extend -//it as you need. In general it is best to customize your ColumnListView through inheritance, so that you -//can take advantage of enhancements and bug fixes as they become available. Feel free to distribute the -//ColumnListView source, including modified versions, but keep this documentation and license with it. - - -#include "CTextView.h" - -CTextView::CTextView(BRect a_frame,const char* a_name,int32 a_resize_mode,int32 a_flags) -: BTextView(a_frame, a_name, BRect(4.0,4.0,a_frame.right-a_frame.left-4.0,a_frame.bottom-a_frame.top-4.0), - a_resize_mode,a_flags) -{ - ResetTextRect(); - m_modified = false; - m_modified_disabled = false; -} - - -CTextView::~CTextView() -{ } - - -void CTextView::DetachedFromWindow() -{ - //This is sort of what the destructor should do, but... Derived class's destructors get called before - //CTextView's destructor so StoreChange won't get to the derived class's version of it. - if(m_modified) - { - StoreChange(); - m_modified = false; - } -} - - -void CTextView::FrameResized(float a_width, float a_height) -{ - ResetTextRect(); - BTextView::FrameResized(a_width,a_height); -} - - -void CTextView::MakeFocus(bool a_focused) -{ - BTextView::MakeFocus(a_focused); - if(!a_focused && m_modified) - { - StoreChange(); - m_modified = false; - } -} - - -void CTextView::InsertText(const char *a_text, int32 a_length, int32 a_offset, - const text_run_array *a_runs) -{ - BTextView::InsertText(a_text, a_length, a_offset, a_runs); - if(!m_modified_disabled) - Modified(); -} - - -void CTextView::Modified() -{ - m_modified = true; -} - - -void CTextView::SetText(const char *text, int32 length, const text_run_array *runs) -{ - m_modified_disabled = true; - BTextView::SetText(text,length,runs); - m_modified_disabled = false; -} - - -void CTextView::SetText(const char *text, const text_run_array *runs) -{ - m_modified_disabled = true; - BTextView::SetText(text,runs); - m_modified_disabled = false; -} - - -void CTextView::SetText(BFile *file, int32 offset, int32 length, const text_run_array *runs) -{ - m_modified_disabled = true; - BTextView::SetText(file,offset,length,runs); - m_modified_disabled = false; -} - - -void CTextView::StoreChange() -{ } - - -void CTextView::ResetTextRect() -{ - BRect textRect = Bounds(); - textRect.left = 4.0; - textRect.top = 4.0; - textRect.right -= 4.0; - textRect.bottom -= 4.0; - SetTextRect(textRect); -} - - -bool CTextView::HasBeenModified() -{ - return m_modified; -} diff --git a/src/prefs/sounds/Utils/CTextView.h b/src/prefs/sounds/Utils/CTextView.h deleted file mode 100644 index bcb1d3e308..0000000000 --- a/src/prefs/sounds/Utils/CTextView.h +++ /dev/null @@ -1,58 +0,0 @@ -//*** LICENSE *** -//ColumnListView, its associated classes and source code, and the other components of Santa's Gift Bag are -//being made publicly available and free to use in freeware and shareware products with a price under $25 -//(I believe that shareware should be cheap). For overpriced shareware (hehehe) or commercial products, -//please contact me to negotiate a fee for use. After all, I did work hard on this class and invested a lot -//of time into it. That being said, DON'T WORRY I don't want much. It totally depends on the sort of project -//you're working on and how much you expect to make off it. If someone makes money off my work, I'd like to -//get at least a little something. If any of the components of Santa's Gift Bag are is used in a shareware -//or commercial product, I get a free copy. The source is made available so that you can improve and extend -//it as you need. In general it is best to customize your ColumnListView through inheritance, so that you -//can take advantage of enhancements and bug fixes as they become available. Feel free to distribute the -//ColumnListView source, including modified versions, but keep this documentation and license with it. - -//*** DESCRIPTION *** -//CTextView class - -//Extends BTextView functionality somewhat. Automates setting up the TextRect and updating it during resizing -//so that re-wrapping is live. Also provides a StoreChanges hook function that is called when the CTextView -//loses focus or is removed from the window or destroyed. This is useful if the view is of an object that can -//exist without the view, so that this more persistent object can be kept up-to-date when the text is modified, -//without having to update the other object every time a character is entered. - - -#ifndef _CTEXT_VIEW_H_ -#define _CTEXT_VIEW_H_ - - -#include - - -class CTextView : public BTextView -{ - public: - CTextView(BRect a_frame,const char* a_name,int32 a_resize_mode,int32 a_flags); - virtual ~CTextView(); - - //BTextView overrides - virtual void DetachedFromWindow(); - virtual void FrameResized(float a_width, float a_height); - virtual void MakeFocus(bool a_focused); - void SetText(const char *text, int32 length, const text_run_array *runs = NULL); - void SetText(const char *text, const text_run_array *runs = NULL); - void SetText(BFile *file, int32 offset, int32 length, const text_run_array *runs = NULL); - virtual void StoreChange(); - virtual void Modified(); - bool HasBeenModified(); - void ResetTextRect(); - - protected: - virtual void InsertText(const char *a_text, int32 a_length, int32 a_offset, const text_run_array *a_runs); - - private: - bool m_modified; - bool m_modified_disabled; -}; - - -#endif diff --git a/src/prefs/sounds/Utils/HAboutWindow.cpp b/src/prefs/sounds/Utils/HAboutWindow.cpp deleted file mode 100644 index e43eba8427..0000000000 --- a/src/prefs/sounds/Utils/HAboutWindow.cpp +++ /dev/null @@ -1,363 +0,0 @@ -#include "HAboutWindow.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "BitmapView.h" -#include "CTextView.h" -#include "URLView.h" - -#define ICON_OFFSET 60 - -/*********************************************************** - * Constructor - ***********************************************************/ -HAboutWindow::HAboutWindow(const char* app_name, - const char* built_date, - const char* comment, - const char* url, - const char* email) - :BWindow(BRect(-1,-1,-1,-1), - "", - B_FLOATING_WINDOW_LOOK, - B_MODAL_APP_WINDOW_FEEL, - B_NOT_RESIZABLE|B_NOT_ZOOMABLE) -{ - BString window_title = "About "; - window_title << app_name; - SetTitle(window_title.String()); - this->AddShortcut('W',0,new BMessage(B_QUIT_REQUESTED)); - CalcFontHeights(); - /********** Get max width **********/ - BString build = "Built date: "; - build << built_date; - - float max_width = ICON_OFFSET; - BFont font(be_plain_font); - font.SetSize(10); - - max_width = font.StringWidth(build.String()); - BFont boldfont(be_bold_font); - boldfont.SetSize(14); - if(max_width < boldfont.StringWidth(app_name) ) - max_width = boldfont.StringWidth(app_name); - - /**************************************/ - InitGUI(); - LoadIcon(); - SetComment(comment); - int32 lines = fComment->CountLines(); - float result = 0; - for(register int32 i = 0; i < lines ; i++) - { - float tmp = fComment->LineWidth(i); - if(tmp > result ) - result = tmp; - } - if(max_width < result) - max_width = result; - if(max_width < font.StringWidth(url)) - max_width = font.StringWidth(url); - float width = max_width + ICON_OFFSET + 20; - - int32 isUrlMail = 0; - if(url) - isUrlMail++; - if(email) - isUrlMail++; - - float height = fPlainHeight* (2+lines + isUrlMail) + fBoldHeight + 35; - - ResizeTo(width,height); - BRect screen_limits = BScreen().Frame(); - MoveTo(screen_limits.left+floor((screen_limits.Width()-width)/2), - screen_limits.top+floor((screen_limits.Height()-height)/2)); - - /************** url view ************/ - float start_pos = fComment->Frame().bottom; - - BRect url_rect(ICON_OFFSET,start_pos,width,start_pos+fPlainHeight); - - HAboutView *bgview = cast_as(FindView("aboutview"),HAboutView); - - if(url) - { - BString url_string = url; - - int32 index = url_string.FindFirst("http:"); - if(index != B_ERROR) - { - url_string = &url[index]; - } - //(new BAlert("",url_string.String(),"OK"))->Go(); - URLView *urlView = new URLView(url_rect,"url",url,url_string.String()); - urlView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - urlView->SetFont(&font); - bgview->AddChild(urlView); - - url_rect.OffsetBy(0,fPlainHeight+3); - } - /************** mail view ****************/ - if(email) - { - BString mail = email; - - int32 index = mail.FindLast(" "); - if(index != B_ERROR) - { - mail = &email[index+1]; - }else{ - index = mail.FindFirst(":"); - if(index != B_ERROR) - { - mail = &email[index+1]; - } - } - - BString mail_uri = "mailto:"; - mail_uri << mail; - - URLView *mailView = new URLView(url_rect,"email",email,mail_uri.String()); - mailView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - mailView->SetFont(&font); - bgview->AddChild(mailView); - } - - SetAppName(app_name); - SetBuiltDate(built_date); - - LoadVersion(); -} - -/*********************************************************** - * InitGUI - ***********************************************************/ -void -HAboutWindow::InitGUI() -{ - BRect bitmapRect(0,0,31,31); - bitmapRect.OffsetBy(20,5); - - fAboutView = new HAboutView(Bounds()); - BRect rect(ICON_OFFSET,15,ICON_OFFSET,15+fBoldHeight); - fAppName = new BStringView(rect,"name","",B_FOLLOW_NONE); - fAboutView->AddChild(fAppName); - rect.OffsetBy(0,fBoldHeight); - rect.bottom = rect.top + fPlainHeight; - fVersion = new BStringView(rect,"ver","",B_FOLLOW_NONE); - fAboutView->AddChild(fVersion); - rect.OffsetBy(0,fPlainHeight); - fBuiltDate = new BStringView(rect,"build","",B_FOLLOW_NONE); - fAboutView->AddChild(fBuiltDate); - rect.OffsetBy(0,fPlainHeight); - fComment = new CTextView(rect,"comment",B_FOLLOW_NONE,B_WILL_DRAW); - fAboutView->AddChild(fComment); - AddChild(fAboutView); -} - -/*********************************************************** - * Load icon from application resource - ***********************************************************/ -void -HAboutWindow::LoadIcon() -{ - //Extract title bitmap - BBitmap *icon = new BBitmap(BRect(0,0,31,31),B_COLOR_8_BIT); - app_info info; - BPath path; - be_app->GetAppInfo(&info); - BNodeInfo::GetTrackerIcon(&info.ref,icon,B_LARGE_ICON); - fAboutView->SetBitmap(icon); -} - -/*********************************************************** - * Load versino from application resource. - ***********************************************************/ -void -HAboutWindow::LoadVersion() -{ - //Extract version resource - BString version = ""; - BResources* app_version_resource = BApplication::AppResources(); - if(app_version_resource) - { - size_t resource_size; - const char* app_version_data = (const char*)app_version_resource->LoadResource('APPV', - "BEOS:APP_VERSION",&resource_size); - if(app_version_data && resource_size > 20) - { - const char* status[] = {"Development","Alpha","Beta","Gamma", - "Golden master","Final"}; - app_version_info *info = (app_version_info*)app_version_data; - uint32 v1 = info->v1; - uint32 v2 = info->v2; - uint32 v3 = info->v3; - version << v1 << "." << v2 << "." << v3; - if(info->status != 5) - version << " " <status]; - if(info->rel != 0) - version << " Release " << info->rel; - SetVersion(version.String()); - } - } -} - -/*********************************************************** - * Set applicaiton name - ***********************************************************/ -void -HAboutWindow::SetAppName(const char* name) -{ - BFont font(be_bold_font); - font.SetSize(14); - - BRect rect(0,0,font.StringWidth(name),fBoldHeight); - BRect old_rect = fAppName->Bounds(); - fAppName->SetFont(&font); - fAppName->ResizeBy(rect.Width()-old_rect.Width(),rect.Height()-old_rect.Height()); - fAppName->SetText(name); -} - -/*********************************************************** - * Set application built date. - ***********************************************************/ -void -HAboutWindow::SetBuiltDate(const char* date) -{ - BString title="Built date: "; - title << date; - - BFont font(be_plain_font); - font.SetSize(10); - - BRect rect(0,0,font.StringWidth(title.String()),fPlainHeight); - BRect old_rect = fBuiltDate->Bounds(); - fBuiltDate->SetFont(&font); - fBuiltDate->ResizeBy(rect.Width()-old_rect.Width(),rect.Height()-old_rect.Height()); - fBuiltDate->SetText(title.String()); -} - -/*********************************************************** - * Set comments - ***********************************************************/ -void -HAboutWindow::SetComment(const char* text) -{ - BFont font(be_plain_font); - font.SetSize(10); - - fComment->SetFont(&font); - fComment->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - fComment->MakeEditable(false); - fComment->MakeFocus(false); - fComment->MakeSelectable(false); - fComment->SetWordWrap(false); - fComment->SetText(text); - int32 lines = fComment->CountLines(); - BRect rect(0,0,font.StringWidth(text)+4,fPlainHeight*lines+4); - BRect old_rect = fComment->Bounds(); - fComment->ResizeBy(rect.Width()-old_rect.Width(),rect.Height()-old_rect.Height()); - -} - -/*********************************************************** - * Set version info - ***********************************************************/ -void -HAboutWindow::SetVersion(const char* version) -{ - BString title="Version "; - title << version; - - BFont font(be_plain_font); - font.SetSize(10); - - BRect rect(0,0,font.StringWidth(title.String()),fPlainHeight); - BRect old_rect = fVersion->Bounds(); - fVersion->SetFont(&font); - fVersion->ResizeBy(rect.Width()-old_rect.Width(),rect.Height()-old_rect.Height()); - fVersion->SetText(title.String()); -} - -/*********************************************************** - * Calc font height - ***********************************************************/ -void -HAboutWindow::CalcFontHeights() -{ - BFont plainfont(be_plain_font); - plainfont.SetSize(10); - - font_height FontAttributes; - plainfont.GetHeight(&FontAttributes); - fPlainHeight = ceil(FontAttributes.ascent) + ceil(FontAttributes.descent); - - BFont boldfont(be_bold_font); - boldfont.SetSize(14); - - boldfont.GetHeight(&FontAttributes); - fBoldHeight = ceil(FontAttributes.ascent) + ceil(FontAttributes.descent); -} - -/*************************************************************************** - * HAboutView - ****************************************************************************/ -const float kBorderWidth = 32.0f; -const rgb_color kDarkBorderColor = {184, 184, 184, 255}; - -/*********************************************************** - * Constructor - ***********************************************************/ -HAboutView::HAboutView(BRect rect,BBitmap *icon) - :BView(rect,"aboutview",B_FOLLOW_ALL,B_WILL_DRAW) -{ - SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - fIcon = icon; -} - -/*********************************************************** - * Destructor - ***********************************************************/ -HAboutView::~HAboutView() -{ - delete fIcon; -} - -/*********************************************************** - * Draw - ***********************************************************/ -void -HAboutView::Draw(BRect updateRect) -{ - BRect drawBounds(Bounds()); - drawBounds.right = kBorderWidth; - SetHighColor(kDarkBorderColor); - FillRect(drawBounds); - - if(fIcon != NULL) - { - BRect bitmapRect(0,0,31,31); - bitmapRect.OffsetBy(20,5); - drawing_mode mode = DrawingMode(); - SetDrawingMode(B_OP_ALPHA); - DrawBitmap(fIcon,bitmapRect); - SetDrawingMode(mode); - } -} - -/*********************************************************** - * Set view bitmap - ***********************************************************/ -void -HAboutView::SetBitmap(BBitmap *bitmap) -{ - delete fIcon; - fIcon = bitmap; -} \ No newline at end of file diff --git a/src/prefs/sounds/Utils/HAboutWindow.h b/src/prefs/sounds/Utils/HAboutWindow.h deleted file mode 100644 index 5b2943c86b..0000000000 --- a/src/prefs/sounds/Utils/HAboutWindow.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef __ABOUTWINDOW_H__ -#define __ABOUTWINDOW_H__ - -#include -#include -#include -#include - -class CTextView; -class BitmapView; - -typedef struct { -uint32 v1; -uint32 v2; -uint32 v3; -uint32 status; -uint32 rel; -} app_version_info; - -/********************************************************************** - * HAboutView - **********************************************************************/ -class HAboutView : public BView -{ -public: - HAboutView(BRect rect,BBitmap *icon = NULL); - virtual ~HAboutView(); - void SetBitmap(BBitmap* bitmap); -protected: - - virtual void Draw(BRect); -private: - BBitmap* fIcon; -}; -/********************************************************************** - * HAboutWindow - **********************************************************************/ -class HAboutWindow :public BWindow { -public: - HAboutWindow(const char* app_name, - const char* built_data, - const char* comment, - const char* url = NULL, - const char* mail = NULL); -protected: - void InitGUI(); - void SetAppName(const char* app_name); - void SetBuiltDate(const char* text); - void SetVersion(const char* version); - void SetComment(const char* text); - void LoadIcon(); - void LoadVersion(); - void CalcFontHeights(); -private: - BStringView* fAppName; - BStringView* fVersion; - BStringView* fBuiltDate; - HAboutView* fAboutView; - CTextView* fComment; - float fBoldHeight; - float fPlainHeight; -}; - - - -#endif \ No newline at end of file diff --git a/src/prefs/sounds/Utils/IconMenuItem.cpp b/src/prefs/sounds/Utils/IconMenuItem.cpp deleted file mode 100644 index 9ddb2449cd..0000000000 --- a/src/prefs/sounds/Utils/IconMenuItem.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#include "IconMenuItem.h" - -#include - -/*********************************************************** - * Constructor. - ***********************************************************/ -IconMenuItem::IconMenuItem(const char* label,BMessage *message,char shortcut,uint32 modifiers,BBitmap *bitmap,bool copy,bool free) - :BMenuItem(label,message,shortcut,modifiers) - ,fBitmap(NULL) - ,fCopy(copy) -{ - SetBitmap(bitmap,free); - fHeightDelta = 0; -} - -/*********************************************************** - * Constructor. - ***********************************************************/ -IconMenuItem::IconMenuItem(BMenu *submenu,BMessage *message,char shortcut,uint32 modifiers,BBitmap *bitmap,bool copy,bool free) - :BMenuItem(submenu,message) - ,fBitmap(NULL) - ,fCopy(copy) -{ - SetBitmap(bitmap,free); - fHeightDelta = 0; - SetShortcut(shortcut,modifiers); -} - -/*********************************************************** - * Destructor. - ***********************************************************/ -IconMenuItem::~IconMenuItem() -{ - if(fCopy) - delete fBitmap; -} - -/*********************************************************** - * Draw menu icon. - ***********************************************************/ -void -IconMenuItem::DrawContent() -{ - - if(fBitmap != NULL) - { - - BPoint drawPoint(ContentLocation()); - // center text and icon. - drawing_mode mode = Menu()->DrawingMode(); - Menu()->SetDrawingMode(B_OP_ALPHA); - //Menu()->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); - Menu()->SetLowColor( Menu()->ViewColor()); - //Menu()->SetHighColor(B_TRANSPARENT_32_BIT); - if( !IsEnabled() ) - { - Menu()->SetDrawingMode(B_OP_BLEND); - Menu()->DrawBitmap(fBitmap,drawPoint); - Menu()->SetDrawingMode(B_OP_OVER); - }else - Menu()->DrawBitmap(fBitmap,drawPoint); - // offset to title point. - drawPoint.y += ceil( fHeightDelta/2 ); - drawPoint.x += 20; - // Move draw point. - Menu()->MovePenTo(drawPoint); - Menu()->SetDrawingMode(mode); - } - - BMenuItem::DrawContent(); -} - -/*********************************************************** - * Extruct content width - ***********************************************************/ -void -IconMenuItem::GetContentSize(float *width, float *height) -{ - BMenuItem::GetContentSize(width,height); - (*width) += 20; - fHeightDelta = 16 - (*height); - if( (*height) < 16) - (*height) = 16; -} - -/*********************************************************** - * Set the other bitmap. - ***********************************************************/ -void -IconMenuItem::SetBitmap(BBitmap *bitmap,bool free) -{ - if(fCopy) - delete fBitmap; - - if(!fCopy) - fBitmap = bitmap; - else{ - if(bitmap) - { - fBitmap = new BBitmap(bitmap); - if(free) delete bitmap; - }else - fBitmap = NULL; - } -} - diff --git a/src/prefs/sounds/Utils/IconMenuItem.h b/src/prefs/sounds/Utils/IconMenuItem.h deleted file mode 100644 index fd74f27201..0000000000 --- a/src/prefs/sounds/Utils/IconMenuItem.h +++ /dev/null @@ -1,40 +0,0 @@ -/************************************************************* -* IconMenu -* -* Toolbar is a usefull UI component. -* -* @author Atsushi Takamatsu (tak_atsu@tau.bekkoame.ne.jp) -**************************************************************/ - -#ifndef __ICONMENUITEM_H__ -#define __ICONMENUITEM_H__ - -#include - -class IconMenuItem :public BMenuItem { -public: - IconMenuItem(const char* label - ,BMessage *message - ,char shortcut = 0 - ,uint32 modifiers = 0 - ,BBitmap *bitmap = NULL - ,bool copyBitmap = true - ,bool deleteInputBitmap = true); - IconMenuItem(BMenu *submenu - ,BMessage *message - ,char shortcut = 0 - ,uint32 modifiers = 0 - ,BBitmap *bitmap = NULL - ,bool copyBitmap = true - ,bool deleteInputBitmap = true); - virtual ~IconMenuItem(); - void SetBitmap(BBitmap *bitmap,bool freePointer=false); -protected: - virtual void DrawContent(); - virtual void GetContentSize(float *width ,float *height); -private: - BBitmap *fBitmap; - bool fCopy; - float fHeightDelta; -}; -#endif diff --git a/src/prefs/sounds/Utils/RectUtils.cpp b/src/prefs/sounds/Utils/RectUtils.cpp deleted file mode 100644 index f87dfd6193..0000000000 --- a/src/prefs/sounds/Utils/RectUtils.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "RectUtils.h" -#include -#include -#include -#include - -/* -* Constructor -*/ -BRect -RectUtils::CenterRect(float width,float height) -{ - BRect frame = BScreen().Frame(); - BRect rect; - - rect.left = frame.Width()/2.0 - width/2.0; - rect.right = rect.left + width; - rect.top = frame.Height()/2.0 - height/2.0; - rect.bottom = rect.top + height; - return rect; -} - -/* -* Load rect data from the application file attribute. -*/ -bool -RectUtils::LoadRectFromApp(const char* name,BRect *rect) -{ - app_info info; - be_app->GetAppInfo(&info); - BEntry entry(&info.ref); - bool rc = false; - - BFile appfile(&entry,B_READ_ONLY); - attr_info ainfo; - status_t err = appfile.GetAttrInfo(name,&ainfo); - if(err == B_OK) - { - appfile.ReadAttr(name,B_RECT_TYPE,0,rect,sizeof(BRect)); - rc = true; - } else { - rc = false; - } - return rc; -} - -/* -* Save rect data to the application file attribute. -*/ -void -RectUtils::SaveRectToApp(const char* name,BRect rect) -{ - app_info info; - be_app->GetAppInfo(&info); - BEntry entry(&info.ref); - - BFile appfile(&entry,B_WRITE_ONLY); - appfile.WriteAttr(name,B_RECT_TYPE,0,&rect,sizeof(BRect)); -} diff --git a/src/prefs/sounds/Utils/RectUtils.h b/src/prefs/sounds/Utils/RectUtils.h deleted file mode 100644 index 99d8687331..0000000000 --- a/src/prefs/sounds/Utils/RectUtils.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __RECTUTILS_H__ -#define __RECTUTILS_H__ - -#include - -class RectUtils { -public: - RectUtils(){}; - ~RectUtils(){}; - BRect CenterRect(float width,float height); - void SaveRectToApp(const char* name,BRect rect); - bool LoadRectFromApp(const char* name,BRect *rect); -}; -#endif \ No newline at end of file diff --git a/src/prefs/sounds/Utils/ResourceUtils.cpp b/src/prefs/sounds/Utils/ResourceUtils.cpp deleted file mode 100644 index ce7724c62d..0000000000 --- a/src/prefs/sounds/Utils/ResourceUtils.cpp +++ /dev/null @@ -1,279 +0,0 @@ -#include "ResourceUtils.h" -#include -#include -#include - -ResourceUtils::ResourceUtils(BResources *rsrc) - :BLocker() - ,fResource(NULL) -{ - if(rsrc == NULL) - fResource = BApplication::AppResources(); - else - fResource = rsrc; -} - -ResourceUtils::ResourceUtils(const char *path) - :BLocker() - ,fResource(NULL) -{ - if(path == NULL) - fResource = BApplication::AppResources(); - else{ - BFile file(path, B_READ_WRITE); - BResources *res = new BResources(); - status_t err; - if((err = res->SetTo(&file)) != B_OK) - fResource = BApplication::AppResources(); - else - fResource = res; - } -} - -ResourceUtils::~ResourceUtils() -{ - //if(fResource != BApplication::AppResources()) - // delete fResource; -} - -/* - * Load icon by id. - */ -status_t -ResourceUtils::GetIconResource(int32 id, icon_size size, BBitmap *dest) -{ - if (size != B_LARGE_ICON && size != B_MINI_ICON ) - return B_ERROR; - - size_t len = 0; - - this->Lock(); - const void *data = fResource->LoadResource(size == B_LARGE_ICON ? 'ICON' : 'MICN', - id, &len); - this->Unlock(); - if (data == 0 || len != (size_t)(size == B_LARGE_ICON ? 1024 : 256)) { - return B_ERROR; - } - - dest->SetBits(data, (int32)len, 0, B_COLOR_8_BIT); - return B_OK; -} - -/* - * Load icon by name. - */ -status_t -ResourceUtils::GetIconResource(const char* name, icon_size size, BBitmap *dest) -{ - if (size != B_LARGE_ICON && size != B_MINI_ICON ) - return B_ERROR; - - size_t len = 0; - this->Lock(); - const void *data = fResource->LoadResource(size == B_LARGE_ICON ? 'ICON' : 'MICN', - name, &len); - this->Unlock(); - if (data == 0 || len != (size_t)(size == B_LARGE_ICON ? 1024 : 256)) { - return B_ERROR; - } - - dest->SetBits(data, (int32)len, 0, B_COLOR_8_BIT); - return B_OK; -} - - -/* - * Load bitmap by id. - */ -status_t -ResourceUtils::GetBitmapResource(type_code type, int32 id, BBitmap **out) -{ - *out = NULL; - - size_t len = 0; - - this->Lock(); - const void *data = fResource->LoadResource(type, id, &len); - this->Unlock(); - - if (data == NULL) { - return B_ERROR; - } - - BMemoryIO stream(data, len); - - // Try to read as an archived bitmap. - stream.Seek(0, SEEK_SET); - BMessage archive; - status_t err = archive.Unflatten(&stream); - if (err != B_OK) - return err; - - *out = new BBitmap(&archive); - if (!*out) - return B_ERROR; - - err = (*out)->InitCheck(); - if (err != B_OK) { - delete *out; - *out = NULL; - } - - return err; -} - -/* - * Load bitmap by name. - */ -status_t -ResourceUtils::GetBitmapResource(type_code type, const char* name, BBitmap **out) -{ - *out = NULL; - size_t len = 0; - - this->Lock(); - const void *data = fResource->LoadResource(type, name, &len); - this->Unlock(); - if (data == NULL) { - return B_ERROR; - } - - BMemoryIO stream(data, len); - - // Try to read as an archived bitmap. - stream.Seek(0, SEEK_SET); - BMessage archive; - status_t err = archive.Unflatten(&stream); - if (err != B_OK) - return err; - - *out = new BBitmap(&archive); - if (!*out) - return B_ERROR; - - err = (*out)->InitCheck(); - if (err != B_OK) { - delete *out; - *out = NULL; - } - - return err; -} - -/* - * Load bitmap by name. - */ -BBitmap* -ResourceUtils::GetBitmapResource(type_code type, const char* name) -{ - size_t len = 0; - this->Lock(); - const void *data = fResource->LoadResource(type, name, &len); - this->Unlock(); - if (data == NULL) { - return NULL; - } - - BMemoryIO stream(data, len); - - // Try to read as an archived bitmap. - stream.Seek(0, SEEK_SET); - BMessage archive; - status_t err = archive.Unflatten(&stream); - if (err != B_OK) - return NULL; - - BBitmap* out = new BBitmap(&archive); - if (!out) - return NULL; - - err = (out)->InitCheck(); - if (err != B_OK) { - delete out; - out = NULL; - } - - return out; -} - -/* - * Get string from resources. - */ -const char* -ResourceUtils::GetString(const char* name) -{ - size_t len = 0; - this->Lock(); - const void* data; - if(fResource->HasResource('CSTR',name)) - { - data = fResource->LoadResource('CSTR', name, &len); - }else - data = name; - this->Unlock(); - return (const char*)data; -} - -/* - * Get string from resources. - */ -status_t -ResourceUtils::GetString(const char* name,BString &outStr) -{ - size_t len = 0; - this->Lock(); - const void* data; - status_t err = B_OK; - if(fResource->HasResource('CSTR',name)) - { - data = fResource->LoadResource('CSTR', name, &len); - outStr = (const char*)data; - }else{ - err = B_ERROR; - outStr = name; - } - this->Unlock(); - return err; -} - -/* - * Set resources. - */ -void -ResourceUtils::SetResource(BResources *rsrc) -{ - fResource = rsrc; -} - -/* - * Set resources. - */ -void -ResourceUtils::SetResource(const char* path) -{ - BFile file(path, B_READ_WRITE); - BResources *res = new BResources(); - status_t err; - if((err = res->SetTo(&file)) != B_OK) - fResource = BApplication::AppResources(); - else - fResource = res; -} - -/* - * Free fResource. But You must not free when load app resource. - */ -void -ResourceUtils::FreeResource() -{ - delete fResource; -} - -/* - * Preload resources. - */ -void -ResourceUtils::Preload(type_code type) -{ - fResource->PreloadResourceType(type); -} diff --git a/src/prefs/sounds/Utils/ResourceUtils.h b/src/prefs/sounds/Utils/ResourceUtils.h deleted file mode 100644 index 06b8c8531a..0000000000 --- a/src/prefs/sounds/Utils/ResourceUtils.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __RESOURCEUTILS_H__ -#define __RESOURCEUTILS_H__ - -#include -#include -#include -#include -#include -#include -#include -#include - -class ResourceUtils :public BLocker { -public: - ResourceUtils(BResources *rsrc = NULL); - ResourceUtils(const char* path); - ~ResourceUtils(); - - void SetResource(BResources *rsrc); - void SetResource(const char* path); - - void Preload(type_code type); - void FreeResource(); - -status_t GetIconResource(int32 id, icon_size size, BBitmap *dest); -status_t GetIconResource(const char* name, icon_size size, BBitmap *dest); -status_t GetBitmapResource(type_code type, int32 id, BBitmap **out); -status_t GetBitmapResource(type_code type, const char* name, BBitmap **out); -BBitmap* GetBitmapResource(type_code type, const char* name); -const char* GetString(const char* name); -status_t GetString(const char* name,BString &outStr); - - BResources* Resources() {return fResource;} -protected: - BResources *fResource; -}; -#endif diff --git a/src/prefs/sounds/Utils/URLView.cpp b/src/prefs/sounds/Utils/URLView.cpp deleted file mode 100644 index fda2afeffb..0000000000 --- a/src/prefs/sounds/Utils/URLView.cpp +++ /dev/null @@ -1,913 +0,0 @@ -/* URLView 2.0 - written by William Kakes of Tall Hill Software. - - This class provides an underlined and clickable BStringView - that will launch the web browser, e-mail program, or FTP client - when clicked on. Other features include hover-highlighting, - right-click menus, and drag-and-drop support. - - You are free to use URLView in your own programs (both open-source - and closed-source) free of charge, but a mention in your read me - file or your program's about box would be appreciated. See - http://www.tallhill.com for current contact information. - - URLView is provided as-is, with no warranties of any kind. If - you use it, you are on your own. -*/ - - - -#include "URLView.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - - - -URLView::URLView( BRect frame, const char *name, const char *label, - const char *url, uint32 resizingMode, uint32 flags ) - : BStringView( frame, name, label, resizingMode, flags ) { - - // Set the instance variables. - this->url = new BString( url ); - - // Set the default values for the other definable instance variables. - this->color = blue; - this->clickColor = red; - this->hoverColor = dark_blue; - this->hoverEnabled = true; - this->draggable = true; - this->iconSize = 16; - this->underlineThickness = 1; - - // Create the cursor to use when over the link. - this->linkCursor = new BCursor( url_cursor ); - - // The link is not currently selected. - selected = false; - - // The URL is currently not hover-colored. - hovering = false; - - // The user has not dragged out of the view. - draggedOut = false; - - // The user has not yet opened the popup menu. - inPopup = false; - - // Initialize the attributes list (there are 14 standard - // Person attributes). - attributes = new BList( 14 ); -} - - -URLView::~URLView() { - delete url; - delete linkCursor; - - // Delete all the attributes. - KeyPair *item; - for( int i = 0; (item = (KeyPair *) attributes->ItemAt(i)); i++ ) { - delete item->key; - delete item->value; - delete item; - } - delete attributes; -} - - - - - -void URLView::AttachedToWindow() { - // When the view is first attached, we want to draw the link - // in the normal color. Also, we want to set our background color - // to meet that of our parent. - SetHighColor( color ); - if( Parent() != NULL ) { - SetLowColor( Parent()->ViewColor() ); - SetViewColor( Parent()->ViewColor() ); - } -} - - - -void URLView::Draw( BRect updateRect ) { - BRect rect = Frame(); - rect.OffsetTo( B_ORIGIN ); - - // We want 'g's, etc. to go below the underline. When the BeOS can - // do underlining of any font, this code can be removed. - font_height height; - GetFontHeight( &height ); - float descent = height.descent / 2; - - // Draw the underline in the requested thickness. - FillRect( BRect( (float) rect.left, - (float) (rect.bottom - descent - underlineThickness + 1), - (float) StringWidth( Text() ), - (float) rect.bottom - descent ) ); - - // Note: DrawString() draws the text at one pixel above the pen's - // current y coordinate. - MovePenTo( BPoint( rect.left, rect.bottom - descent - - (float) underlineThickness ) ); - DrawString( Text() ); -} - - - -void URLView::MessageReceived( BMessage *message ) { - // Is this a message from Tracker in response to our drag-and-drop? - if( message->what == 'DDCP' ) { - // Tracker will send back the name and path of the created file. - // We need to read this information. - entry_ref ref; - message->FindRef( "directory", &ref ); - BEntry entry( &ref ); - BPath path( &entry ); - BString *fullName = new BString( path.Path() ); - fullName->Append( "/" ); - fullName->Append( message->FindString( "name" ) ); - BString *title = new BString( Text() ); - - // Set the new file as a bookmark or as a person as appropriate. - if( IsEmailLink() ) { - CreatePerson( fullName, title ); - } - else CreateBookmark( fullName, title ); - - delete fullName; - delete title; - } -} - - - -void URLView::MouseDown( BPoint point ) { - // See which mouse buttons were clicked. - int32 buttons = Window()->CurrentMessage()->FindInt32( "buttons" ); - - // We want to highlight the text if the user clicks on - // the URL. We want to be sure to only register a click - // if the user clicks on the link text itself and not just - // anywhere in the view. - if( GetTextRect().Contains( point ) ) { - SetHighColor( clickColor ); - Redraw(); - - // Set the link as selected and track the mouse. - selected = true; - SetMouseEventMask( B_POINTER_EVENTS ); - - // Remember where the user clicked. - dragOffset = point; - - // Pop up the context menu? - if( buttons == B_SECONDARY_MOUSE_BUTTON ) inPopup = true; - } -} - - - -void URLView::MouseMoved( BPoint point, uint32 transit, - const BMessage *message ) { - - // Make sure the window is the active one. - if( !Window()->IsActive() ) return; - - // See which mouse buttons were clicked. - int32 buttons = Window()->CurrentMessage()->FindInt32( "buttons" ); - // Is the user currently dragging the link? (i.e. is a mouse button - // currently down?) - bool alreadyDragging = (buttons != 0); - - switch( transit ) { - case( B_ENTERED_VIEW ): - // Should we set the cursor to the link cursor? - if( GetTextRect().Contains( point ) && !draggedOut ) { - if( !alreadyDragging ) be_app->SetCursor( linkCursor ); - - // Did the user leave and re-enter the view while - // holding down the mouse button? If so, highlight - // the link. - if( selected ) { - SetHighColor( clickColor ); - Redraw(); - } - // Should we hover-highlight the link? - else if( hoverEnabled && !alreadyDragging ) { - if( buttons == 0 ) { - SetHighColor( hoverColor ); - Redraw(); - hovering = true; - } - } - } - break; - - case( B_EXITED_VIEW ): - // We want to restore the link to it normal color and the - // mouse cursor to the normal hand. However, we should only - // set the color and re-draw if it is needed. - if( selected && !draggedOut ) { - be_app->SetCursor( B_HAND_CURSOR ); - SetHighColor( color ); - Redraw(); - - // Is the user drag-and-dropping a bookmark or person? - if( draggable ) { - draggedOut = true; - if( IsEmailLink() ) DoPersonDrag(); - else DoBookmarkDrag(); - } - } - // Is the link currently hover-highlighted? If so, restore - // the normal color now. - else if( hovering && !alreadyDragging ) { - be_app->SetCursor( B_HAND_CURSOR ); - SetHighColor( color ); - Redraw(); - hovering = false; - } - // Change the cursor back to the hand. - else { - be_app->SetCursor( B_HAND_CURSOR ); - } - break; - - case( B_INSIDE_VIEW ): - // The user could either be moving out of the view or - // back into it here, so we must handle both cases. - // In the first case, the cursor is now over the link. - if( GetTextRect().Contains( point ) && !draggedOut ) { - // We only want to change the cursor if not dragging. - if( !alreadyDragging ) be_app->SetCursor( linkCursor ); - if( selected ) { - if( draggable ) { - // If the user moves the mouse more than ten - // pixels, begin the drag. - if( (point.x - dragOffset.x) > 10 || - (dragOffset.x - point.x) > 10 || - (point.y - dragOffset.y) > 10 || - (dragOffset.y - point.y) > 10 ) { - draggedOut = true; - // Draw the appropriate drag object, etc. - if( IsEmailLink() ) DoPersonDrag(); - else DoBookmarkDrag(); - SetHighColor( color ); - Redraw(); - } - } - else { - // Since the link is not draggable, highlight it - // as long as the user holds the button down and - // has the mouse cursor over it (like a standard - // button). - SetHighColor( clickColor ); - Redraw(); - } - } - // The link isn't currently selected? If hover-highlighting - // is enabled, highlight the link. - else if( hoverEnabled && !alreadyDragging ) { - SetHighColor( hoverColor ); - Redraw(); - hovering = true; - } - } - // In this case, the mouse cursor is not over the link, so we - // need to restore the original link color, etc. - else if( !draggedOut ) { - be_app->SetCursor( B_HAND_CURSOR ); - if( selected ) { - SetHighColor( color ); - Redraw(); - - // Is the user dragging the link? - if( draggable ) { - draggedOut = true; - if( IsEmailLink() ) DoPersonDrag(); - else DoBookmarkDrag(); - } - } - // Is the mouse cursor hovering over the link? - else if( hovering ) { - SetHighColor( color ); - Redraw(); - hovering = false; - } - } - break; - } -} - - - -void URLView::MouseUp( BPoint point ) { - // Do we want to show the right-click menu? - if( inPopup && GetTextRect().Contains( point ) ) { - BPopUpMenu *popup = CreatePopupMenu(); - // Work around a current bug in Be's popup menus. - point.y = point.y - 6; - - // Display the popup menu. - BMenuItem *selected = popup->Go( ConvertToScreen( point ) , false, true ); - - // Did the user select an item? - if( selected ) { - BString label( selected->Label() ); - // Did the user select the first item? If so, launch the URL. - if( label.FindFirst( "Open" ) != B_ERROR || - label.FindFirst( "Send" ) != B_ERROR || - label.FindFirst( "Connect" ) != B_ERROR ) { - LaunchURL(); - } - // Did the user select the second item? - else if( label.FindFirst( "Copy" ) != B_ERROR ) { - CopyToClipboard(); - } - } - // If not, restore the normal link color. - else { - SetHighColor( color ); - Redraw(); - } - } - - // If the link was clicked on (and not dragged), run the program - // that should handle the URL. - if( selected && GetTextRect().Contains( point ) && - !draggedOut && !inPopup ) { - LaunchURL(); - } - selected = false; - draggedOut = false; - inPopup = false; - - // Should we restore the hovering-highlighted color or the original - // link color? - if( GetTextRect().Contains( point ) && !draggedOut && - !inPopup && hoverEnabled ) { - SetHighColor( hoverColor ); - } - else if( !hovering ) SetHighColor( color ); - Redraw(); -} - - - - - -void URLView::AddAttribute( const char *name, const char *value ) { - // Add an attribute (name and corresponding value) to the object - // that will be dragged out (i.e. to fill in Person fields, etc.) - KeyPair *newPair = new KeyPair; - newPair->key = new BString( name ); - newPair->value = new BString( value ); - attributes->AddItem( newPair ); -} - - - -void URLView::SetColor( rgb_color color ) { - // Set the normal link color. - this->color = color; -} - - -void URLView::SetClickColor( rgb_color color ) { - // Set the link color used when the link is clicked. - clickColor = color; -} - - -void URLView::SetDraggable( bool draggable ) { - // Set whether or not this link is draggable. - this->draggable = draggable; -} - - -void URLView::SetHoverColor( rgb_color color ) { - // Set the link color used when the mouse cursor is over it. - hoverColor = color; -} - - -void URLView::SetHoverEnabled( bool hover ) { - // Set whether or not to hover-highlight the link. - hoverEnabled = hover; -} - - -void URLView::SetIconSize( icon_size iconSize ) { - // Set the size of the icon that will be shown when the link is dragged. - if( iconSize == B_MINI_ICON ) this->iconSize = 16; - else this->iconSize = 32; -} - - -void URLView::SetUnderlineThickness( int thickness ) { - // Set the thickness of the underline in pixels. - underlineThickness = thickness; -} - - - - - -void URLView::CopyToClipboard() { - // Copy the URL to the clipboard. - BClipboard clipboard( "system" ); - BMessage *clip = (BMessage *) NULL; - // Get the important URL (i.e. trim off "mailto:", etc.). - BString newclip = GetImportantURL(); - - // Be sure to lock the clipboard first. - if( clipboard.Lock() ) { - clipboard.Clear(); - if( (clip = clipboard.Data()) ) { - clip->AddData( "text/plain", B_MIME_TYPE, newclip.String(), - newclip.Length() + 1 ); - clipboard.Commit(); - } - clipboard.Unlock(); - } -} - - - -void URLView::CreateBookmark( const BString *fullName, const BString *title ) { - // Read the file defined by the path and the title. - BFile *file = new BFile( fullName->String(), B_WRITE_ONLY ); - - // Set the file's MIME type to be a bookmark. - BNodeInfo *nodeInfo = new BNodeInfo( file ); - nodeInfo->SetType( "application/x-vnd.Be-bookmark" ); - delete nodeInfo; - delete file; - - // Add all the attributes, both those inherrent to bookmarks and any - // the developer may have defined using AddAttribute(). - DIR *d; - int fd; - d = fs_open_attr_dir( fullName->String() ); - if( d ) { - fd = open( fullName->String(), O_WRONLY ); - fs_write_attr( fd, "META:title", B_STRING_TYPE, 0, title->String(), title->Length() + 1 ); - fs_write_attr( fd, "META:url", B_STRING_TYPE, 0, url->String(), url->Length() + 1 ); - WriteAttributes( fd ); - close( fd ); - fs_close_attr_dir( d ); - } -} - - -void URLView::CreatePerson( const BString *fullName, const BString *title ) { - // Read the file defined by the path and the title. - BFile *file = new BFile( fullName->String(), B_WRITE_ONLY ); - - // Set the file's MIME type to be a person. - BNodeInfo *nodeInfo = new BNodeInfo( file ); - nodeInfo->SetType( "application/x-person" ); - delete nodeInfo; - delete file; - - // Add all the attributes, both those inherrent to person files and any - // the developer may have defined using AddAttribute(). - DIR *d; - int fd; - d = fs_open_attr_dir( fullName->String() ); - if( d ) { - fd = open( fullName->String(), O_WRONLY ); - fs_write_attr( fd, "META:name", B_STRING_TYPE, 0, title->String(), title->Length() + 1 ); - BString email = GetImportantURL(); - fs_write_attr( fd, "META:email", B_STRING_TYPE, 0, email.String(), email.Length() + 1 ); - WriteAttributes( fd ); - close( fd ); - fs_close_attr_dir( d ); - } -} - - - -BPopUpMenu * URLView::CreatePopupMenu() { - // Create the right-click popup menu. - BPopUpMenu *returnMe = new BPopUpMenu( "URLView Popup", false, false ); - returnMe->SetAsyncAutoDestruct( true ); - - entry_ref app; - - // Set the text of the first item according to the link type. - if( IsEmailLink() ) { - // Find the name of the default e-mail client. - if( be_roster->FindApp( "text/x-email", &app ) == B_OK ) { - BEntry entry( &app ); - BString openLabel( "Send e-mail to this address using " ); - char name[B_FILE_NAME_LENGTH]; - entry.GetName( name ); - openLabel.Append( name ); - returnMe->AddItem( new BMenuItem( openLabel.String(), NULL ) ); - } - } - else if( IsFTPLink() ) { - // Find the name of the default FTP client. - if( be_roster->FindApp( "application/x-vnd.Be.URL.ftp", &app ) == B_OK ) { - BEntry entry( &app ); - BString openLabel( "Connect to this server using " ); - char name[B_FILE_NAME_LENGTH]; - entry.GetName( name ); - openLabel.Append( name ); - returnMe->AddItem( new BMenuItem( openLabel.String(), NULL ) ); - } - } - else { - // Find the name of the default HTML handler (browser). - if( be_roster->FindApp( "text/html", &app ) == B_OK ) { - BEntry entry( &app ); - BString openLabel( "Open this link using " ); - char name[B_FILE_NAME_LENGTH]; - entry.GetName( name ); - openLabel.Append( name ); - returnMe->AddItem( new BMenuItem( openLabel.String(), NULL ) ); - } - } - returnMe->AddItem( new BMenuItem( "Copy this link to the clipboard", NULL ) ); - - return returnMe; -} - - - -void URLView::DoBookmarkDrag() { - // Handle all of the bookmark dragging. This includes setting up - // the drag message and drawing the dragged bitmap. - - // Set up the drag message to support both BTextView dragging (using - // the URL) and file dropping (to Tracker). - BMessage *dragMessage = new BMessage( B_MIME_DATA ); - dragMessage->AddInt32( "be:actions", B_COPY_TARGET ); - dragMessage->AddString( "be:types", "application/octet-stream" ); - dragMessage->AddString( "be:filetypes", "application/x-vnd.Be-bookmark" ); - dragMessage->AddString( "be:type_descriptions", "bookmark" ); - dragMessage->AddString( "be:clip_name", Text() ); - dragMessage->AddString( "be:url", url->String() ); - - // This allows the user to drag the URL into a standard BTextView. - BString link = GetImportantURL(); - dragMessage->AddData( "text/plain", B_MIME_DATA, link.String(), - link.Length() + 1 ); - - // Query for the system's icon for bookmarks. - BBitmap *bookmarkIcon = new BBitmap( BRect( 0, 0, iconSize - 1, - iconSize - 1 ), B_CMAP8 ); - BMimeType mime( "application/x-vnd.Be-bookmark" ); - if( iconSize == 16 ) mime.GetIcon( bookmarkIcon, B_MINI_ICON ); - else mime.GetIcon( bookmarkIcon, B_LARGE_ICON ); - - // Find the size of the bitmap to drag. If the text is bigger than the - // icon, use that size. Otherwise, use the icon's. Center the icon - // vertically in the bitmap. - BRect urlRect = GetURLRect(); - BRect rect = urlRect; - rect.right += iconSize + 4; - if( (rect.bottom - rect.top) < iconSize ) { - int adjustment = (int) ((iconSize - (rect.bottom - rect.top)) / 2) + 1; - rect.top -= adjustment; - rect.bottom += adjustment; - } - - // Make sure the rectangle starts at 0,0. - rect.bottom += 0 - rect.top; - rect.top = 0; - - // Create the bitmap to draw the dragged image in. - BBitmap *dragBitmap = new BBitmap( rect, B_RGBA32, true ); - BView *dragView = new BView( rect, "Drag View", 0, 0 ); - dragBitmap->Lock(); - dragBitmap->AddChild( dragView ); - - BRect frameRect = dragView->Frame(); - - // Make the background of the dragged image transparent. - dragView->SetHighColor( B_TRANSPARENT_COLOR ); - dragView->FillRect( frameRect ); - - // We want 'g's, etc. to go below the underline. When the BeOS can - // do underlining of any font, this code can be removed. - font_height height; - GetFontHeight( &height ); - float descent = height.descent; - - // Find the vertical center of the view so we can vertically - // center everything. - int centerPixel = (int) ((frameRect.bottom - frameRect.top) / 2); - int textCenter = (int) (descent + underlineThickness) + centerPixel; - - // We want to draw everything only half opaque. - dragView->SetDrawingMode( B_OP_ALPHA ); - dragView->SetHighColor( color.red, color.green, color.blue, 128.0 ); - dragView->SetBlendingMode( B_CONSTANT_ALPHA, B_ALPHA_COMPOSITE ); - - // Center the icon in the view. - dragView->MovePenTo( BPoint( frameRect.left, - centerPixel - (iconSize / 2) ) ); - dragView->DrawBitmap( bookmarkIcon ); - - // Draw the text in the same font (size, etc.) as the link view. - // Note: DrawString() draws the text at one pixel above the pen's - // current y coordinate. - BFont font; - GetFont( &font ); - dragView->SetFont( &font ); - dragView->MovePenTo( BPoint( frameRect.left + iconSize + 4, textCenter ) ); - dragView->DrawString( url->String() ); - - // Draw the underline in the requested thickness. - dragView->FillRect( BRect( (float) frameRect.left + iconSize + 4, - (float) (textCenter + 1), - (float) StringWidth( url->String() ) + iconSize + 4, - (float) textCenter + underlineThickness ) ); - - // Be sure to flush the view buffer so everything is drawn. - dragView->Flush(); - dragBitmap->Unlock(); - - // The URL's label is probably not the same size as the URL's - // address, which is what we're going to draw. So horizontally - // offset the bitmap proportionally to where the user clicked - // on the link. - float horiz = dragOffset.x / GetTextRect().Width(); - dragOffset.x = horiz * frameRect.right; - - DragMessage( dragMessage, dragBitmap, B_OP_ALPHA, - BPoint( dragOffset.x, (rect.Height() / 2) + 2 ), this ); - delete dragMessage; - - draggedOut = true; -} - - -void URLView::DoPersonDrag() { - // Handle all of the bookmark dragging. This includes setting up - // the drag message and drawing the dragged bitmap. - - // Set up the drag message to support both BTextView dragging (using - // the e-mail address) and file dropping (to Tracker). - BMessage *dragMessage = new BMessage( B_MIME_DATA ); - dragMessage->AddInt32( "be:actions", B_COPY_TARGET ); - dragMessage->AddString( "be:types", "application/octet-stream" ); - dragMessage->AddString( "be:filetypes", "application/x-person" ); - dragMessage->AddString( "be:type_descriptions", "person" ); - dragMessage->AddString( "be:clip_name", Text() ); - - // This allows the user to drag the e-mail address into a - // standard BTextView. - BString email = GetImportantURL(); - dragMessage->AddData( "text/plain", B_MIME_DATA, email.String(), - email.Length() + 1 ); - - // Query for the system's icon for bookmarks. - BBitmap *personIcon = new BBitmap( BRect( 0, 0, iconSize - 1, - iconSize - 1 ), B_CMAP8 ); - BMimeType mime( "application/x-person" ); - if( iconSize == 16 ) mime.GetIcon( personIcon, B_MINI_ICON ); - else mime.GetIcon( personIcon, B_LARGE_ICON ); - - // Find the size of the bitmap to drag. If the text is bigger than the - // icon, use that size. Otherwise, use the icon's. Center the icon - // vertically in the bitmap. - BRect rect = GetTextRect(); - rect.right += iconSize + 4; - if( (rect.bottom - rect.top) < iconSize ) { - int adjustment = (int) ((iconSize - (rect.bottom - rect.top)) / 2) + 1; - rect.top -= adjustment; - rect.bottom += adjustment; - } - - // Make sure the rectangle starts at 0,0. - rect.bottom += 0 - rect.top; - rect.top = 0; - - // Create the bitmap to draw the dragged image in. - BBitmap *dragBitmap = new BBitmap( rect, B_RGBA32, true ); - BView *dragView = new BView( rect, "Drag View", 0, 0 ); - dragBitmap->Lock(); - dragBitmap->AddChild( dragView ); - - BRect frameRect = dragView->Frame(); - - // Make the background of the dragged image transparent. - dragView->SetHighColor( B_TRANSPARENT_COLOR ); - dragView->FillRect( frameRect ); - - // We want 'g's, etc. to go below the underline. When the BeOS can - // do underlining of any font, this code can be removed. - font_height height; - GetFontHeight( &height ); - float descent = height.descent; - - // Find the vertical center of the view so we can vertically - // center everything. - int centerPixel = (int) ((frameRect.bottom - frameRect.top) / 2); - int textCenter = (int) (descent + underlineThickness) + centerPixel; - - // We want to draw everything only half opaque. - dragView->SetDrawingMode( B_OP_ALPHA ); - dragView->SetHighColor( 0.0, 0.0, 0.0, 128.0 ); - dragView->SetBlendingMode( B_CONSTANT_ALPHA, B_ALPHA_COMPOSITE ); - - // Center the icon in the view. - dragView->MovePenTo( BPoint( frameRect.left, - centerPixel - (iconSize / 2) ) ); - dragView->DrawBitmap( personIcon ); - - // Draw the text in the same font (size, etc.) as the link view. - // Note: DrawString() draws the text at one pixel above the pen's - // current y coordinate. - BFont font; - GetFont( &font ); - dragView->SetFont( &font ); - dragView->MovePenTo( BPoint( frameRect.left + iconSize + 4, textCenter ) ); - dragView->DrawString( Text() ); - - // Be sure to flush the view buffer so everything is drawn. - dragView->Flush(); - dragBitmap->Unlock(); - - // The Person icon adds some width to the bitmap that we are - // going to draw. So horizontally offset the bitmap proportionally - // to where the user clicked on the link. - float horiz = dragOffset.x / GetTextRect().Width(); - dragOffset.x = horiz * frameRect.right; - - DragMessage( dragMessage, dragBitmap, B_OP_ALPHA, - BPoint( dragOffset.x, - (rect.Height() + underlineThickness) / 2 + 2), this ); - delete dragMessage; - - draggedOut = true; -} - - - -BString URLView::GetImportantURL() { - // Return the relevant portion of the URL (i.e. strip off "mailto:" from - // e-mail address URLs). - BString returnMe; - - if( IsEmailLink() ) url->CopyInto( returnMe, 7, url->CountChars() - 6 ); - else url->CopyInto( returnMe, 0, url->CountChars() ); - - return returnMe; -} - - - -BRect URLView::GetTextRect() { - // This function will return a BRect that contains only the text - // and the underline, so the mouse can change and the link will - // be activated only when the mouse is over the text itself, not - // just within the view. - BRect frame = Frame(); - frame.OffsetTo( B_ORIGIN ); - - // Get the height of the current font. - font_height height; - GetFontHeight( &height ); - - float stringHeight = underlineThickness + height.ascent - 1; - - // Get the rectangle of just the string. - return BRect( frame.left, frame.bottom - stringHeight, - frame.left + StringWidth( Text() ), frame.bottom - 1 ); -} - - -BRect URLView::GetURLRect() { - // This function will return a BRect that contains only the text - // and the underline, so the mouse can change and the link will - // be activated only when the mouse is over the text itself, not - // just within the view. - BRect frame = Frame(); - frame.OffsetTo( B_ORIGIN ); - - // Get the height of the current font. - font_height height; - GetFontHeight( &height ); - - float stringHeight = underlineThickness + height.ascent - 1; - - // Get the rectangle of just the string. - return BRect( frame.left, frame.bottom - stringHeight, - frame.left + StringWidth( url->String() ), - frame.bottom - 1 ); -} - - -bool URLView::IsEmailLink() { - // Is this link an e-mail link? - return( url->FindFirst( "mailto:" ) == 0 ); -} - - -bool URLView::IsFTPLink() { - // Is this link an FTP link? - return( url->FindFirst( "ftp://" ) == 0 ); -} - - - -void URLView::LaunchURL() { - // Is the URL a mail link or HTTP? - if( IsEmailLink() ) { - // Lock the string buffer and pass it to the mail program. - char *link = url->LockBuffer( 0 ); - status_t result = be_roster->Launch( "text/x-email", 1, &link ); - url->UnlockBuffer(); - - if( result == B_ALREADY_RUNNING||result == B_BAD_VALUE) - { - char app_sig[B_MIME_TYPE_LENGTH]; - - BMimeType("text/x-email").GetPreferredApp(app_sig); - //result = be_roster->Launch( app_sig, 1, &link ); - BMessenger messenger(app_sig); - BMessage msg(B_ARGV_RECEIVED); - msg.AddInt32("argc",2); - msg.AddString("argv","app"); - msg.AddString("argv",link); - msg.AddString("cmd","/"); - BMessage reply; - result = messenger.SendMessage(&msg,&reply); - } - // Make sure the user has an e-mail program. - if( result != B_NO_ERROR && result != B_ALREADY_RUNNING ) { - BAlert *alert = new BAlert( "E-mail Warning", - "There is no e-mail program on your machine that is configured as the default program to send e-mail.", - "Ok", NULL, NULL, B_WIDTH_AS_USUAL, - B_WARNING_ALERT ); - alert->Go(); - } - } - // Handle an HTTP link. - else if( (url->FindFirst( "http://" ) == 0) || - (url->FindFirst( "file://" ) == 0) ) { - // Lock the string buffer and pass it to the web browser. - char *link = url->LockBuffer( 0 ); - status_t result = be_roster->Launch( "text/html", 1, &link ); - url->UnlockBuffer(); - // Make sure the user has a web browser. - if( result != B_NO_ERROR && result != B_ALREADY_RUNNING ) { - BAlert *alert = new BAlert( "Web Browser Warning", - "There is no web browser on your machine that is configured as the default program to view web pages.", - "Ok", NULL, NULL, B_WIDTH_AS_USUAL, - B_WARNING_ALERT ); - alert->Go(); - } - } - // Handle an FTP link. - else if( IsFTPLink() ) { - // Lock the string buffer and pass it to the FTP client. - char *link = url->LockBuffer( 0 ); - status_t result = be_roster->Launch( "application/x-vnd.Be.URL.ftp", - 1, &link ); - url->UnlockBuffer(); - // Make sure the user has an FTP client. - if( result != B_NO_ERROR && result != B_ALREADY_RUNNING ) { - BAlert *alert = new BAlert( "FTP Warning", - "There is no FTP client on your machine that is configured as the default program to connect to an FTP server.", - "Ok", NULL, NULL, B_WIDTH_AS_USUAL, - B_WARNING_ALERT ); - alert->Go(); - } - } - - // We don't know how to handle anything else. -} - - - -void URLView::Redraw() { - // Redraw the link without flicker. - BRect frame = Frame(); - frame.OffsetTo( B_ORIGIN ); - Draw( frame ); -} - - -void URLView::WriteAttributes( int fd ) { - // Write the developer-defined attributes to the newly-created file. - KeyPair *item; - for( int i = 0; (item = (KeyPair *) attributes->ItemAt(i)); i++ ) { - fs_write_attr( fd, item->key->String(), B_STRING_TYPE, 0, item->value->String(), item->value->Length() + 1 ); - } -} \ No newline at end of file diff --git a/src/prefs/sounds/Utils/URLView.h b/src/prefs/sounds/Utils/URLView.h deleted file mode 100644 index cda8f54f64..0000000000 --- a/src/prefs/sounds/Utils/URLView.h +++ /dev/null @@ -1,127 +0,0 @@ -/* URLView 2.0 - written by William Kakes of Tall Hill Software. - - This class provides an underlined and clickable BStringView - that will launch the web browser, e-mail program, or FTP client - when clicked on. Other features include hover-highlighting, - right-click menus, and drag-and-drop support. - - You are free to use URLView in your own programs (both open-source - and closed-source) free of charge, but a mention in your read me - file or your program's about box would be appreciated. See - http://www.tallhill.com for current contact information. - - URLView is provided as-is, with no warranties of any kind. If - you use it, you are on your own. -*/ - - - -#ifndef TH_URL_VIEW_H -#define TH_URL_VIEW_H - - - -#include -#include -#include -#include -#include -#include - - - -// This is the link's mouse cursor (a replica of NetPositive's link cursor). -const uint8 url_cursor[] = { 16, 1, 1, 2, - // This is the cursor data. - 0x00, 0x00, 0x38, 0x00, 0x24, 0x00, 0x24, 0x00, - 0x13, 0xe0, 0x12, 0x5c, 0x09, 0x2a, 0x08, 0x01, - 0x3c, 0x21, 0x4c, 0x71, 0x42, 0x71, 0x30, 0xf9, - 0x0c, 0xf9, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, - - // This is the cursor mask. - 0x00, 0x00, 0x38, 0x00, 0x3c, 0x00, 0x3c, 0x00, - 0x1f, 0xe0, 0x1f, 0xfc, 0x0f, 0xfe, 0x0f, 0xff, - 0x3f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x3f, 0xff, - 0x0f, 0xff, 0x03, 0xfe, 0x01, 0xf8, 0x00, 0x00, - }; - - - - -// The default link color, blue. -const rgb_color blue = { 0, 0, 255 }; -// The default clicked-link color, red. -const rgb_color red = { 255, 0, 0 }; -// The default link hover color, dark blue. -const rgb_color dark_blue = { 0, 0, 120 }; - - - -class URLView : public BStringView { - public: - URLView( BRect frame, const char *name, const char *label, const char *url, - uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP, - uint32 flags = B_WILL_DRAW ); - ~URLView(); - - - void AttachedToWindow(); - void Draw( BRect updateRect ); - void MessageReceived( BMessage *message ); - void MouseDown( BPoint point ); - void MouseMoved( BPoint point, uint32 transit, const BMessage *message ); - void MouseUp( BPoint point ); - - void AddAttribute( const char *name, const char *value ); - void SetColor( rgb_color color ); - void SetClickColor( rgb_color color ); - void SetDraggable( bool draggable ); - void SetHoverColor( rgb_color color ); - void SetHoverEnabled( bool hover ); - void SetIconSize( icon_size iconSize ); - void SetUnderlineThickness( int thickness ); - - - private: - void CopyToClipboard(); - void CreateBookmark( const BString *fullName, const BString *title ); - void CreatePerson( const BString *fullName, const BString *title ); - BPopUpMenu *CreatePopupMenu(); - void DoBookmarkDrag(); - void DoPersonDrag(); - BString GetImportantURL(); - BRect GetTextRect(); - BRect GetURLRect(); - bool IsEmailLink(); - bool IsFTPLink(); - void LaunchURL(); - void Redraw(); - void WriteAttributes( int fd ); - - BString *url; - rgb_color color; - rgb_color clickColor; - rgb_color hoverColor; - bool hoverEnabled; - bool draggable; - int underlineThickness; - int iconSize; - - bool selected; - bool hovering; - bool draggedOut; - bool inPopup; - const BCursor *linkCursor; - BPoint dragOffset; - BList *attributes; - - typedef struct kp { - BString *key; - BString *value; - } KeyPair; -}; - - - -#endif // TH_URL_VIEW \ No newline at end of file