summaryrefslogtreecommitdiffstats
path: root/src/kchmviewwindow.h
blob: a114eacc55afbb0b9eabeb5b751024bf3b7d0bfa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/***************************************************************************
 *   Copyright (C) 2004-2007 by Georgy Yunaev, [email protected]       *
 *   Please do not use email address above for bug reports; see            *
 *   the README file                                                       *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.             *
 ***************************************************************************/

#ifndef KCHMVIEWWINDOW_H
#define KCHMVIEWWINDOW_H

#include "forwarddeclarations.h"
#include "kde-qt.h"

/**
@author Georgy Yunaev
*/
class KCHMViewWindow
{
public:
	KCHMViewWindow ( QTabWidget * parent );
    virtual ~KCHMViewWindow();

	//! Open a page from current chm archive
	bool	openUrl (const QString& url );
	
	QString	getBaseUrl() const	{ return m_base_url; }
	QString	getOpenedPage() const	{ return m_openedPage; }
	QString	getNewTabLink() const	{ return m_newTabLinkKeeper; }
	QString	makeURLabsolute ( const QString &url, bool set_as_base = true );
	
public: 
	// virtual members, which should be implemented by viewers
	//! Invalidate current view, doing all the cleanups etc.
	virtual void	invalidate();

	//! Popups the print dialog, and prints the current page on the printer.
	virtual bool	printCurrentPage() = 0;

	//! Continues the find-in-page search forward or backward
	virtual void	searchWord( const QString & word, bool forward = true, bool casesensitive = false ) = 0;

	//! Return current ZoomFactor.
	virtual int		getZoomFactor() const = 0;
	
	//! Sets ZoomFactor. The value returned by getZoomFactor(), given to this function, should give the same result.
	virtual void	setZoomFactor (int zoom) = 0;
	
	//! Relatively changes ZoomFactor. Most common values are -1 and 1.
	virtual void	addZoomFactor (int value) = 0;

	virtual QObject *	getQObject() = 0;
	virtual QWidget *	getQWidget() = 0;

	/*!
	 * Return current scrollbar position in view window. Saved on program exit. 
	 * There is no restriction on returned value, except that giving this value to 
	 * setScrollbarPosition() should move the scrollbar in the same position.
	 */
	virtual int		getScrollbarPosition() = 0;
	
	//! Sets the scrollbar position.
	virtual void	setScrollbarPosition(int pos) = 0;

	//! Select the content of the whole page
	virtual void	clipSelectAll() = 0;

	//! Copies the selected content to the clipboard
	virtual void	clipCopy() = 0;

	//! Returns the window title
	virtual QString	getTitle() const;
	
	//! Navigation stuff
	virtual void	navigateBack();
	virtual void	navigateHome();
	virtual void	navigateForward();
	
	//! Navigation auxiliary stuff
	virtual void	setHistoryMaxSize (unsigned int size) { m_historyMaxSize = size; }
	virtual void	addNavigationHistory( const QString & url, int scrollpos );
	virtual void 	updateNavigationToolbar();
	
	/*! 
	 * Used by contents window (and probably by other windows in future) to show
	 * context menu in listviews. Put here to futher reuse code in index and search windows.
	 */
	KQPopupMenu *	createListItemContextMenu ( QWidget * w );
	void			setTabKeeper ( const QString& link );
	
		
protected: /* signals */
	/*!
	 * Emitted when the user clicked on the link, before the page changed.
	 * If linkClicked() return false, the current page should NOT change.
	 * Otherwise it should be changed to the new link value.
	 */
	virtual void	signalLinkClicked ( const QString & newlink, bool& follow_link ) = 0;

protected:
	virtual bool	openPage ( const QString& url ) = 0;
	virtual void	handleStartPageAsImage( QString& link );
	
	KQPopupMenu * 	getContextMenu( const QString& link, QWidget * parent );
	KQPopupMenu * 	createStandardContextMenu( QWidget * parent );
	
	//! History
	class KCHMUrlHistory
	{
		public:
			KCHMUrlHistory() { scrollbarpos = 0; }
			KCHMUrlHistory( const QString& _url, int _scrollbarpos )
			: url(_url), scrollbarpos(_scrollbarpos) {};
		
			const QString&  getUrl() const { return url; }
			int 			getScrollPosition() const { return scrollbarpos; }
			void			setScrollPosition( int pos ) { scrollbarpos = pos; }
			
		private:
			QString  	url;
			int 		scrollbarpos;
	};

	unsigned int	m_historyMaxSize;
	unsigned int	m_historyCurrentPos;
	
	QValueList<KCHMUrlHistory>		m_history;
	
	KQPopupMenu *	m_contextMenu;
	KQPopupMenu *	m_contextMenuLink;
	
	// This member keeps a "open new tab" link between getContextMenu() call and appropriate
	// slot call
	QString			m_newTabLinkKeeper;

	QString 		m_openedPage;
	QString 		m_lastOpenedPage;
	QString			m_base_url;

	QTabWidget	*	m_parentTabWidget;
};

#endif