Thread Rating:
  • 316 Vote(s) - 3 Average
  • 1
  • 2
  • 3
  • 4
  • 5
特定のTabPane を選択できないようにするには?
11-19-2013, 07:25 PM, (This post was last modified: 12-03-2013, 06:07 PM by umemura.)
#1
特定のTabPane を選択できないようにするには?
タブが複数表示されているときに、特定のタブ(TabPane)を、「選択できないようにする」にはどうすればよいでしょうか。

TabPane.enabled?= false に指定したらいけるかな、と思ったのですが、
タブの中のグラフィックが非活性になるだけで、私の望みとは異なります。

タブコンテナの中身をいったんクリアし、必要なタブのみ追加表示し、
不要なタブは表示しないようにするしかないでしょうか。

03-13-2014, 05:21 PM, (This post was last modified: 03-13-2014, 05:22 PM by heavybugtracker.)
#2
RE: 特定のTabPane を選択できないようにするには?
ハック的なやり方だが、次のような方法がある(標準コントロールのUI構成が変更されたら、動かなくなるなどの相性問題が生じる可能性があることをご理解したうえで…)


Code:
{def tp2 =
    {TabPane
        {text font-size = 28pt, 2}
    }
}

{TabContainer
    {TabPane
        {text font-size = 28pt, 1}
    },
    tp2,
    {TabPane
        {text font-size = 28pt, 3}
    }
}

||--{def vb = {VBox}}

{after 0s do
    def tab-selector =
        tp2.label.parent.parent.parent.parent
||--    {vb.add
||--        {type-of tab-selector}
||--    }

    {tab-selector.add-event-handler
        {on e:PointerEnvelopeEvent do
            {e.consume}
        }
    }
}

||--{value vb}
03-13-2014, 08:38 PM, (This post was last modified: 03-13-2014, 08:38 PM by umemura.)
#3
RE: 特定のTabPane を選択できないようにするには?
なるほど TabPane.label の親をたどっていくと、選択用のボタンがあるので、
そのイベントをconsume する、という方法があるのですね。

ただ、いただいたコードだけだと、キーボードの矢印キーを操作されたときには、
対象のTabPaneが表示できてしまったので、
TabContainer.tab-index セッターと、TabContainer.showpane メソッドをオーバーライドする方法を考えてみました。

それでも、この方法だと、
・矢印キー操作時、無効TabPane の隣を表示したい
・無効TabPaneが表示されているときに無効化されたらどうする?
など、いろいろ考慮が必要そうですね・・・。

Code:
||表示無効化が可能なタブペイン
{define-class public DisabledTabPane {inherits TabPane}
  field disabled?:bool = false
  field private attatched?:bool = false
  {constructor public {default
                          disabled?:bool = false,
                          ...}
    set self.disabled? = disabled?
    {construct-super {splice ...}}

    ||表示時に、タブセレクトボタンの押下時に
    ||無効化されているかどうかを判断する処理を追加する
    {self.add-event-handler
        {on AttachEvent do
            {if not self.attatched? then
                set self.attatched? = true
                def tab-selector =
                    self.label.parent.parent.parent.parent asa TabSelectorButton
                {tab-selector.add-event-handler
                    {on e:Action do
                        {e.consume}
                    }
                }
            }
        }
    }

  }
}

||無効タブペインを保持できるタブコンテナ
{define-class public CustomTabContainer {inherits TabContainer}
  {constructor public {default ...}
    {construct-super {splice ...}}
  }
  {setter public open {current-pane-index index:int}:void
    def tp = self.tab-panes[index]
    {type-switch tp
    case dtp:DisabledTabPane do
        {if dtp.disabled? then
            {return}
        }
    }
    set super.current-pane-index = index
  }


  {method public open {show-pane pane:TabPane}:bool
    {type-switch pane
    case dtp:DisabledTabPane do
        {if dtp.disabled? then
            {return false}
        }
    }

    {return
        {if {super.show-pane pane} then
            {self.ensure-button-visible {non-null self.current-pane}}
            true
         else
            false
        }
    }
  }
}


{def disabled-tp =
    {DisabledTabPane
        disabled? = true,
        {text font-size = 28pt, A}
    }
}
{def tc =
    {CustomTabContainer
        disabled-tp,
        {TabPane
            enabled? = true,
            {text font-size = 28pt, B}
        },
        {TabPane
            enabled? = true,
            {text font-size = 28pt, C}
        }
    }}
{value tc}

{CheckButton
    label = "タブ表示無効",
    value = disabled-tp.disabled?,
    {on ValueChanged at chkb:CheckButton do
        set disabled-tp.disabled? = chkb.value
    }
}

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('1007')