pjs/cmd/qtfe/QtContext.h

653 строки
17 KiB
C++

/* $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 <client.h>
#include <fe_proto.h>
#include <xp_file.h>
#include <qwidget.h>
#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