/* * Copyright (c) 2008 Stephan Aßmus . * Copyright (c) 2009 Philippe Saint-Pierre, stpere@gmail.com * All rights reserved. Distributed under the terms of the MIT license. * * Copyright (c) 1999 Mike Steed. You are free to use and distribute this software * as long as it is accompanied by it's documentation and this copyright notice. * The software comes with no warranty, etc. */ #ifndef PIE_VIEW_H #define PIE_VIEW_H #include #include #include class AppMenuItem; class BEntry; class BMenu; class BPath; class BPopUpMenu; class BVolume; struct entry_ref; struct FileInfo; class Scanner; class MainWindow; using std::map; using std::vector; class PieView: public BView { public: PieView(BVolume* volume); virtual ~PieView(); virtual void AttachedToWindow(); virtual void MessageReceived(BMessage* message); virtual void MouseDown(BPoint where); virtual void MouseUp(BPoint where); virtual void MouseMoved(BPoint where, uint32 transit, const BMessage* dragMessage); virtual void Draw(BRect updateRect); void SetPath(BPath path); private: void _ShowVolume(BVolume* volume); void _DrawProgressBar(BRect updateRect); void _DrawPieChart(BRect updateRect); float _DrawDirectory(BRect b, FileInfo* info, float parentSpan, float beginAngle, int colorIdx, int level); FileInfo* _FileAt(const BPoint& where); void _AddAppToList(vector& list, const char* appSignature, int category); BMenu* _BuildOpenWithMenu(FileInfo* info); void _ShowContextMenu(FileInfo* info, BPoint where); void _Launch(FileInfo* info, const entry_ref* ref = NULL); void _OpenInfo(FileInfo* info, BPoint p); private: struct Segment { Segment() : begin(0.0), end(0.0), info(NULL) { } Segment(float b, float e, FileInfo* i) : begin(b), end(e), info(i) { } Segment(const Segment &s) : begin(s.begin), end(s.end), info(s.info) { } ~Segment() { } float begin; float end; FileInfo* info; }; typedef vector SegmentList; typedef map MouseOverInfo; private: MainWindow* fWindow; Scanner* fScanner; BVolume* fVolume; FileInfo* fCurrentDir; MouseOverInfo fMouseOverInfo; BPopUpMenu* fMouseOverMenu; BPopUpMenu* fFileUnavailableMenu; float fFontHeight; bool fClicked; bool fDragging; BPoint fDragStart; FileInfo* fClickedFile; BPoint fLastWhere; bool fUpdateFileAt; }; #endif // PIE_VIEW_H