Thread Rating:
  • 316 Vote(s) - 3 Average
  • 1
  • 2
  • 3
  • 4
  • 5
特定のTabPane を選択できないようにするには?
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
    }
}


Messages In This Thread
RE: 特定のTabPane を選択できないようにするには? - by umemura - 03-13-2014, 08:38 PM
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')