ultimatepp/uppsrc/CtrlLib/src.tpp/Progress$en-us.tpp
cxl 7cb3472e51 .cpp
git-svn-id: svn://ultimatepp.org/upp/trunk@8457 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2015-05-17 16:13:34 +00:00

144 lines
No EOL
12 KiB
C++

topic "Progress";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[H6;0 $$4,0#05600065144404261032431302351956:begin]
[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item]
[l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement]
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
[b42;2 $$9,9#13035079074754324216151401829390:normal]
[{_}%EN-US
[ {{10000@3 [s0; [*@(229)4 Progress]]}}&]
[s3; &]
[s1;:Progress`:`:class:%- [@(0.0.255)3 class][3 _][*3 Progress][3 _:_][@(0.0.255)3 public][3 _][*@3;3 W
ithProgressLayout][@(0.0.255)3 <][_^TopWindow^3 TopWindow][@(0.0.255)3 >][3 _]&]
[s9; Progress is simple helper dialog that can be used to show a
progress of long operation and to cancel it.&]
[s2; &]
[s2;
@@image:1644&520
(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)
&]
[s3; &]
[s0;%- &]
[ {{10000F(128)G(128)@1 [s0; [* Constructor Detail]]}}&]
[s3; &]
[s5;:Progress`:`:Progress`(`):%- [* Progress]()&]
[s2; Default constructor.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Progress`(Ctrl`*`):%- [* Progress]([_^Ctrl^ Ctrl]_`*[*@3 `_owner])&]
[s5;:Progress`:`:Progress`(const char`*`,int`):%- [* Progress]([@(0.0.255) const]_[@(0.0.255) c
har]_`*[*@3 txt], [@(0.0.255) int]_[*@3 total]_`=_[@3 0])&]
[s5;:Progress`:`:Progress`(Ctrl`*`,const char`*`,int`):%- [* Progress]([_^Ctrl^ Ctrl]_`*[*@3 `_
owner], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 txt], [@(0.0.255) int]_[*@3 total]_`=_[@3 0
])&]
[s2; Convenience constructor variants can set owner, text and total
number of steps.&]
[s3; &]
[s0;%- &]
[ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&]
[s3;%- &]
[s5;:Progress`:`:SetOwner`(Ctrl`*`):%- [@(0.0.255) void]_[* SetOwner]([_^Ctrl^ Ctrl]_`*[*@3 `_
owner])&]
[s2; Sets the owner window of progress. [%-*@3 `_owner] can be child
of owner window too. Note that if owner is not specified, current
active window is used as owner.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Create`(`):%- [@(0.0.255) void]_[* Create]()&]
[s2; Forces dialog to appear on the screen.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Cancel`(`):%- [@(0.0.255) void]_[* Cancel]()&]
[s2; Closes the dialog and sets it to canceled mode.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Set`(int`,int`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int]_[*@3 pos],
[@(0.0.255) int]_[*@3 total])&]
[s2; Sets the current progress position and total.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:SetPos`(int`):%- [@(0.0.255) void]_[* SetPos]([@(0.0.255) int]_[*@3 pos])&]
[s2; Sets the current progress position.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:SetText`(const char`*`):%- [@(0.0.255) void]_[* SetText]([@(0.0.255) const
]_[@(0.0.255) char]_`*[*@3 s])&]
[s5;:Progress`:`:SetText`(const String`&`):%- [@(0.0.255) void]_[* SetText]([@(0.0.255) con
st]_[_^String^ String][@(0.0.255) `&]_[*@3 s])&]
[s2; Sets the text to be displayed in dialog.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:SetTotal`(int`):%- [@(0.0.255) void]_[* SetTotal]([@(0.0.255) int]_[*@3 tota
l])&]
[s2; Sets the [%-*@3 total] number of progress steps.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Step`(int`):%- [@(0.0.255) void]_[* Step]([@(0.0.255) int]_[*@3 steps]_`=_[@3 1
])&]
[s2; Advances progress by [%-*@3 steps]. If total number of steps is
zero, `"running bar`" is displayed.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:GetPos`(`)const:%- [@(0.0.255) int]_[* GetPos]()_[@(0.0.255) const]&]
[s2; Returns the current number of progress steps.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:GetTotal`(`)const:%- [@(0.0.255) int]_[* GetTotal]()_[@(0.0.255) const]&]
[s2; Returns the total number of steps (as set by [* Set ]or [* SetTotal]).&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:GetText`(`)const:%- [_^String^ String]_[* GetText]()_[@(0.0.255) const]&]
[s2; Returns the text of Progress.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Canceled`(`):%- [@(0.0.255) bool]_[* Canceled]()&]
[s2; Shows a Cancel button if not shown yet. If this button is pressed,
sets dialog to canceled mode. Returns true if dialog was canceled.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:SetCanceled`(int`,int`):%- [@(0.0.255) bool]_[* SetCanceled]([@(0.0.255) i
nt]_[*@3 pos], [@(0.0.255) int]_[*@3 total])&]
[s2; Same as Set([%-*@3 pos], [%-*@3 total]), Canceled().&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:SetPosCanceled`(int`):%- [@(0.0.255) bool]_[* SetPosCanceled]([@(0.0.255) i
nt]_[*@3 pos])&]
[s2; Same as SetPos([%-*@3 pos]), Canceled().&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:StepCanceled`(int`):%- [@(0.0.255) bool]_[* StepCanceled]([@(0.0.255) int]_
[*@3 steps]_`=_[@3 1])&]
[s2; Same as Set([%-*@3 steps]), Canceled().&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Reset`(`):%- [@(0.0.255) void]_[* Reset]()&]
[s2; Resets dialog to default settings.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:Granularity`(int`):%- [@(0.0.255) void]_[* Granularity]([@(0.0.255) int]_[*@3 m
s])&]
[s2; Sets how much often should dialog refresh. Default is 50ms.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:AlignText`(int`):%- [@(0.0.255) void]_[* AlignText]([@(0.0.255) int]_[*@3 al
ign])&]
[s2; Sets text alignment. Allowed values are ALIGN`_LEFT, ALIGN`_CENTER
and ALIGN`_RIGHT.&]
[s3; &]
[s4;%- &]
[s5;:Progress`:`:operator Gate2`<int`,int`>`(`):%- [* operator_Gate2<int,
int>]()&]
[s2; Returns a callback to dialog`'s SetCanceled method.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Progress`:`:Delay`(int`):%- [@(0.0.255) void]_[* Delay]([@(0.0.255) int]_[*@3 ms])
&]
[s2; Sets the delay before the dialog is shown for the first time
(in order not to show it when operation proceeds fast). Default
is 250ms.&]
[s3; &]
[s0; ]]