Menu

[r611]: / branches / delphi2010-port / Src / UCopyViewMgr.pas  Maximize  Restore  History

Download this file

133 lines (114 with data), 3.8 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
125
126
127
128
129
130
131
{
* UCopyViewMgr.pas
*
* Implements an abstract base class for objects that copy a representation of a
* view to the clipboard.
*
* $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 UCopyViewMgr.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2009 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s)
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit UCopyViewMgr;
interface
uses
// Project
UBaseObjects, UView;
type
{
TCopyViewMgr:
Static abstract base class for objects that copy a representation of a view
to the clipboard.
}
TCopyViewMgr = class abstract(TNoConstructObject)
strict protected
class function GeneratePlainText(const View: TViewItem): string;
virtual; abstract;
{Generates rich text representation of a view that is to be copied to
clipboard.
@param View [in] View to be represented in plain text.
}
class function GenerateRichText(const View: TViewItem): string;
virtual; abstract;
{Generates rich text representation of a view that is to be copied to
clipboard.
@param View [in] View to be represented in rich text.
}
public
class function CanHandleView(const View: TViewItem): Boolean;
virtual; abstract;
{Checks if view can be copied to clipboard.
@param View [in] View to be checked.
@return True if view can be copied, False otherwise.
}
class procedure Execute(const View: TViewItem);
{Copies the information about the view to the clipboard. Information is
copied in both plain text and rich text formats.
@param View [in] View to be copied. Must be supported by concrete
subclass.
}
end;
implementation
uses
// Delphi
SysUtils,
// Project
UClipboardHelper;
{ TCopyViewMgr }
class procedure TCopyViewMgr.Execute(const View: TViewItem);
{Copies the information about the view to the clipboard.
@param View [in] View to be copied. Must be supported by concrete subclass.
}
var
Clip: TClipboardHelper; // object used to update clipboard
PlainText: string; // plain text representation of snippet
RTF: string; // rich text representation of snippet
begin
Assert(Assigned(View), ClassName + '.Execute: View is nil');
Assert(CanHandleView(View), ClassName + '.Execute: View not supported');
// Generate plain text and rich text representation of snipper
PlainText := GeneratePlainText(View);
RTF := GenerateRichText(View);
// Open clipboard and add both plain and rich text representations of snippet
Clip := TClipboardHelper.Create;
try
Clip.Open;
try
{$IFDEF UNICODE}
Clip.Add(CF_UNICODETEXT, PlainText);
Clip.Add(CF_RTF, BytesOf(RTF)); // convert RTF to default encoding
{$ELSE}
Clip.Add(CF_TEXT, PlainText);
Clip.Add(CF_RTF, RTF);
{$ENDIF}
finally
Clip.Close;
end;
finally
FreeAndNil(Clip);
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.