 Viewγĥ

 ViewGoBackGoForwardμˤĤ
BBSThreadViewƤΤ̲ThreadlistView
Υ֤ǤȤ褦ˤ

- ViewǸɽƤΤʤΤɽ뤿ˡURLѤ롣
  * ǤĤURL
  * ξɽƤ(viewport˴ޤޤƤ)ƬΥ쥹URL

- ViewGoBack/GoForwardΤ
ξ硢Ǥΰưȼפ٤ľURLϿƤ
롣̥򳫤ˤ줬View֤ɽ뤫ɤ
BBSThreadViewŪΤäƤ٤ȤϸʤΤǡ쳰ؤΰ
ưURLεϿViewManagerդǤ٤

GoBackactivateˤϡޤоݤȤʤView˰ưURLͿĤ
ViewǤΰưǤФ¹Ԥ롣ViewǤΰưǤʤС
ViewManagerդǤ롣

֡Ĵ֤ΡءסּءפˤưǤϡĤ򹹿
˺ɽ٤
Controller::open(...)bool refreshʰɲä

* ͤ٤ViewεϿ̤Viewˤ˰Ѥ
ViewManager֤֤뤫ɤȽǤΤǡλ˰
ѤɤΤءסּءפˤViewɽξˤϰ
Ѥ٤󤬰ۤʤ뤳Ȥդɬס

ءסּءפ˰ʤ硢֤оݤȤʤView
backward_historyưѤ֤оݤȤʤView
get_current_view_url()backward_historypush()ɤ
forward_history϶ˤʤ롣

ءסּءפ˰ˤϾۤʤ롣

ءפη̡ViewŪ˿ViewȤɽ硢
View֤оݤȤʤViewbackward_historyƬˤ롣
ˤ롣ɽľpopˤʤ뤫⤷ʤ
ˤ衢backward_historyƿ
ɽView˰ѤʤФʤʤޤ
forward_historyⴰ˰ѤǸ˿ɽView
forward_history֤줿Viewget_current_view_url()
push()Ȥˤʤ롣

ּءפη̡ViewŪ˿ViewȤɽ硢
View֤оݤȤʤViewforward_historyƬˤ롣
ˤ롣ɽľpopˤʤ뤫⤷ʤ
ˤ衢forward_historyƿ
ɽView˰ѤʤФʤʤޤ
backward_historyⴰ˰ѤǸ˿ɽView
backward_history֤줿Viewget_current_view_url()
push()Ȥˤʤ롣

֥ǥեȤǿ֤ǳξǤ⡢ꤹ
ViewäƤ뤫⤷ʤλäƤView
ءסּءפ¹Ԥ줿顢ξˤϥڡ֤
ءסּءפǿ֤Τͽ
ȿȻפ
դޤȡViewManagerϡ֥ǥեȤǿ֤ǳ
ɤʳˤ⥿֤ȽǺȤơءסּء
ˤViewɲäɤθʤФʤʤ

ڥҥȡۡءסּءפȤGtkActionϸߤViewоݤȤ
륢ʤΤǡءסּءפˤǤ뤳Ȥϸߤ
View˵ϿƤȤǤ롣

* ءסּءפη̵뤳
ɽ٤URL˳ViewɽƤʤä硢
View֤ɽ롣

ɽ٤URL˳View΢˱Ƥ̤Υ
ɽƤ硢ⵯʤURL̵äΤȤ
ơ;ʬ˿ʤ롦롣
΢˱Ƥ륿֤ɽ˽ФȤ⤢뤬ءסּ
ءפ³ƲȤͤȡ̤˰ܤäƤޤΤϥ桼
κ򾷤ˤϤΥڡɽ
Ȥ̤κμϤΤڤؤ뺮
ƶ礭顢̵뤹ͤȤ롣
̯ġġ򤬤褦˸Τˡ̤Ȥơءסָء
ǲⵯʤȤͭ롣㤨Сءץܥ
򲡤ޤǤȽʤä˴ޤޤURLϸ
΢Υ֤ɽƤġĤȤʤä硢١ءפ򲡤
鲿ⵯʤޤޡءפinsensitiveˤʤޤȤ
Τϥ桼ˤȤäͽʤư⤷ʤʾθ
ȡä΢˱Ƥڡɽ˽Фͤءפ
̤Ȥɬܤ˸̤Τǡ𤬾ʤΤ⤷
줺ġġ
ڷۡءסּءפбURL˳ڡ΢
֤¸ߤˤϡΥ֤ɽ˽ФƽλġĤȤ
ͤȤ롣

ʾƧޤȡViewˤϼΤ褦ʡ־֡פǤ롣

(1) ̾
(2) ؼ¹Ի
(3) ؼ¹Ի

ViewManagerViewɲä롢⤷find_{board,thread}_view()
˸ߤViewξ֤ǧView֤ʤ顢Ŭڤˤ
򿷤View˰Ѥfind_{board,thread}_view()NULL
View *֤ˡߤViewؼ¹Իסָؼ¹ԻפǤ
Сselect_tabtrueǤ뤳ȤꤷView::go_forward_view()
View::go_back_view()select_tabtrueꤹˡ֤ڤ
˸ߤView̾׾֤᤹

ViewΡ־֡פϡfind_{board,thread}_view()ViewManager
׾֤᤹ȡView::go_back_view()
View::go_forward_view()η̡ؼ¹Իסּؼ¹Իפؤ
ܤ塢Viewdelete뤳ȤˤʤΤǡۤΰ֤̣
ʤȤդɬס



 ViewManagerθľ

ߤViewManagerˤϻȤȤμ򾡼˻ȤȤˤꡢad-hoc
˲Ƥ̤¿롣

Ŭݤ򶴤Ǥʱ路Ƥ



 路
BBSThreadбViewGtkScrolledWindow˵ͤޤ줿
OchushaHypertextViewǤꡢBulletinBoardбView
GtkScrolledWindow˵ͤޤ줿ThreadlistViewǤȤμȤ
ΤViewManagerstart_interactive_searchΥʥϥɥѰդ
Ƥꤹ뤳ȡ

ȥСƤNavigationToolbarURLȥ꡼Ƥ
ViewManagerƤ롣
ϡ⤷ϥΤ줫ǺǸ˥ܡɥե
äΤб褦˹ƤᡢΤ褦˥ե
ϢμViewManagerˤäˤϡ˼ΤڤäȤ
¤Ϥ뤬ΤޤޤˤƤΤ꤬롣

FocusNotifierƳˤꡢߤViewManagerϸߥեäƤ
ViewɤǤ뤫ֶƤ餦Ωˤ뤳ȤθȡƱ
ߥ󥰤ǤΤˡֶפ褦ѹǥȥ
СURLȥ꡼Ƥ٤
괺MainWindowˡפ褦ѹͽꡣ



 ViewȤΤƳ
̯̾˸ߤViewManagerоݤȤʤΤݲ
ŪView֥Ȥ롣

ŪˤϡView֥Ȥϥ֥ڡȤɽ٤GtkWidget
ȥ֥֥åޡɽ٤GtkWidgetModNotebookؤʤɤ
̤ȤŪװǤViewܡɥեgrab뵡
ǽʤɤŻˤΤǤ롣



 ViewManager鱣ä
äȤϡषΤ褦ɽ٤оݤμ˴
μդ˻Ȥޤäad-hocViewManagerǼƤ
ΥΤ٤夲APIѤ

(1) ֥ڡȤɽƤGtkWidgetбGtkComboBoxΥ
뤿ˡGtkWidgetˤBBSThreadBulletinBoardϢդ
Ƥ롣ViewϺǽ餫GtkWidget˴ϢդƤΤǡ
ΤBBSThreadͳΤΤBulletinBoardͳΤΤʤɤȤ
ξܺ٤ViewManagerϱäView˥٥ʸ󶡤
롣

(2) ֥֥åޡʬΥƥȥ˥塼Ƥ()Ѥ
Ѥڤؤɬפ뤿ᡢɽƤƤĤʤΤ
ʤΤȽꤹŪʤɤǡϤBBSThreadBulletinBoard˥
Ƥ롣֥֥åޡΥ˥塼Ƥη䤽μΥ
ƥȥ˥塼ѤGtkActionμView䤽concrete subclass
˶ᤤ˰ܤ٤
