Menu

[r1770]: / trunk / Src / UDetailPageLoader.pas  Maximize  Restore  History

Download this file

126 lines (108 with data), 4.1 kB

  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
{
* UDetailPageLoader.pas
*
* Heirachy of classes that can produce and load HTML pages displayed in the
* detail panes. Also provides a factory class to create the loader objects.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is UDetailPageLoader.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2005-2011 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s)
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit UDetailPageLoader;
interface
uses
// Project
Browser.UController, UBaseObjects, UDetailPageHTML, UView;
type
{ TODO: Consider changing class into normal class and maintain an instance in
detail frame. This way detail.html can be loaded in constructor and
reference kept to controller, which is also passed in constructor.
}
/// <summary>
/// Static class that displays an HTML page that represents a view.
/// </summary>
/// <remarks>
/// Used to display views in main window's detail pane.
/// </remarks>
TDetailPageLoader = class(TNoConstructObject)
strict private
/// <summary>Loads a blank document into a browser control if no document
/// already exists.</summary>
/// <param name="WBController">TWBController [in] Controller object for
/// an associated web browser control.</param>
/// <remarks>Blank document imports all CSS and JavaScript required for
/// detail pane views.</remarks>
class procedure InitBrowser(const WBController: TWBController);
/// <summary>Generates and displays a view in a browser control.</summary>
/// <param name="Generator">TDetailPageHTML [in] Object that generates
/// HTML to be displayed.</param>
/// <param name="WBController">TWBController [in] Controller object used to
/// display HTML in its web browser control.</param>
/// <remarks>Generated HTML replaces current body of document currently
/// loaded in web browser.</remarks>
class procedure DisplayHTML(const Generator: TDetailPageHTML;
const WBController: TWBController);
public
/// <summary>Loads an HTML representation of a view into a web browser
/// control.</summary>
/// <param name="View">IView [in] View to be displayed.</param>
/// <param name="WBController">TWBController [in] Controller object for
/// an associated web browser control.</param>
class procedure LoadPage(View: IView; const WBController: TWBController);
end;
implementation
{ TDetailPageLoader }
class procedure TDetailPageLoader.DisplayHTML(const Generator: TDetailPageHTML;
const WBController: TWBController);
var
HTML: string; // HTML to be displayed
begin
HTML := Generator.Generate;
WBController.IOMgr.ReplaceExistingBodyHTML(HTML);
end;
class procedure TDetailPageLoader.InitBrowser(
const WBController: TWBController);
begin
if not WBController.IOMgr.HTMLDocumentExists then
WBController.IOMgr.NavigateToResource(HInstance, 'detail.html');
end;
class procedure TDetailPageLoader.LoadPage(View: IView;
const WBController: TWBController);
var
Generator: TDetailPageHTML; // object used to generate body's inner HTML
begin
Assert(Assigned(View), ClassName + '.LoadPage: View is nil');
Assert(Assigned(WBController), ClassName + '.LoadPage: WBController is nil');
InitBrowser(WBController);
Generator := TDetailPageHTMLFactory.CreateGenerator(View);
try
DisplayHTML(Generator, WBController);
finally
Generator.Free;
end;
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.