📄 yxkey_g.class
字号:
// yxkey_g
//
// class that holds and draws a key view for an yxview class or a seriesstyle.
*! version 1.0.4 05feb2005
version 8
class {
pos = .compass2dir.new , style(center)
xsz = .gsize.new , style(0)
ysz = .gsize.new , style(0)
force_fixed = 0 // force fixed size
// .view -- a reference to an view, is Declared
// .style -- a style for the key (only one of .view or .style exist)
} , inherit(subview)
//-----------------------------------------------------------------------------
program new
syntax , [ View(string) Style(string) Position(string) ]
if `"`view'"' != `""' {
.Declare view = .`view'.ref
}
if `"`style'"' != `""' {
if `=index(`"`style'"', "__key")' {
.Declare style = .`style'.ref
}
else {
.Declare style = .seriesstyle.new , style(`style')
}
}
if `"`position'"' != `""' {
.pos.setstyle, style(`position')
}
if `.is_scatter' {
.xsz.setstyle, style(`.view.style.marker.size.gmval')
.ysz.setstyle, style(`.view.style.marker.size.gmval')
}
end
//-----------------------------------------------------------------------------
program set
syntax [ , XSize(real -1) YSize(real -1) POSition(string) FORCE ]
if "`force'" == "force" {
.force_fixed = 1
}
if ("`position'" != "") .pos.setstyle, style(`position')
if `ysize' != -1 {
if !`.is_scatter' | "`force'"!="" {
.ysz.setstyle, style(`ysize')
}
if "`.view.type.stylename'" == "sunflower" {
.xsz.setstyle, style(`ysize')
}
}
if `xsize' != -1 {
if ("`.view.type.stylename'" != "sunflower" & ///
!`.is_scatter') | "`force'" != "" {
.xsz.setstyle, style(`xsize')
}
}
end
program set_yxsize_dotsize
if `.is_scatter' {
.xsz.setstyle, style(`.style.marker.size.gmval')
.ysz.setstyle, style(`.style.marker.size.gmval')
}
end
program define is_scatter
local viewtype `.view.type.stylename'
class exit = (index("`viewtype'", "scatter") > 0)
end
//-----------------------------------------------------------------------------
// Since we are a subview and not a full view, we must provide our own extent
// program.
program define extent
args ord
class exit = cond("`ord'"=="x" , 0`.xsz.gmval' , 0`.ysz.gmval')
end
program define xsize
class exit = `.xsz.gmval'
end
program define ysize
class exit = `.ysz.gmval'
end
// ---------------------------------------------------------------------------
// Use compass_draw to allow alignment of the sized legend in an area that
// is possibly larger than the size of the legend.
program draw
syntax [, * ]
.compass_draw , align(pos) drawpgm(realdraw) `options'
end
//-----------------------------------------------------------------------------
program realdraw
syntax [ , XSize(real -1) YSize(real -1) ]
if 0`.force_fixed' & `xsize' > `.xsz.gmval' {
local xsize = `.xsz.gmval'
}
capture .draw_`.view.type.stylename' `xsize' `ysize'
if _rc {
di in green "note, no key available for plot type " ///
"`.view.type.stylename'"
}
gdi update
end
//----------------------------------------------------------------------------
program draw_scatter
args xsize ysize
.draw_symbol `._sym_x `xsize'' `._sym_y `ysize''
end
//----------------------------------------------------------------------------
program draw_line
args xsize ysize substyle // substyle optional
local style = cond("`.Local.style.isa'"=="" , "view.style", "style")
if "`.`style'.connect.stylename'" == "none" {
exit
}
if "`substyle'" == "" {
local style `style'.line
}
else {
local style `style'.`substyle'
}
.`style'.setgdifull
gdi line 0 `._sym_y `ysize'' 0`xsize' `._sym_y `ysize''
end
//----------------------------------------------------------------------------
program draw_connected
args xsize ysize substyle // substyle optional
.draw_line `xsize' `ysize' `substyle'
.draw_symbol `=`xsize'/2' `._sym_y `ysize''
end
//----------------------------------------------------------------------------
program draw_symbol
args x y
local style = cond("`.Local.style.isa'"=="" , "view.style", "style")
if "`.`style'.marker.backsymbol.setting'" != "none" {
.`style'.marker.setgdifull, backing
gdi point `x' `y'
}
if "`.`style'.marker.symbol.setting'" != "none" {
.`style'.marker.setgdifull
gdi point `x' `y'
}
end
//----------------------------------------------------------------------------
program draw_spike
args xsize ysize
.draw_line `xsize' `ysize' "area.linestyle"
end
//----------------------------------------------------------------------------
program draw_dropline
args xsize ysize
.draw_line `xsize' `ysize' "area.linestyle"
.draw_symbol `=`xsize'' `._sym_y `ysize''
end
//----------------------------------------------------------------------------
program draw_bar
args xsize ysize
local style = cond("`.Local.style.isa'"=="" , "view.style", "style")
.`style'.area.setgdifull
local pat `.`style'.area.linestyle.pattern.stylename'
local has_pat = ! ("`pat'" == "solid" | "`pat'" == "blank")
if 0`has_pat' {
._draw_pat_rect 0 0 `xsize' `ysize' `style'.area
}
else {
gdi rectangle 0 0 `xsize' `ysize'
}
end
program _draw_pat_rect
args x0 y0 x1 y1 areastyle
.`areastyle'.setlineasareafull
gdi rectangle `x0' `y0' `x1' `y1'
.`areastyle'.setlinestylefull
_gr_drawrect `x0' `y0' `x1' `y1'
end
//----------------------------------------------------------------------------
program draw_pie
args xsize ysize
local style = cond("`.Local.style.isa'"=="" , "view.style", "style")
.`style'.setgdifull
if ("`.`style'.pie_linestyle.color.stylename'" == "none") ///
.`style'.shadestyle.setgdipenfull , linewidth(.000001) nointensity
else .`style'.pie_linestyle.setgdifull
gdi rectangle 0 0 `xsize' `ysize'
end
//----------------------------------------------------------------------------
program draw_dot
args xsize ysize
.draw_symbol `=`xsize'/2' `._sym_y `ysize''
end
//----------------------------------------------------------------------------
program draw_area
.draw_bar `0'
end
//----------------------------------------------------------------------------
program define _sym_x
args xsize
local style = cond("`.Local.style.isa'"=="" , "view.style", "style")
class exit = cond(`.pos.iseast' , ///
`xsize' - `.`style'.marker.size.gmval' / 2 , ///
cond(`.pos.iswest' , ///
`.`style'.marker.size.gmval' / 2 , ///
`xsize' / 2))
end
program define _sym_y
args ysize
local style = cond("`.Local.style.isa'"=="" , "view.style", "style")
class exit= cond(`.pos.issouth' , ///
`.`style'.marker.size.gmval' / 2 , ///
cond(`.pos.isnorth' , ///
`ysize' - `.`style'.marker.size.gmval' / 2 , ///
`ysize' / 2))
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -