/* $Id: QtContext.h,v 1.2 1998/10/20 02:40:45 cls%seawood.org Exp $ * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. Portions * created by Warwick Allison, Kalle Dalheimer, Eirik Eng, Matthias * Ettrich, Arnt Gulbrandsen, Haavard Nord and Paul Olav Tvete are * Copyright (C) 1998 Warwick Allison, Kalle Dalheimer, Eirik Eng, * Matthias Ettrich, Arnt Gulbrandsen, Haavard Nord and Paul Olav * Tvete. All Rights Reserved. */ #ifndef _QTCONTEXT #define _QTCONTEXT #include #include #include #include #include "finding.h" struct DialogPool; class QMenuBar; #if defined(XP_UNIX) #define CONTEXT_DATA(context) ((QtContext*)((context)->fe.data)) #elif defined(XP_WIN) #define CONTEXT_DATA(context) ((QtContext*)((context)->fe.cx)) #endif class QtContext : public QObject { Q_OBJECT public: static QtContext* qt( MWContext* c ) { return CONTEXT_DATA(c); } virtual ~QtContext(); // Below are used by the FE_* functions. // MANY of them should be moved wholly into QtBrowserContext virtual bool securityDialog(int state, char *prefs_toggle); void setPasswordEnabled(bool usePW); void setPasswordAskPrefs(int askPW, int timeout); void setCipherPrefs(char *cipher); void alert(const char *message); virtual bool confirm( const char* message ); static bool confirm( QtContext* cx, const char* message ); void message(const char* message); char * promptMessageSubject(); void rememberPopPassword(const char *password); int promptForFileName(const char *prompt_string, const char *default_path, bool file_must_exist_p, bool directories_allowed_p, ReadFileNameCallbackFunction fn, void *closure); char * prompt(const char *message, const char *deflt); char * promptWithCaption(const char *caption, const char *message, const char *deflt); char * promptPassword(const char *message); static MWContext * makeNewWindow(URL_Struct *url=0, char *window_name=0, Chrome *chrome=0, MWContext *parent=0); virtual void setRefreshURLTimer(uint32 secs, char *url); virtual void killRefreshURLTimer() {}; void connectToRemoteHost(int url_type, char *hostname, char *port, char *username); int32 getContextID(); void createEmbedWindow(NPEmbeddedApp *app); void saveEmbedWindow(NPEmbeddedApp *app); void restoreEmbedWindow(NPEmbeddedApp *app); void destroyEmbedWindow(NPEmbeddedApp *app); void setDrawable(CL_Drawable *drawable); void progress(const char * message); void setCallNetlibAllTheTime(); void clearCallNetlibAllTheTime(); void graphProgressInit(URL_Struct * , int32 content_length); void graphProgressDestroy(URL_Struct * , int32 content_length, int32 total_bytes_read); void graphProgress(URL_Struct * , int32 , int32 bytes_since_last_time, int32 ); int fileSortMethod(); void layoutNewDocument(URL_Struct *url, int32 *iWidth, int32 *iHeight, int32 *mWidth, int32 *mHeight); virtual void setDocTitle(char *title); void finishedLayout(); void beginPreSection(); void endPreSection(); char * translateISOText(int charset, char *ISO_Text); void getTextInfo(LO_TextStruct *text, LO_TextInfo *text_info); void getTextFrame(LO_TextStruct *text, int32 start, int32 end, XP_Rect *frame); void getEmbedSize(LO_EmbedStruct *embed_struct, NET_ReloadMethod force_reload); void getJavaAppSize(LO_JavaAppStruct *java_struct, NET_ReloadMethod reloadMethod); void getFormElementInfo(LO_FormElementStruct *form); virtual void getFormElementValue(LO_FormElementStruct *form, bool delete_p, bool submit_p); void resetFormElement(LO_FormElementStruct *form); void setFormElementToggle(LO_FormElementStruct *form, bool state); void freeEmbedElement(LO_EmbedStruct *embed_struct); void freeJavaAppElement(struct LJAppletData *appletData); void hideJavaAppElement(struct LJAppletData *appletData); void freeEdgeElement(LO_EdgeStruct *edge); void formTextIsSubmit(LO_FormElementStruct *form); void setProgressBarPercent(int32 percent); virtual void setBackgroundColor(uint8 red, uint8 green, uint8 blue); void displaySubtext(int iLocation, LO_TextStruct *text, int start_pos, int end_pos, bool need_bg); void displayText(int iLocation, LO_TextStruct *text, bool need_bg); void displayEmbed(int iLocation, LO_EmbedStruct *embed_struct); void displayJavaApp(int iLocation, LO_JavaAppStruct *java_struct); void displayEdge(int loc, LO_EdgeStruct *edge); void displayTable(int loc, LO_TableStruct *ts); void displayCell(int loc, LO_CellStruct *cell); void displaySubDoc(int loc, LO_SubDocStruct *sd); void displayLineFeed(int iLocation, LO_LinefeedStruct *line_feed, bool need_bg); void displayHR(int iLocation, LO_HorizRuleStruct *hr); void displayBullet(int iLocation, LO_BulletStruct *bullet); virtual void displayFormElement(int iLocation, LO_FormElementStruct *form); void displayBorder(int iLocation, int x, int y, int width, int height, int bw, LO_Color *color, LO_LineStyle style); void displayFeedback(int iLocation, LO_Element *element); void eraseBackground(int iLocation, int32 x, int32 y, uint32 width, uint32 height, LO_Color *bg); void clearView(int which); virtual void setDocDimension(int iLocation, int32 iWidth, int32 iLength); virtual void setDocPosition(int iLocation, int32 x, int32 y); void getDocPosition(int iLocation, int32 *iX, int32 *iY); // NOT virtual void enableClicking(); void drawJavaApp(int iLocation, LO_JavaAppStruct *java_struct); void allConnectionsComplete(); void releaseTextAttrFeData(LO_TextAttr *attr); void freeFormElement(LO_FormElementData *form_data); virtual int enableBackButton(); virtual int enableForwardButton(); virtual int disableBackButton(); virtual int disableForwardButton(); void updateStopState(); void * freeGridWindow(bool save_history); void restructureGridWindow(int32 x, int32 y, int32 width, int32 height); void getFullWindowSize(int32 *width, int32 *height); void getEdgeMinSize(int32 *size_p); void loadGridCellFromHistory(void *hist, NET_ReloadMethod force_reload); void shiftImage(LO_ImageStruct *lo_image); void scrollDocTo(int iLocation, int32 x, int32 y); void scrollDocBy(int iLocation, int32 deltax, int32 deltay); void backCommand(); void forwardCommand(); void homeCommand(); void printCommand(); void getWindowOffset(int32 *sx, int32 *sy); void getScreenSize(int32 *sx, int32 *sy); void getAvailScreenRect(int32 *sx, int32 *sy, int32 *left, int32 *top); void getPixelAndColorDepth(int32 *pixelDepth, int32 *colorDepth); void setWindowLoading(URL_Struct *url, Net_GetUrlExitFunc **exit_func_p); void raiseWindow(); void destroyWindow(); void getDocAndWindowPosition(int32 *pX, int32 *pY, int32 *pWidth, int32 *pHeight ); void displayTextCaret(int iLocation, LO_TextStruct* text, int char_offset); void displayImageCaret(LO_ImageStruct* image, ED_CaretObjectPosition caretPos); void displayGenericCaret(LO_Any * image, ED_CaretObjectPosition caretPos ); bool getCaretPosition(LO_Position* where, int32* caretX, int32* caretYLow, int32* caretYHigh ); void destroyCaret(); void showCaret(); void documentChanged(int32 p_y, int32 p_height); void setNewDocumentProperties(); void imageLoadDialog(); void imageLoadDialogDestroy(); void saveDialogCreate(int nfiles, ED_SaveDialogType saveType); void saveDialogSetFilename(char* filename); void finishedSave(int status, char *pDestURL, int iFileNumber); void saveDialogDestroy(int status, char* file_url); bool saveErrorContinueDialog(char* filename, ED_FileError error); void clearBackgroundImage(); void editorDocumentLoaded(); void displayAddRowOrColBorder(XP_Rect *pRect, bool bErase); void displayEntireTableOrCell(LO_Element* pLoElement); void focusInputElement(LO_Element *element); void blurInputElement(LO_Element *element); void selectInputElement(LO_Element *element); void changeInputElement(LO_Element *element); void submitInputElement(LO_Element *element); void clickInputElement(LO_Element *xref); virtual bool handleLayerEvent(CL_Layer *layer, CL_Event *layer_event); bool handleEmbedEvent(LO_EmbedStruct *embed, CL_Event *event); void updateChrome(Chrome *chrome); void queryChrome(Chrome * chrome); MWContext * makeGridWindow(void *hist_list, void *history, int x, int y, int width, int height, char *url_str, char *window_name, int scrolling, NET_ReloadMethod force_reload, bool no_edge); void clearDNSSelect(int socket); void setReadSelect(int fd); void clearReadSelect(int fd); void setConnectSelect(int fd); void clearConnectSelect(int fd); void setFileReadSelect(int fd); void clearFileReadSelect(int fd); char* getTempFileFor(const char* fname, XP_FileType ftype, XP_FileType* rettype); virtual int getURL( URL_Struct *url ); // Below are used by the Qt FE, not by the FE_* functions. // return a QFont* for a given Netscape TextStruct. // This will use a cached result if possible QFont getFont(LO_TextAttr *text); virtual void perror( const char* message ); virtual void urlDone(URL_Struct *, int) { } virtual QWidget* contentWidget() const { return 0; } virtual QWidget *topLevelWidget() const { return 0; } virtual int documentWidth() const {return 0; } virtual int documentHeight() const {return 0; } virtual void documentSetContentsPos( int, int ) {} virtual int scrollWidth() const { return 0; } virtual int scrollHeight() const { return 0; } virtual int visibleWidth() const {return 0; } virtual int visibleHeight() const {return 0; } void updateRect(int x, int y, int w, int h); MWContext* mwContext() const { return context; } void setTransparentPixel( const QColor & ); virtual int documentXOffset() const; virtual int documentYOffset() const; void clearPainter(); QPainter* painter() const { if (internal_painter) return internal_painter; else return forcePainter(); } void setDrawableOrigin(int x_origin, int yorigin); int getXOrigin() { return internal_x_origin; } int getYOrigin() { return internal_y_origin; } bool isGridParent( MWContext* ) const; int getSynchronousURL ( QWidget* widget_to_grab, const char *title, URL_Struct *url, int output_format, void *call_data ); int getSecondaryURL( URL_Struct *url_struct, int output_format, void *call_data, bool skip_get_url ); void saveURL ( URL_Struct *url ); DialogPool* dialogPool() const { return dialogpool; } public slots: void cmdQuit(); signals: void messengerMessage(const char*, int); void messengerMessageClear(); void progressStarting( int ); void progressMade( int ); void progressMade(); void progressFinished(); void progressReport( const char * ); void canStop( bool ); void urlChanged( const char * ); protected: QtContext( MWContext* ); virtual QPainter* makePainter(); // re-call document[XY]Offset and void adjustCompositorSize(); void adjustCompositorPosition(); // access the context-specific variable via this pointer DialogPool* dialogpool; virtual void setupToolbarSignals(){}; int bw; int scrolling_policy; // LO_SCROLL_YES, ..NO, .. AUTO, ... NEVER private: QPainter* forcePainter() const; QPainter* internal_painter; // for drawing.cpp --------------------- QColorGroup colorGroup(const QColor&); void displayTableBorder(LO_TableStruct *ts, QRect r, int bw); int internal_x_origin; int internal_y_origin; // end drawing.cpp --------------------- CL_Compositor* createCompositor(MWContext* context); MWContext* context; public: // stuff for the threading or whatever int dont_free_context_memory; QWidget* synchronous_url_dialog; int synchronous_url_exit_status; unsigned char delete_response; bool destroyed; bool looping_images_p; /* TRUE if images are looping. */ int active_url_count; bool clicking_blocked; bool have_tried_progress; fe_FindData find_data; }; class QtMailContext : public QtContext { /* A mail reader window */ public: QtMailContext(MWContext* cx) : QtContext(cx) { } }; class QtNewsContext : public QtContext { /* A news reader window */ public: QtNewsContext(MWContext* cx) : QtContext(cx) { } }; class QtMailMsgContext : public QtContext { /* A window to display a mail msg */ public: QtMailMsgContext(MWContext* cx) : QtContext(cx) { } }; class QtNewsMsgContext : public QtContext { /* A window to display a news msg */ public: QtNewsMsgContext(MWContext* cx) : QtContext(cx) { } }; class QtMessageCompositionContext : public QtContext { /* A news-or-mail message editing window */ public: QtMessageCompositionContext(MWContext* cx) : QtContext(cx) { } }; class QtSaveToDiskContext : public QtContext { /* The placeholder window for a download */ public: QtSaveToDiskContext(MWContext* cx) : QtContext(cx) { } }; class QtTextContext : public QtContext { /* non-window context for text conversion */ public: QtTextContext(MWContext* cx) : QtContext(cx) { } }; class QtPostScriptContext : public QtContext { /* non-window context for PS conversion */ public: QtPostScriptContext(MWContext* cx) : QtContext(cx) { } }; class QtBiffContext : public QtContext { /* non-window context for background mail notification */ public: QtBiffContext(MWContext* cx) : QtContext(cx) { } }; class QtJavaContext : public QtContext { /* non-window context for Java */ public: QtJavaContext(MWContext* cx) : QtContext(cx) { } }; class QtAddressBookContext : public QtContext { /* Context for the addressbook */ public: QtAddressBookContext(MWContext* cx) : QtContext(cx) { } }; class QtOleNetworkContext : public QtContext { /* non-window context for the OLE network1 object */ public: QtOleNetworkContext(MWContext* cx) : QtContext(cx) { } }; class QtPrintContext : public QtContext { /* non-window context for printing */ public: QtPrintContext(MWContext* cx) : QtContext(cx) { } }; class QtDialogContext : public QtContext { /* non-browsing dialogs. view-source/security */ public: QtDialogContext(MWContext* cx) : QtContext(cx) { } }; class QtMetaFileContext : public QtContext { /* non-window context for Windows metafile support */ public: QtMetaFileContext(MWContext* cx) : QtContext(cx) { } }; class QtEditorContext : public QtContext { /* An Editor Window */ public: QtEditorContext(MWContext* cx) : QtContext(cx) { } }; class QtSearchContext : public QtContext { /* a window for modeless search dialog */ public: QtSearchContext(MWContext* cx) : QtContext(cx) { } }; class QtSearchLdapContext : public QtContext { /* a window for modeless LDAP search dialog */ public: QtSearchLdapContext(MWContext* cx) : QtContext(cx) { } }; class QtHTMLHelpContext : public QtContext { /* HTML Help context to load map files */ public: QtHTMLHelpContext(MWContext* cx) : QtContext(cx) { } }; class QtMailFiltersContext : public QtContext { /* Mail filters context */ public: QtMailFiltersContext(MWContext* cx) : QtContext(cx) { } }; class QtMailNewsProgressContext : public QtContext { /* a progress pane for mail/news URLs */ public: QtMailNewsProgressContext(MWContext* cx) : QtContext(cx) { } }; class QtPaneContext : public QtContext { /* Misc browser pane/window in weird parts of the UI, eg. navigation center */ public: QtPaneContext(MWContext* cx) : QtContext(cx) { } }; class QtRDFSlaveContext : public QtContext { /* Slave context for RDF network loads */ public: QtRDFSlaveContext(MWContext* cx) : QtContext(cx) { } }; class QtProgressModuleContext : public QtContext { /* Progress module (PW_ functions) */ public: QtProgressModuleContext(MWContext* cx) : QtContext(cx) { } }; class QtIconContext : public QtContext { /* Context for loading images as icons */ public: QtIconContext(MWContext* cx) : QtContext(cx) { } }; extern "C" { void url_exit(URL_Struct *url, int status, MWContext *context); void imageGroupObserver(XP_Observable observable, XP_ObservableMsg message, void *message_data, void *closure); } #endif