1 /* 2 Open Tracker License 3 4 Terms and Conditions 5 6 Copyright (c) 1991-2000, Be Incorporated. All rights reserved. 7 8 Permission is hereby granted, free of charge, to any person obtaining a copy of 9 this software and associated documentation files (the "Software"), to deal in 10 the Software without restriction, including without limitation the rights to 11 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12 of the Software, and to permit persons to whom the Software is furnished to do 13 so, subject to the following conditions: 14 15 The above copyright notice and this permission notice applies to all licensees 16 and shall be included in all copies or substantial portions of the Software. 17 18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, 20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21 BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION 23 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 25 Except as contained in this notice, the name of Be Incorporated shall not be 26 used in advertising or otherwise to promote the sale, use or other dealings in 27 this Software without prior written authorization from Be Incorporated. 28 29 Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks 30 of Be Incorporated in the United States and other countries. Other brand product 31 names are registered trademarks or trademarks of their respective holders. 32 All rights reserved. 33 */ 34 #ifndef _FILE_PANEL_PRIV_H 35 #define _FILE_PANEL_PRIV_H 36 37 38 #include <FilePanel.h> 39 40 #include "ContainerWindow.h" 41 #include "PoseView.h" 42 #include "TaskLoop.h" 43 44 45 class BTextControl; 46 class BFilePanel; 47 class BRefFilter; 48 class BMessenger; 49 class BMenuField; 50 51 namespace BPrivate { 52 53 class BorderedView; 54 class BDirMenu; 55 class AttributeStreamNode; 56 class BFilePanelPoseView; 57 58 class TFilePanel : public BContainerWindow { 59 public: 60 TFilePanel(file_panel_mode = B_OPEN_PANEL, 61 BMessenger* target = NULL, const BEntry* startDirectory = NULL, 62 uint32 nodeFlavors = B_FILE_NODE | B_SYMLINK_NODE, 63 bool multipleSelection = true, BMessage* = NULL, BRefFilter* = NULL, 64 uint32 containerWindowFlags = 0, 65 window_look look = B_DOCUMENT_WINDOW_LOOK, 66 window_feel feel = B_NORMAL_WINDOW_FEEL, 67 bool hideWhenDone = true); 68 69 virtual ~TFilePanel(); 70 71 BFilePanelPoseView* PoseView() const; 72 73 virtual bool QuitRequested(); 74 virtual void MenusBeginning(); 75 virtual void MenusEnded(); 76 virtual void DispatchMessage(BMessage* message, BHandler* handler); 77 virtual void ShowContextMenu(BPoint, const entry_ref*); 78 79 void SetClientObject(BFilePanel*); 80 void SetRefFilter(BRefFilter*); 81 void SetNodeFlavors(uint32 nodeFlavors) { fNodeFlavors = nodeFlavors; } 82 void SetSaveText(const char* text); 83 void SetButtonLabel(file_panel_button, const char* text); 84 void SetTo(const entry_ref* ref); 85 virtual void SelectionChanged(); 86 void HandleOpenButton(); 87 void HandleSaveButton(); 88 void Rewind(); 89 bool IsSavePanel() const; 90 void Refresh(); 91 const BMessenger* Target() const; 92 BRefFilter* Filter() const; 93 94 void SetTarget(BMessenger); 95 void SetMessage(BMessage* message); 96 97 virtual status_t GetNextEntryRef(entry_ref*); 98 virtual void MessageReceived(BMessage*); 99 100 void SetHideWhenDone(bool); 101 bool HidesWhenDone(void); 102 103 bool TrackingMenu() const; 104 105 // Returns false if RestoreState has not run or if it failed to find 106 // a default state file the last time it ran. 107 bool DefaultStateRestored() const { return fDefaultStateRestored; } 108 109 protected: 110 BPoseView* NewPoseView(Model* model, uint32); 111 virtual void Init(const BMessage* message = NULL); 112 virtual void SaveState(bool hide = true); 113 virtual void SaveState(BMessage &) const; 114 virtual void RestoreState(); 115 virtual void RestoreWindowState(AttributeStreamNode*); 116 virtual void RestoreWindowState(const BMessage&); 117 virtual void RestoreState(const BMessage&); 118 119 virtual void AddFileContextMenus(BMenu*); 120 virtual void AddVolumeContextMenus(BMenu*); 121 virtual void AddWindowContextMenus(BMenu*); 122 virtual void AddDropContextMenus(BMenu*); 123 124 virtual void SetupNavigationMenu(const entry_ref*, BMenu*); 125 virtual void OpenDirectory(); 126 virtual void OpenParent(); 127 virtual void WindowActivated(bool state); 128 129 static filter_result FSFilter(BMessage*, BHandler**, BMessageFilter*); 130 static filter_result MessageDropFilter(BMessage*, BHandler**, 131 BMessageFilter*); 132 133 int32 ShowCenteredAlert(const char* text, const char* button1, 134 const char* button2 = NULL, const char* button3 = NULL); 135 136 private: 137 bool SwitchDirToDesktopIfNeeded(entry_ref &ref); 138 bool CanOpenParent() const; 139 void SwitchDirMenuTo(const entry_ref* ref); 140 void AdjustButton(); 141 bool SelectChildInParent(const entry_ref* parent, const node_ref* child); 142 void OpenSelectionCommon(BMessage*); 143 144 bool fIsSavePanel; 145 uint32 fNodeFlavors; 146 BView* fBackView; 147 BDirMenu* fDirMenu; 148 BMenuField* fDirMenuField; 149 BTextControl* fTextControl; 150 BMessenger fTarget; 151 BFilePanel* fClientObject; 152 int32 fSelectionIterator; 153 BMessage* fMessage; 154 BString fButtonText; 155 bool fHideWhenDone; 156 bool fIsTrackingMenu; 157 bool fDefaultStateRestored; 158 159 typedef BContainerWindow _inherited; 160 }; 161 162 163 class BFilePanelPoseView : public BPoseView { 164 public: 165 BFilePanelPoseView(Model*); 166 167 virtual bool IsFilePanel() const; 168 virtual bool FSNotification(const BMessage*); 169 170 void SetIsDesktop(bool); 171 172 protected: 173 // don't do any volume watching and memtamime watching in file panels 174 // for now 175 virtual void StartWatching(); 176 virtual void StopWatching(); 177 178 virtual void RestoreState(AttributeStreamNode*); 179 virtual void RestoreState(const BMessage &); 180 virtual void SavePoseLocations(BRect* = NULL); 181 182 virtual EntryListBase* InitDirentIterator(const entry_ref*); 183 virtual void AddPosesCompleted(); 184 virtual bool IsDesktopView() const; 185 186 void ShowVolumes(bool visible, bool showShared); 187 188 void AdaptToVolumeChange(BMessage*); 189 void AdaptToDesktopIntegrationChange(BMessage*); 190 191 private: 192 bool fIsDesktop; 193 // This flags makes the distinction between the Desktop as 194 // the root of the world and "/boot/home/Desktop" to which 195 // we might have navigated from the home dir. 196 197 typedef BPoseView _inherited; 198 }; 199 200 201 // inlines follow 202 203 inline bool 204 BFilePanelPoseView::IsFilePanel() const 205 { 206 return true; 207 } 208 209 210 inline bool 211 TFilePanel::IsSavePanel() const 212 { 213 return fIsSavePanel; 214 } 215 216 217 inline const BMessenger* 218 TFilePanel::Target() const 219 { 220 return &fTarget; 221 } 222 223 224 inline void 225 TFilePanel::Refresh() 226 { 227 fPoseView->Refresh(); 228 } 229 230 231 inline bool 232 TFilePanel::HidesWhenDone(void) 233 { 234 return fHideWhenDone; 235 } 236 237 238 inline void 239 TFilePanel::SetHideWhenDone(bool on) 240 { 241 fHideWhenDone = on; 242 } 243 244 245 inline bool 246 TFilePanel::TrackingMenu() const 247 { 248 return fIsTrackingMenu; 249 } 250 251 } // namespace BPrivate 252 253 using namespace BPrivate; 254 255 256 #endif // _FILE_PANEL_PRIV_H 257