1 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */ 2 3 /* AbiSource Application Framework 4 * Copyright (C) 1998 AbiSource, Inc. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 * 02110-1301 USA. 20 */ 21 22 23 #ifndef XAP_Frame_H 24 #define XAP_Frame_H 25 26 #include <string> 27 28 /* pre-emptive dismissal; ut_types.h is needed by just about everything, 29 * so even if it's commented out in-file that's still a lot of work for 30 * the preprocessor to do... 31 */ 32 #ifndef UT_TYPES_H 33 #include "ut_types.h" 34 #endif 35 #include "ut_string_class.h" 36 #include "ut_vector.h" 37 #include "ut_misc.h" 38 39 #include "xav_Listener.h" // for AV_ListenerID 40 41 #include "xap_Dlg_MessageBox.h" 42 #include "xap_Strings.h" 43 #include "xap_Types.h" 44 45 #include "gr_Graphics.h" 46 #include <gsf/gsf-input.h> 47 48 class XAP_App; 49 class XAP_DialogFactory; 50 class ap_ViewListener; 51 class AV_View; 52 class AD_Document; 53 class EV_EditEventMapper; 54 class EV_EditBindingMap; 55 class EV_Mouse; 56 class EV_Toolbar; 57 class EV_Keyboard; 58 class EV_Menu; 59 class AV_ScrollObj; 60 class ap_Scrollbar_ViewListener; 61 class UT_Worker; 62 class UT_Timer; 63 64 /***************************************************************** 65 ****************************************************************** 66 ** This file defines the base class for the cross-platform 67 ** application frame. This is used to hold all of the 68 ** window-specific data. One of these is created for each 69 ** top-level document window. (If we do splitter windows, 70 ** the views will probably share this frame instance.) 71 ****************************************************************** 72 *****************************************************************/ 73 74 75 76 ////////////////////////////////////////////////////////////////// 77 78 // FOR FUTURE REFERENCE: XAP_FrameImpl defines services that are quite specific 79 // to the _implementation_ of the frame, and involve platform specific code 80 // XAP_Frame defines services that are specific to public interface (from the 81 // point of view of abi code) of the visible frame and not the implementation 82 // The line between these two things _is_ sometimes ambiguous. use your judgement 83 // when adding something onto the frame code 84 85 #include "xap_FrameImpl.h" 86 87 class ABI_EXPORT XAP_Frame 88 { 89 public: 90 XAP_Frame(XAP_FrameImpl *pFrameImpl); 91 XAP_Frame(XAP_Frame * pFrame); 92 virtual ~XAP_Frame(); 93 94 virtual bool initialize(const char * szKeyBindingsKey, const char * szKeyBindingsDefaultValue, 95 const char * szMenuLayoutKey, const char * szMenuLayoutDefaultValue, 96 const char * szMenuLabelSetKey, const char * szMenuLabelSetDefaultValue, 97 const char * szToolbarLayoutsKey, const char * szToolbarLayoutsDefaultValue, 98 const char * szToolbarLabelSetKey, const char * szToolbarLabelSetDefaultValue); 99 100 virtual XAP_Frame * cloneFrame() = 0; 101 virtual XAP_Frame * buildFrame(XAP_Frame * pClone) = 0; 102 virtual UT_Error loadDocument(AD_Document* pDoc) = 0; 103 virtual UT_Error loadDocument(const char * szFilename, int ieft) = 0; 104 virtual UT_Error loadDocument(const char * szFileName, int ieft, bool createNew) = 0; 105 virtual UT_Error loadDocument(GsfInput * input, int ieft) = 0; 106 virtual UT_Error importDocument (const char * szFilename, int ieft, bool markClean = false) = 0; 107 108 // thin interface functions to facilities provided by the helper close()109 bool close() { return m_pFrameImpl->_close(); } raise()110 bool raise() { return m_pFrameImpl->_raise(); } show()111 bool show() { return m_pFrameImpl->_show(); } updateTitle()112 bool updateTitle() { return m_pFrameImpl->_updateTitle(); } setCursor(GR_Graphics::Cursor cursor)113 void setCursor(GR_Graphics::Cursor cursor) { m_pFrameImpl->_setCursor(cursor); } queue_resize()114 virtual void queue_resize() { m_pFrameImpl->_queue_resize(); } setFullScreen(bool isFullScreen)115 void setFullScreen(bool isFullScreen) { m_pFrameImpl->_setFullScreen(isFullScreen); } hideMenuScroll(bool bHideMenuScroll)116 void hideMenuScroll(bool bHideMenuScroll) { 117 m_bHideMenuScroll = bHideMenuScroll; 118 m_pFrameImpl->_hideMenuScroll(bHideMenuScroll);} getDialogFactory()119 virtual XAP_DialogFactory * getDialogFactory() { return m_pFrameImpl->_getDialogFactory(); } _newToolbar(XAP_Frame * frame,const char * szLayout,const char * szLanguage)120 virtual EV_Toolbar * _newToolbar(XAP_Frame *frame, const char *szLayout, const char *szLanguage) { return m_pFrameImpl->_newToolbar(frame, szLayout, szLanguage); } getMainMenu()121 virtual EV_Menu* getMainMenu() { return m_pFrameImpl->_getMainMenu(); } 122 getFrameImpl()123 XAP_FrameImpl * getFrameImpl() const { return m_pFrameImpl; } 124 nullUpdate()125 void nullUpdate () const { m_pFrameImpl->_nullUpdate(); } 126 AV_View * getCurrentView() const; 127 AD_Document * getCurrentDoc() const; setView(AV_View * pView)128 void setView(AV_View * pView) {m_pView = pView;} setDoc(AD_Document * pDoc)129 void setDoc(AD_Document * pDoc) {m_pDoc = pDoc;} 130 const char * getFilename() const; 131 const UT_UTF8String & getTitle() const; 132 const char * getNonDecoratedTitle() const; 133 134 XAP_FrameMode getFrameMode(); 135 void setFrameMode(XAP_FrameMode iFrameMode); 136 bool isDirty() const; 137 138 void setViewNumber(UT_uint32 n); 139 UT_uint32 getViewNumber() const; 140 const char * getViewKey() const; 141 getFrameData()142 inline void * getFrameData() const { return m_pData; } 143 144 virtual void setXScrollRange() = 0; 145 virtual void setYScrollRange() = 0; 146 virtual void quickZoom(UT_uint32 iZoom) = 0; runModalContextMenu(AV_View * pView,const char * szMenuName,UT_sint32 x,UT_sint32 y)147 bool runModalContextMenu(AV_View * pView, const char * szMenuName, 148 UT_sint32 x, UT_sint32 y) { return m_pFrameImpl->_runModalContextMenu(pView, szMenuName, x, y); } 149 150 typedef enum { z_200, z_100, z_75, z_PAGEWIDTH, z_WHOLEPAGE, z_PERCENT } tZoomType; 151 virtual void setZoomPercentage(UT_uint32 iZoom); 152 virtual UT_uint32 getZoomPercentage(); setZoomType(XAP_Frame::tZoomType z_Type)153 void setZoomType(XAP_Frame::tZoomType z_Type){ m_zoomType = z_Type; } getZoomType()154 XAP_Frame::tZoomType getZoomType() { return m_zoomType; } 155 void updateZoom(); 156 void quickZoom(void); 157 158 virtual void setStatusMessage(const char * szMsg) = 0; 159 // TODO change that to be the main call. setStatusMessage(const std::string & s)160 void setStatusMessage(const std::string & s) 161 { 162 setStatusMessage(s.c_str()); 163 } 164 toggleRuler(bool)165 virtual void toggleRuler(bool /*bRulerOn*/) { } // 166 virtual void toggleTopRuler(bool /*bRulerOn*/) = 0; 167 virtual void toggleLeftRuler(bool /*bRulerOn*/) = 0; toggleBar(UT_uint32,bool)168 virtual void toggleBar(UT_uint32 /* iBarNb */, bool /* bBarOn */) { } toggleStatusBar(bool)169 virtual void toggleStatusBar(bool /* bStatusBarOn */) { } getBarVisibility(UT_uint32)170 virtual bool getBarVisibility(UT_uint32 /*iBarNb*/) { return true; } 171 getMouse()172 EV_Mouse * getMouse() { return m_pFrameImpl->m_pMouse; } getKeyboard()173 EV_Keyboard * getKeyboard() { return m_pFrameImpl->m_pKeyboard; } 174 175 EV_Toolbar * getToolbar(UT_sint32 ibar); 176 UT_sint32 findToolbarNr(EV_Toolbar * pTB); rebuildMenus(void)177 virtual void rebuildMenus(void) { m_pFrameImpl->_rebuildMenus();} 178 bool repopulateCombos(); 179 180 void rebuildAllToolbars(void); refillToolbarsInFrameData(void)181 void refillToolbarsInFrameData(void) { m_pFrameImpl->_refillToolbarsInFrameData(); } 182 void dragBegin(XAP_Toolbar_Id srcId, 183 EV_Toolbar * pTBsrc); 184 void dragDropToIcon(XAP_Toolbar_Id srcId, 185 XAP_Toolbar_Id destId, 186 EV_Toolbar * pTBsrc, 187 EV_Toolbar * pTBdest); 188 void dragDropToTB(XAP_Toolbar_Id srcId, 189 EV_Toolbar * pTBsrc, 190 EV_Toolbar * pTBdest); 191 void dragEnd(XAP_Toolbar_Id srcId); isBackupRunning(void)192 bool isBackupRunning(void) 193 { return m_bBackupRunning;} getAutoSavePeriod(void)194 UT_sint32 getAutoSavePeriod(void) 195 { return m_iAutoSavePeriod;} 196 void setAutoSaveFile(bool); 197 void setAutoSaveFilePeriod(int); 198 void setAutoSaveFileExt(const UT_String &); 199 200 XAP_Dialog_MessageBox * createMessageBox(XAP_String_Id id, 201 XAP_Dialog_MessageBox::tButtons buttons, 202 XAP_Dialog_MessageBox::tAnswer default_answer, 203 ...); 204 205 XAP_Dialog_MessageBox::tAnswer showMessageBox(XAP_String_Id id, 206 XAP_Dialog_MessageBox::tButtons buttons, 207 XAP_Dialog_MessageBox::tAnswer default_answer); 208 209 XAP_Dialog_MessageBox::tAnswer showMessageBox(const std::string & sz, 210 XAP_Dialog_MessageBox::tButtons buttons, 211 XAP_Dialog_MessageBox::tAnswer default_answer); 212 213 XAP_Dialog_MessageBox::tAnswer showMessageBox(const char * sz, 214 XAP_Dialog_MessageBox::tButtons buttons, 215 XAP_Dialog_MessageBox::tAnswer default_answer); 216 217 XAP_Dialog_MessageBox::tAnswer showMessageBox(XAP_String_Id id, 218 XAP_Dialog_MessageBox::tButtons buttons, 219 XAP_Dialog_MessageBox::tAnswer default_answer, 220 const char * sz); 221 222 XAP_Dialog_MessageBox::tAnswer showMessageBox(XAP_Dialog_MessageBox * pDialog); 223 224 UT_Error backup(const char* stExt = 0, UT_sint32 iEFT = -1); 225 UT_String makeBackupName (const char * szExt = 0); 226 isStatusBarShown(void)227 bool isStatusBarShown(void) const { return m_bShowStatusbar;} isMenuBarShown(void)228 bool isMenuBarShown(void) const { return m_bShowMenubar;} setStatusBarShown(bool)229 virtual void setStatusBarShown(bool /*bShowStatusbar*/) {} setMenuBarShown(bool)230 virtual void setMenuBarShown(bool /*bShowMenubar*/) {} 231 time_t getTimeSinceSave() const; isFrameLocked(void)232 bool isFrameLocked(void) const 233 {return m_bIsFrameLocked;} setFrameLocked(bool bLock)234 void setFrameLocked(bool bLock) 235 {m_bIsFrameLocked = bLock;} isMenuScrollHidden(void)236 bool isMenuScrollHidden(void) const 237 { return m_bHideMenuScroll;} 238 UT_RGBColor getColorSelBackground () const; 239 UT_RGBColor getColorSelForeground () const; 240 241 void dragText(); getDocumentAreaXoff(void)242 virtual UT_sint32 getDocumentAreaXoff(void) 243 { return 0;} getDocumentAreaYoff(void)244 virtual UT_sint32 getDocumentAreaYoff(void) 245 { return 0;} 246 protected: 247 friend class XAP_FrameImpl; 248 249 AD_Document * m_pDoc; /* to our in-memory representation of a document */ 250 AV_View * m_pView; /* to our view on the document */ 251 ap_ViewListener * m_pViewListener; 252 AV_ListenerId m_lid; 253 AV_ScrollObj * m_pScrollObj; /* to our scroll handler */ 254 UT_uint32 m_nView; 255 int m_iUntitled; 256 ap_Scrollbar_ViewListener * m_pScrollbarViewListener; 257 AV_ListenerId m_lidScrollbarViewListener; 258 XAP_Frame::tZoomType m_zoomType; 259 GR_Graphics::Cursor m_cursor; 260 void * m_pData; /* app-specific frame data */ 261 bool m_bHideMenuScroll; 262 263 static int _getNextUntitledNumber(); 264 265 private: 266 void _createAutoSaveTimer(); 267 void _removeAutoSaveFile(); 268 269 UT_UTF8String m_sTitle; 270 UT_UTF8String m_sNonDecoratedTitle; 271 272 UT_uint32 m_iIdAutoSaveTimer; 273 UT_uint32 m_iAutoSavePeriod; 274 UT_String m_stAutoSaveExt; 275 UT_String m_stAutoSaveNamePrevious; 276 bool m_bBackupRunning; 277 bool m_bBackupInProgress; 278 279 static int s_iUntitled; 280 281 XAP_Toolbar_Id m_isrcId; 282 UT_sint32 m_isrcTBNr; 283 XAP_Toolbar_Id m_idestId; 284 UT_sint32 m_idestTBNr; 285 bool m_bisDragging; 286 bool m_bHasDropped; 287 bool m_bHasDroppedTB; 288 289 bool m_bFirstDraw; // WL_REFACTOR: should this go into the helper? 290 bool m_bShowStatusbar; 291 bool m_bShowMenubar; 292 bool m_bIsFrameLocked; 293 294 XAP_FrameImpl * m_pFrameImpl; /* set by platform specific code */ 295 UT_uint32 m_iZoomPercentage; 296 }; 297 298 #endif /* XAP_Frame_H */ 299 300 301 302 303 304 305 306 307 308