walkmgr 에 Link Label 을 추가 하였습니다. 쉽게 말해서 URL 링크를 포함하는 텍스트 라벨을 사용할 수 있도록 추가 하였습니다.
walkmgr 에 link_label.go 파일이 추가 되었구요.
/**
* LinkLabel
**/
func (wm *WalkUI) LinkLabel(text string, at ...AlignType) *walk.LinkLabel {
ne, _ := walk.NewLinkLabel(wm.Parent())
ne.SetText(text)
if len(at) == 0 {
ne.SetAlignment(walk.AlignHVDefault)
} else {
switch at[0] {
case ALIGN_LEFT:
ne.SetAlignment(walk.AlignHNearVCenter)
case ALIGN_CENTER:
ne.SetAlignment(walk.AlignHCenterVCenter)
case ALIGN_RIGHT:
ne.SetAlignment(walk.AlignHFarVCenter)
default:
ne.SetAlignment(walk.AlignHVDefault)
}
}
wm.Append(ne)
ne.LinkActivated().Attach(func(link *walk.LinkLabelLink) {
exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", link.URL()).Start()
})
return ne
}
링크 라벨은 기본적으로 lxn/walk 에서 제공하던 기능을 walkmgr 체계에 낑가 넣고 텍스트 정렬과 관련된 부분만 기존의 다른 walkmgr 메소드들과 통일해두고 링크 클릭시에 웹 브라우져를 호출해주는 이벤트 핸들링 코드를 추가한 정도 입니다.
walkmgr_example 패키지에 linklabel_test.go 파일을 참고하시면 되겠구요..
간단한 설명을 시작해 봅니다.
GUI 프로그래밍을 하다보면 URL 링크를 걸고 싶을때가 있습니다. 물론 버튼을 추가해놓고 클릭하면 홈페이지를 호출하는 등의 형태로 사용해도 되겠습니다만.
때론 텍스트 내용중 특정 문자에 URL 링크를 걸고 싶을때도 있는 법이지요..그런때 사용하시면 되겠습니다.
func TestLinkLabel(t *testing.T) {
wm := walkmgr.NewWin("Link Label", 640, 480)
wm.LinkLabel(`<a href="https://modu-print.tistory.com">피로곰's 모두의 프린터</a>`, walkmgr.ALIGN_LEFT)
wm.LinkLabel(`<a href="https://modu-print.tistory.com/category/%EB%AA%A8%EB%91%90%EC%9D%98%20PDF">피로곰's 모두의 PDF</a>`, walkmgr.ALIGN_LEFT)
wm.Start()
}

제 블로그와 모두의 PDF 카테고리 2가지 Link Label을 추가해 봤습니다.
LinkLabel 메소드에 HTML 의 A 태그를 포함한 문자열을 첫번째 인자에 전달하시면 되겠습니다. 두번째 인자는 텍스트의 정렬에 관한 옵션입니다.
주의 하실점은 HTML A 태그를 작성할때 href 에 “를 사용해야 하기 때문에 LinkLabel 의 첫번째 인자에 직접 문자열을 전달하시는 경우에는 “,” 이 아닌 `,`를 사용하셔야 합니다.
HTML 태그를 사용하는 부분에서 눈치를 채셨을수 있지만 .. 라벨 텍스트중 특정 문자들에만 링크를 걸 수 있습니다.
func TestLinkLabel2(t *testing.T) {
wm := walkmgr.NewWin("Link Label", 640, 480)
wm.LinkLabel(`모두의 프린터를 다운로드 받으시려면 <a href="https://modu-print.tistory.com">여기</a>를 클릭하십시요.`)
wm.LinkLabel(`피로곰이 만든 PDF편집기 '모두의 PDF'를 다운로드 받으시려면 <a href="https://modu-print.tistory.com/category/%EB%AA%A8%EB%91%90%EC%9D%98%20PDF">여기</a>를 클릭하십시요.`)
wm.LinkLabel(`모두의 프린터를 다운로드 받으시려면 <a href="https://modu-print.tistory.com">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_LEFT)
wm.LinkLabel(`피로곰이 만든 PDF편집기 '모두의 PDF'를 다운로드 받으시려면 <a href="https://modu-print.tistory.com/category/%EB%AA%A8%EB%91%90%EC%9D%98%20PDF">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_LEFT)
wm.LinkLabel(`모두의 프린터를 다운로드 받으시려면 <a href="https://modu-print.tistory.com">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_RIGHT)
wm.LinkLabel(`피로곰이 만든 PDF편집기 '모두의 PDF'를 다운로드 받으시려면 <a href="https://modu-print.tistory.com/category/%EB%AA%A8%EB%91%90%EC%9D%98%20PDF">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_RIGHT)
wm.Start()
}

위와 같이 LinkLabel 의 첫번째 인자에 전달된 문자열중 A 태그로 감싼 문자열에만 링크가 걸리고 해당 문자를 클릭 하면 href 에 지정된 URL을 웹브라우져로 오픈합니다.
첫번째 예제 함수와 달리 TestLnkeLabel2 에서는 LinkLabel 메소드에 walkmgr.ALIGN_LEFT, RIGHT 등의 텍스트 정렬 값을 지정 가능하도록 하였습니다. 두번째 인자는 가변인자로 구성한터라 기본값인 가운데 정렬로 사용하시는 경우에는 첫번째 인자만 입력하셔도 되겠습니다.
텍스트 정렬은 수직방향은 중앙으로 고정이라 위 스샷 같이 전체적으로 공간이 뜨게 되는데요 .. VSpacer 등을 적정히 섞어 쓰시면..
func TestLinkLabel3(t *testing.T) {
wm := walkmgr.NewWin("Link Label", 640, 480)
wm.LinkLabel(`모두의 프린터를 다운로드 받으시려면 <a href="https://modu-print.tistory.com">여기</a>를 클릭하십시요.`)
wm.LinkLabel(`피로곰이 만든 PDF편집기 '모두의 PDF'를 다운로드 받으시려면 <a href="https://modu-print.tistory.com/category/%EB%AA%A8%EB%91%90%EC%9D%98%20PDF">여기</a>를 클릭하십시요.`)
wm.LinkLabel(`모두의 프린터를 다운로드 받으시려면 <a href="https://modu-print.tistory.com">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_LEFT)
wm.LinkLabel(`피로곰이 만든 PDF편집기 '모두의 PDF'를 다운로드 받으시려면 <a href="https://modu-print.tistory.com/category/%EB%AA%A8%EB%91%90%EC%9D%98%20PDF">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_LEFT)
wm.LinkLabel(`모두의 프린터를 다운로드 받으시려면 <a href="https://modu-print.tistory.com">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_RIGHT)
wm.LinkLabel(`피로곰이 만든 PDF편집기 '모두의 PDF'를 다운로드 받으시려면 <a href="https://modu-print.tistory.com/category/%EB%AA%A8%EB%91%90%EC%9D%98%20PDF">여기</a>를 클릭하십시요.`, walkmgr.ALIGN_RIGHT)
wm.VSpacer()
wm.Start()
}

위나 아래쪽으로 바싹(?) 붙이실 수도 있습니다.
About 라던가 라이선스 관련 화면등의 구성에 요긴하게 사용할 수 있을것 같습니다.
이상입니다.