142 lines
4.3 KiB
C++
142 lines
4.3 KiB
C++
/* URLView 2.11
|
|
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 <Cursor.h>
|
|
#include <List.h>
|
|
#include <Mime.h>
|
|
#include <PopUpMenu.h>
|
|
#include <String.h>
|
|
#include <StringView.h>
|
|
|
|
|
|
|
|
// 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 };
|
|
// The default disabled color, gray.
|
|
const rgb_color gray = { 100, 100, 100 };
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
virtual void AttachedToWindow();
|
|
virtual void Draw( BRect updateRect );
|
|
virtual void MessageReceived( BMessage *message );
|
|
virtual void MouseDown( BPoint point );
|
|
virtual void MouseMoved( BPoint point, uint32 transit, const BMessage *message );
|
|
virtual void MouseUp( BPoint point );
|
|
virtual void WindowActivated( bool active );
|
|
|
|
virtual void AddAttribute( const char *name, const char *value );
|
|
virtual bool IsEnabled();
|
|
virtual void SetColor( rgb_color color );
|
|
virtual void SetColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
virtual void SetClickColor( rgb_color color );
|
|
virtual void SetClickColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
virtual void SetDisabledColor( rgb_color color );
|
|
virtual void SetDisabledColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
virtual void SetDraggable( bool draggable );
|
|
virtual void SetEnabled( bool enabled );
|
|
virtual void SetHoverColor( rgb_color color );
|
|
virtual void SetHoverColor( uchar red, uchar green, uchar blue, uchar alpha = 255 );
|
|
virtual void SetHoverEnabled( bool hover );
|
|
virtual void SetIconSize( icon_size iconSize );
|
|
virtual void SetUnderlineThickness( int thickness );
|
|
virtual void SetURL( const char *url );
|
|
|
|
|
|
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();
|
|
bool IsHTMLLink();
|
|
void LaunchURL();
|
|
void Redraw();
|
|
void WriteAttributes( int fd );
|
|
|
|
BString *url;
|
|
rgb_color color;
|
|
rgb_color clickColor;
|
|
rgb_color hoverColor;
|
|
rgb_color disabledColor;
|
|
bool enabled;
|
|
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
|