From 31e00d2f6a59438516f152d4d7f49eb8282ad943 Mon Sep 17 00:00:00 2001 From: blackhc Date: Tue, 19 Apr 2005 17:13:13 +0000 Subject: [PATCH] -Added VScrollBar support to the menu (no gfx yet). git-svn-id: svn://svn.icculus.org/nexuiz/trunk@372 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- scmenu/creategame/weapon.menu | 551 +++++++++++----------- scmenu/options/key.menu | 326 +++++++------ scmenu/source/control/visual/scrollbar.qc | 154 +++++- scmenu/source/control/visual/visual.qh | 13 +- scmenu/source/control/window/scroll.qc | 13 +- scmenu/source/control/window/windows.qh | 1 + scmenu/source/progs.src | 1 + 7 files changed, 624 insertions(+), 435 deletions(-) diff --git a/scmenu/creategame/weapon.menu b/scmenu/creategame/weapon.menu index 66f907235..15d0b4bde 100644 --- a/scmenu/creategame/weapon.menu +++ b/scmenu/creategame/weapon.menu @@ -1,288 +1,301 @@ // Property of Alientrap/AK // // creategame/weapon.menu -Item ScrollWindow Weapon +Item Window Weapon { - size '900 585' + size '900 585' + flag [FlagEmbedded] - Item Arrangement Arrangement + Item ScrollWindow ScrollWindow { - direction [Nex_DefaultVertDirection] - alignment [AlignFirst] - flag [FlagEmbedded] + size '800 585' + flag [FlagEmbedded] - // hack to make the arrangement have a set width - Item Window FixWidth + Item Arrangement Arrangement { - size '900 0' - Derive Nex_Void Left + direction [Nex_DefaultVertDirection] + alignment [AlignFirst] + flag [FlagEmbedded] + + // hack to make the arrangement have a set width + Item Window FixWidth { - pos '0 0' - size '450 0' + size '800 0' + Derive Nex_Void Left + { + pos '0 0' + size '450 0' + } + Derive Nex_Void Right + { + pos '450 0' + size '450 0' + } } - Derive Nex_Void Right + + DeriveTemplate Nex_Composition Nex_Option_EditBox { - pos '450 0' - size '450 0' + DeriveTemplate Nex_Automation_Option_EditBox Automation + {} + DeriveTemplate TextButton Description + {} + DeriveTemplate EditBox EditBox + { + size '260 12' + action Nex_Action_TestOnChange + select Nex_Action_TestOnSelect + } } - } - DeriveTemplate Nex_Composition Nex_Option_EditBox - { - DeriveTemplate Nex_Automation_Option_EditBox Automation - {} - DeriveTemplate TextButton Description + Derive Nex_Option_EditBox LaserDamage + { + text "Laser Damage" + target "Data::Weapon::LaserDamage::Text" + } + Derive Nex_Option_EditBox LaserEdgeDamage + { + text "Laser edge damage" + target "Data::Weapon::LaserEdgeDamage::Text" + } + Derive Nex_Option_EditBox LaserForce + { + text "Laser Push Force" + target "Data::Weapon::LaserForce::Text" + } + Derive Nex_Option_EditBox LaserRadius + { + text "Laser Radius" + target "Data::Weapon::LaserRadius::Text" + } + Derive Nex_Option_EditBox LaserSpeed + { + text "Laser Speed" + target "Data::Weapon::LaserSpeed::Text" + } + Derive Nex_Option_EditBox ShotgunDamage + { + text "Shotgun Damage" + target "Data::Weapon::ShotgunDamage::Text" + } + Derive Nex_Option_EditBox ShotgunBullets + { + text "Shotgun Bullets" + target "Data::Weapon::ShotgunBullets::Text" + } + Derive Nex_Option_EditBox UziDamage + { + text "Uzi Damage" + target "Data::Weapon::UziDamage::Text" + } + Derive Nex_Option_EditBox UziSpread + { + text "Uzi Spread" + target "Data::Weapon::UziSpread::Text" + } + Derive Nex_Option_EditBox UziSpread2 + { + text "Uzi Spread2" + target "Data::Weapon::UziSpread2::Text" + } + Derive Nex_Option_EditBox UziRefire + { + text "Uzi Refire" + target "Data::Weapon::UziRefire::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherDamage + { + text "Grenade Launcher Damage" + target "Data::Weapon::GrenadeLauncherDamage::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherEdgeDamage + { + text "GL Edge Damage" + target "Data::Weapon::GrenadeLauncherEdgeDamage::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherForce + { + text "Grenade Launcher Force" + target "Data::Weapon::GrenadeLauncherForce::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherRadius + { + text "Grenade Launcher Radius" + target "Data::Weapon::GrenadeLauncherRadius::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherSpeed + { + text "Grenade Launcher Speed" + target "Data::Weapon::GrenadeLauncherSpeed::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherSpeedUp + { + text "Grenade Launcher Speedup" + target "Data::Weapon::GrenadeLauncherSpeedUp::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherSpeed2 + { + text "Grenade Launcher Speed2" + target "Data::Weapon::GrenadeLauncherSpeed2::Text" + } + Derive Nex_Option_EditBox GrenadeLauncherSpeed2Up + { + text "Grenade Launcher Speed2up" + target "Data::Weapon::GrenadeLauncherSpeed2Up::Text" + } + Derive Nex_Option_EditBox ElectroDamage + { + text "Electro Damage" + target "Data::Weapon::ElectroDamage::Text" + } + Derive Nex_Option_EditBox ElectroEdgeDamage + { + text "Electro Edgedamage" + target "Data::Weapon::ElectroEdgeDamage::Text" + } + Derive Nex_Option_EditBox ElectroForce + { + text "Electro Force" + target "Data::Weapon::ElectroForce::Text" + } + Derive Nex_Option_EditBox ElectroRadius + { + text "Electro Radius" + target "Data::Weapon::ElectroRadius::Text" + } + Derive Nex_Option_EditBox ElectroRefire + { + text "Electro Refire" + target "Data::Weapon::ElectroRefire::Text" + } + Derive Nex_Option_EditBox ElectroSpeed + { + text "Electro Speed" + target "Data::Weapon::ElectroSpeed::Text" + } + Derive Nex_Option_EditBox ElectroBallSpeed + { + text "Electroball Speed" + target "Data::Weapon::ElectroBallSpeed::Text" + } + Derive Nex_Option_EditBox ElectroBallSpeedUp + { + text "Electroball Speed up" + target "Data::Weapon::ElectroBallSpeedUp::Text" + } + Derive Nex_Option_EditBox CryLinkDamage + { + text "CryLink Damage" + target "Data::Weapon::CryLinkDamage::Text" + } + Derive Nex_Option_EditBox CryLinkEdgeDamage + { + text "CryLink Edgedamage" + target "Data::Weapon::CryLinkEdgeDamage::Text" + } + Derive Nex_Option_EditBox CryLinkForce + { + text "CryLink Force" + target "Data::Weapon::CryLinkForce::Text" + } + Derive Nex_Option_EditBox CryLinkRadius + { + text "CryLink Radius" + target "Data::Weapon::CryLinkRadius::Text" + } + Derive Nex_Option_EditBox CryLinkSpeed + { + text "CryLink Speed" + target "Data::Weapon::CryLinkSpeed::Text" + } + Derive Nex_Option_EditBox CryLinkSpread + { + text "CryLink Spread" + target "Data::Weapon::CryLinkSpread::Text" + } + Derive Nex_Option_EditBox CryLinkRefire + { + text "CryLink Refire" + target "Data::Weapon::CryLinkRefire::Text" + } + Derive Nex_Option_EditBox NexDamage + { + text "Nex Damage" + target "Data::Weapon::NexDamage::Text" + } + Derive Nex_Option_EditBox HagarDamage + { + text "Hagar Damage" + target "Data::Weapon::HagarDamage::Text" + } + Derive Nex_Option_EditBox HagarEdgeDamage + { + text "Hagar Edge Damage" + target "Data::Weapon::HagarEdgeDamage::Text" + } + Derive Nex_Option_EditBox HagarForce + { + text "Hagar Force" + target "Data::Weapon::HagarForce::Text" + } + Derive Nex_Option_EditBox HagarRadius + { + text "Hagar Radius" + target "Data::Weapon::HagarRadius::Text" + } + Derive Nex_Option_EditBox HagarSpeed + { + text "Hagar Speed" + target "Data::Weapon::HagarSpeed::Text" + } + Derive Nex_Option_EditBox HagarSpeed2 + { + text "Hagar Speed2" + target "Data::Weapon::HagarSpeed2::Text" + } + Derive Nex_Option_EditBox HagarSpeed2Up + { + text "Hagar Speed2 up" + target "Data::Weapon::HagarSpeed2Up::Text" + } + Derive Nex_Option_EditBox RocketLauncherDamage + { + text "Rocket Launcher Damage" + target "Data::Weapon::RocketLauncherDamage::Text" + } + Derive Nex_Option_EditBox RocketLauncherEdgeDamage + { + text "RL Edge Damage" + target "Data::Weapon::RocketLauncherEdgeDamage::Text" + } + Derive Nex_Option_EditBox RocketLauncherForce + { + text "Rocket Launcher Force" + target "Data::Weapon::RocketLauncherForce::Text" + } + Derive Nex_Option_EditBox RocketLauncherRadius + { + text "Rocket Launcher Radius" + target "Data::Weapon::RocketLauncherRadius::Text" + } + Derive Nex_Option_EditBox RocketLauncherSpeed + { + text "Rocket Launcher Speed" + target "Data::Weapon::RocketLauncherSpeed::Text" + } + Derive Nex_Line Seperator {} - DeriveTemplate EditBox EditBox + Derive TextButton Reset { - size '260 12' - action Nex_Action_TestOnChange - select Nex_Action_TestOnSelect + normal "Reset to default" + init Nex_Action_ResetData + target "::Data::Weapon" } } - - Derive Nex_Option_EditBox LaserDamage - { - text "Laser Damage" - target "Data::Weapon::LaserDamage::Text" - } - Derive Nex_Option_EditBox LaserEdgeDamage - { - text "Laser edge damage" - target "Data::Weapon::LaserEdgeDamage::Text" - } - Derive Nex_Option_EditBox LaserForce - { - text "Laser Push Force" - target "Data::Weapon::LaserForce::Text" - } - Derive Nex_Option_EditBox LaserRadius - { - text "Laser Radius" - target "Data::Weapon::LaserRadius::Text" - } - Derive Nex_Option_EditBox LaserSpeed - { - text "Laser Speed" - target "Data::Weapon::LaserSpeed::Text" - } - Derive Nex_Option_EditBox ShotgunDamage - { - text "Shotgun Damage" - target "Data::Weapon::ShotgunDamage::Text" - } - Derive Nex_Option_EditBox ShotgunBullets - { - text "Shotgun Bullets" - target "Data::Weapon::ShotgunBullets::Text" - } - Derive Nex_Option_EditBox UziDamage - { - text "Uzi Damage" - target "Data::Weapon::UziDamage::Text" - } - Derive Nex_Option_EditBox UziSpread - { - text "Uzi Spread" - target "Data::Weapon::UziSpread::Text" - } - Derive Nex_Option_EditBox UziSpread2 - { - text "Uzi Spread2" - target "Data::Weapon::UziSpread2::Text" - } - Derive Nex_Option_EditBox UziRefire - { - text "Uzi Refire" - target "Data::Weapon::UziRefire::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherDamage - { - text "Grenade Launcher Damage" - target "Data::Weapon::GrenadeLauncherDamage::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherEdgeDamage - { - text "GL Edge Damage" - target "Data::Weapon::GrenadeLauncherEdgeDamage::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherForce - { - text "Grenade Launcher Force" - target "Data::Weapon::GrenadeLauncherForce::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherRadius - { - text "Grenade Launcher Radius" - target "Data::Weapon::GrenadeLauncherRadius::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherSpeed - { - text "Grenade Launcher Speed" - target "Data::Weapon::GrenadeLauncherSpeed::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherSpeedUp - { - text "Grenade Launcher Speedup" - target "Data::Weapon::GrenadeLauncherSpeedUp::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherSpeed2 - { - text "Grenade Launcher Speed2" - target "Data::Weapon::GrenadeLauncherSpeed2::Text" - } - Derive Nex_Option_EditBox GrenadeLauncherSpeed2Up - { - text "Grenade Launcher Speed2up" - target "Data::Weapon::GrenadeLauncherSpeed2Up::Text" - } - Derive Nex_Option_EditBox ElectroDamage - { - text "Electro Damage" - target "Data::Weapon::ElectroDamage::Text" - } - Derive Nex_Option_EditBox ElectroEdgeDamage - { - text "Electro Edgedamage" - target "Data::Weapon::ElectroEdgeDamage::Text" - } - Derive Nex_Option_EditBox ElectroForce - { - text "Electro Force" - target "Data::Weapon::ElectroForce::Text" - } - Derive Nex_Option_EditBox ElectroRadius - { - text "Electro Radius" - target "Data::Weapon::ElectroRadius::Text" - } - Derive Nex_Option_EditBox ElectroRefire - { - text "Electro Refire" - target "Data::Weapon::ElectroRefire::Text" - } - Derive Nex_Option_EditBox ElectroSpeed - { - text "Electro Speed" - target "Data::Weapon::ElectroSpeed::Text" - } - Derive Nex_Option_EditBox ElectroBallSpeed - { - text "Electroball Speed" - target "Data::Weapon::ElectroBallSpeed::Text" - } - Derive Nex_Option_EditBox ElectroBallSpeedUp - { - text "Electroball Speed up" - target "Data::Weapon::ElectroBallSpeedUp::Text" - } - Derive Nex_Option_EditBox CryLinkDamage - { - text "CryLink Damage" - target "Data::Weapon::CryLinkDamage::Text" - } - Derive Nex_Option_EditBox CryLinkEdgeDamage - { - text "CryLink Edgedamage" - target "Data::Weapon::CryLinkEdgeDamage::Text" - } - Derive Nex_Option_EditBox CryLinkForce - { - text "CryLink Force" - target "Data::Weapon::CryLinkForce::Text" - } - Derive Nex_Option_EditBox CryLinkRadius - { - text "CryLink Radius" - target "Data::Weapon::CryLinkRadius::Text" - } - Derive Nex_Option_EditBox CryLinkSpeed - { - text "CryLink Speed" - target "Data::Weapon::CryLinkSpeed::Text" - } - Derive Nex_Option_EditBox CryLinkSpread - { - text "CryLink Spread" - target "Data::Weapon::CryLinkSpread::Text" - } - Derive Nex_Option_EditBox CryLinkRefire - { - text "CryLink Refire" - target "Data::Weapon::CryLinkRefire::Text" - } - Derive Nex_Option_EditBox NexDamage - { - text "Nex Damage" - target "Data::Weapon::NexDamage::Text" - } - Derive Nex_Option_EditBox HagarDamage - { - text "Hagar Damage" - target "Data::Weapon::HagarDamage::Text" - } - Derive Nex_Option_EditBox HagarEdgeDamage - { - text "Hagar Edge Damage" - target "Data::Weapon::HagarEdgeDamage::Text" - } - Derive Nex_Option_EditBox HagarForce - { - text "Hagar Force" - target "Data::Weapon::HagarForce::Text" - } - Derive Nex_Option_EditBox HagarRadius - { - text "Hagar Radius" - target "Data::Weapon::HagarRadius::Text" - } - Derive Nex_Option_EditBox HagarSpeed - { - text "Hagar Speed" - target "Data::Weapon::HagarSpeed::Text" - } - Derive Nex_Option_EditBox HagarSpeed2 - { - text "Hagar Speed2" - target "Data::Weapon::HagarSpeed2::Text" - } - Derive Nex_Option_EditBox HagarSpeed2Up - { - text "Hagar Speed2 up" - target "Data::Weapon::HagarSpeed2Up::Text" - } - Derive Nex_Option_EditBox RocketLauncherDamage - { - text "Rocket Launcher Damage" - target "Data::Weapon::RocketLauncherDamage::Text" - } - Derive Nex_Option_EditBox RocketLauncherEdgeDamage - { - text "RL Edge Damage" - target "Data::Weapon::RocketLauncherEdgeDamage::Text" - } - Derive Nex_Option_EditBox RocketLauncherForce - { - text "Rocket Launcher Force" - target "Data::Weapon::RocketLauncherForce::Text" - } - Derive Nex_Option_EditBox RocketLauncherRadius - { - text "Rocket Launcher Radius" - target "Data::Weapon::RocketLauncherRadius::Text" - } - Derive Nex_Option_EditBox RocketLauncherSpeed - { - text "Rocket Launcher Speed" - target "Data::Weapon::RocketLauncherSpeed::Text" - } - Derive Nex_Line Seperator - {} - Derive TextButton Reset - { - normal "Reset to default" - init Nex_Action_ResetData - target "::Data::Weapon" - } + } + Item VScrollBar Scroller + { + pos '800 0' + size '20 100' + target "##prev" } } diff --git a/scmenu/options/key.menu b/scmenu/options/key.menu index 1af8155e0..aafea2e7d 100644 --- a/scmenu/options/key.menu +++ b/scmenu/options/key.menu @@ -28,7 +28,7 @@ Item Window KeyControl // table: name key1 key2 Item Layout TableDesc { - size '700 15' + size '600 15' direction '10 0' Derive Rect Action @@ -67,182 +67,196 @@ Item Window KeyControl } } } - Item ScrollWindow Scroll + Item Window Temp { - size '700 500' + size '700 500' flag [FlagEmbedded] - Item Arrangement Keys + + Item ScrollWindow Scroll { - direction [Nex_DefaultVertDirection] - flag [FlagEmbedded] + size '600 500' + flag [FlagEmbedded] - Template Layout Nex_Key_Template + Item Arrangement Keys { - size '600 12' - flag [FlagEmbedded] - direction '10 0' + direction [Nex_DefaultVertDirection] + flag [FlagEmbedded] - Template Automation_Job Job + Template Layout Nex_Key_Template { - action Nex_Automation_Key + size '600 12' + flag [FlagEmbedded] + direction '10 0' + + Template Automation_Job Job + { + action Nex_Automation_Key + } + Derive Label Action + { + size '200 12' + } + Template DataLink_AltString Link1 + { + flag [FlagHidden] + stepValue 0 + } + DeriveTemplate Nex_KeyButton Key1 + { + pos '210 0' + size '190 12' + target "##down" + action Nex_Action_KeyButton + + Item DataLink_FastResync Resync + { + link "Link1" + } + } + Template DataLink_AltString Link2 + { + flag [FlagHidden] + stepValue 1 + } + DeriveTemplate Nex_KeyButton Key2 + { + pos '410 0' + size '190 12' + target "##down" + action Nex_Action_KeyButton + + Item DataLink_FastResync Resync + { + link "Link2" + } + } } - Derive Label Action + DeriveTemplate Label Title { - size '200 12' + fontSize '13 13' + color '0.5 0.3 0.3' } - Template DataLink_AltString Link1 + Derive Title GroupMovement { - flag [FlagHidden] - stepValue 0 + text "[Movement]" } - DeriveTemplate Nex_KeyButton Key1 + Derive Nex_Key_Template Forward { - pos '210 0' - size '190 12' - target "##down" - action Nex_Action_KeyButton - - Item DataLink_FastResync Resync - { - link "Link1" - } + text "Move Forward" + target "Data::Key::Forward" } - Template DataLink_AltString Link2 + Derive Nex_Key_Template Backward { - flag [FlagHidden] - stepValue 1 + text "Move Backward" + target "Data::Key::Backward" } - DeriveTemplate Nex_KeyButton Key2 + Derive Nex_Key_Template Left { - pos '410 0' - size '190 12' - target "##down" - action Nex_Action_KeyButton - - Item DataLink_FastResync Resync - { - link "Link2" - } + text "Strafe Left" + target "Data::Key::StrafeLeft" + } + Derive Nex_Key_Template Right + { + text "Strafe Right" + target "Data::Key::StrafeRight" + } + Derive Nex_Key_Template Jump + { + text "Jump" + target "Data::Key::Jump" + } + Derive Nex_Key_Template Crouch + { + text "Crouch" + target "Data::Key::Crouch" + } + Derive Nex_Void Seperator1 + {} + Derive Title GroupFight + { + text "[Fight]" + } + Derive Nex_Key_Template Primary + { + text "Primary Attack" + target "Data::Key::FirePrimary" + } + Derive Nex_Key_Template Secondary + { + text "Secondary Attack" + target "Data::Key::FireSecondary" + } + Derive Nex_Key_Template PrevWeapon + { + text "Previous Weapon" + target "Data::Key::PrevWeapon" + } + Derive Nex_Key_Template NextWeapon + { + text "Next Weapon" + target "Data::Key::NextWeapon" + } + Derive Nex_Void Seperator2 + {} + Derive Title Weapons + { + text "[Weapon]" + } + Derive Nex_Key_Template Laser + { + text "Laser" + target "Data::Key::Weapon::Laser" + } + Derive Nex_Key_Template Uzi + { + text "Uzi" + target "Data::Key::Weapon::Uzi" + } + Derive Nex_Key_Template Shotgun + { + text "Shotgun" + target "Data::Key::Weapon::Shotgun" + } + Derive Nex_Key_Template Grenade + { + text "Uzi" + target "Data::Key::Weapon::Grenade" + } + Derive Nex_Key_Template Electro + { + text "Electro" + target "Data::Key::Weapon::Electro" + } + Derive Nex_Key_Template CryLink + { + text "CryLink" + target "Data::Key::Weapon::CryLink" + } + Derive Nex_Key_Template NexGun + { + text "NexGun" + target "Data::Key::Weapon::NexGun" + } + Derive Nex_Key_Template Hagar + { + text "Hagar" + target "Data::Key::Weapon::Hagar" + } + Derive Nex_Key_Template Rocket + { + text "Rocket" + target "Data::Key::Weapon::Rocket" } - } - DeriveTemplate Label Title - { - fontSize '13 13' - color '0.5 0.3 0.3' - } - Derive Title GroupMovement - { - text "[Movement]" - } - Derive Nex_Key_Template Forward - { - text "Move Forward" - target "Data::Key::Forward" - } - Derive Nex_Key_Template Backward - { - text "Move Backward" - target "Data::Key::Backward" - } - Derive Nex_Key_Template Left - { - text "Strafe Left" - target "Data::Key::StrafeLeft" - } - Derive Nex_Key_Template Right - { - text "Strafe Right" - target "Data::Key::StrafeRight" - } - Derive Nex_Key_Template Jump - { - text "Jump" - target "Data::Key::Jump" - } - Derive Nex_Key_Template Crouch - { - text "Crouch" - target "Data::Key::Crouch" - } - Derive Nex_Void Seperator1 - {} - Derive Title GroupFight - { - text "[Fight]" - } - Derive Nex_Key_Template Primary - { - text "Primary Attack" - target "Data::Key::FirePrimary" - } - Derive Nex_Key_Template Secondary - { - text "Secondary Attack" - target "Data::Key::FireSecondary" - } - Derive Nex_Key_Template PrevWeapon - { - text "Previous Weapon" - target "Data::Key::PrevWeapon" - } - Derive Nex_Key_Template NextWeapon - { - text "Next Weapon" - target "Data::Key::NextWeapon" - } - Derive Nex_Void Seperator2 - {} - Derive Title Weapons - { - text "[Weapon]" - } - Derive Nex_Key_Template Laser - { - text "Laser" - target "Data::Key::Weapon::Laser" - } - Derive Nex_Key_Template Uzi - { - text "Uzi" - target "Data::Key::Weapon::Uzi" - } - Derive Nex_Key_Template Shotgun - { - text "Shotgun" - target "Data::Key::Weapon::Shotgun" - } - Derive Nex_Key_Template Grenade - { - text "Uzi" - target "Data::Key::Weapon::Grenade" - } - Derive Nex_Key_Template Electro - { - text "Electro" - target "Data::Key::Weapon::Electro" - } - Derive Nex_Key_Template CryLink - { - text "CryLink" - target "Data::Key::Weapon::CryLink" - } - Derive Nex_Key_Template NexGun - { - text "NexGun" - target "Data::Key::Weapon::NexGun" - } - Derive Nex_Key_Template Hagar - { - text "Hagar" - target "Data::Key::Weapon::Hagar" - } - Derive Nex_Key_Template Rocket - { - text "Rocket" - target "Data::Key::Weapon::Rocket" } } + Item VScrollBar Scroller + { + pos '610 0' + size '20 100' + target "##prev" + } } + Item Arrangement Buttons { flag [FlagEmbedded] diff --git a/scmenu/source/control/visual/scrollbar.qc b/scmenu/source/control/visual/scrollbar.qc index 220f244bd..aa2a11e8e 100644 --- a/scmenu/source/control/visual/scrollbar.qc +++ b/scmenu/source/control/visual/scrollbar.qc @@ -1,8 +1,158 @@ // DP/Nex Menu // control/visual/scrollbar.qc -bool() Item_HScrollBar_Key +const float _VSB_UP_HEIGHT = 20; +const float _VSB_DOWN_HEIGHT = 20; +const float _VSB_PRECISION = 5; +const float _VSB_MINHEIGHT = 10; -void() Item_HScrollBar_Spawn = +const vector _VSB_CLICKAREA_COLOR = '1.0 0.0 0.0'; +const vector _VSB_SCOLLER_COLOR = '0.0 1.0 0.0'; +const vector _VSB_SCROLLAREA_COLOR = '0.0 0.0 1.0'; + +// scroller == scroll button +float() _IVSB_GetSizeOfScroller = { + local float lScrollerRange; + local float lVisibleSize; + local float lTotalSize; + local float lScrollerSize; + + lTotalSize = self._target._child.size_y; + lVisibleSize = self.size_y; + lScrollerRange = self.size_y - _VSB_DOWN_HEIGHT - _VSB_UP_HEIGHT; + + lScrollerSize = lVisibleSize * lScrollerRange / lTotalSize; + lScrollerSize = max( _VSB_MINHEIGHT, lScrollerSize ); + + return lScrollerSize; +} + +void() Item_VScrollBar_Draw = { + local vector lPosition; + local vector lSize; + + if( self._target == null_entity ) { + return; + } + + lPosition = self.pos; + lSize = self.size; + lSize_y = _VSB_UP_HEIGHT; + Menu_Fill( lPosition, lSize, _VSB_CLICKAREA_COLOR, 1.0, 0 ); + + lPosition_y = self.pos_y + _VSB_UP_HEIGHT; + lSize_y = self.size_y - _VSB_UP_HEIGHT - _VSB_DOWN_HEIGHT; + Menu_Fill( lPosition, lSize, _VSB_SCROLLAREA_COLOR, 1.0, 0 ); + + lPosition_y = self.pos_y + self.size_y - _VSB_DOWN_HEIGHT; + lSize_y = _VSB_DOWN_HEIGHT; + Menu_Fill( lPosition, lSize, _VSB_CLICKAREA_COLOR, 1.0, 0 ); + + lSize_y = _IVSB_GetSizeOfScroller(); + lPosition_y = self.pos_y + _VSB_UP_HEIGHT - self._target.origin_y * (self.size_y - _VSB_DOWN_HEIGHT - _VSB_UP_HEIGHT - lSize_y) / (self._target._child.size_y - self.size_y); + Menu_Fill( lPosition, lSize, _VSB_SCOLLER_COLOR, 1.0, 0 ); +}; + +void() _IVSB_RangeBound = { + self._target.origin_y = bound( - (self._target._child.size_y - self.size_y) , self._target.origin_y, 0 ); +}; + +void() _IVSB_ScrollUp = { + self._target.origin_y = self._target.origin_y + _VSB_PRECISION; + _IVSB_RangeBound(); +}; + +void() _IVSB_ScrollDown = { + self._target.origin_y = self._target.origin_y - _VSB_PRECISION; + _IVSB_RangeBound(); +}; + +void( float lLevel ) _IVSB_MouseSelect = { + local float lScrollerRange; + local float lVisibleSize; + local float lTotalSize; + local float lScrollerSize; + + lTotalSize = self._target._child.size_y; + lVisibleSize = self.size_y; + lScrollerRange = self.size_y - _VSB_DOWN_HEIGHT - _VSB_UP_HEIGHT; + lScrollerSize = _IVSB_GetSizeOfScroller(); + + lLevel = lLevel - _VSB_UP_HEIGHT - lScrollerSize / 2; + self._target.origin_y = - ( lLevel * (lTotalSize - lVisibleSize) / (lScrollerRange - lScrollerSize ) ); + _IVSB_RangeBound(); +}; + +bool( float pKey, float Ascii ) Item_VScrollBar_Key = { + if( self._target == null_entity ) { + return false; + } + + if( pKey == K_UPARROW ) { + _IVSB_ScrollUp(); + return true; + } else if( pKey == K_DOWNARROW ) { + _IVSB_ScrollDown(); + return true; + } else if( pKey == K_MOUSE1 ) { + local float lLevel; + + if( !Util_InRect( Menu_Cursor_Position, self.pos, self.size ) ) { + return false; + } + + lLevel = Menu_Cursor_Position_y - self.pos_y; + if( lLevel < _VSB_UP_HEIGHT ) { + _IVSB_ScrollUp(); + } else if( lLevel >= self.size_y - _VSB_DOWN_HEIGHT ) { + _IVSB_ScrollDown(); + } else { + _IVSB_MouseSelect( lLevel ); + } + return true; + } else if( pKey == K_MWHEELUP ) { + _IVSB_ScrollUp(); + return true; + } else if( pKey == K_MWHEELDOWN ) { + _IVSB_ScrollDown(); + return true; + } + return false; +}; + +void() Item_VScrollBar_Update = { + if( self.target == "" ) { + self._target = null_entity; + } else if( self.target != self._target.name ) { + self._target = Menu_GetItem( self.target ); + } + + if( self._target == null_entity ) { + return; + } + + // set size height to the height of the scrollwindow's parent + self.size_y = self._target.size_y; + + // if the scrollbar isnt needed it becomes invisible + if( self.size_y >= self._target._child.size_y ) { + self.flag = self.flag | FLAG_HIDDEN; + } else if( self.flag & FLAG_HIDDEN ) { + self.flag = self.flag - FLAG_HIDDEN; + } +}; + +void() Item_VScrollBar_Destroy = { + String_EntityFree( self, target ); +}; + +void() Item_VScrollBar_Spawn = { + String_EntityZone( self, target ); + Item_VScrollBar_Update(); + + self._update = Item_VScrollBar_Update; + self._key = Item_VScrollBar_Key; + self._draw = Item_VScrollBar_Draw; + self._destroy = Item_VScrollBar_Destroy; }; diff --git a/scmenu/source/control/visual/visual.qh b/scmenu/source/control/visual/visual.qh index db4b0a4e0..90cd754d1 100644 --- a/scmenu/source/control/visual/visual.qh +++ b/scmenu/source/control/visual/visual.qh @@ -197,15 +197,14 @@ void() Item_List_Spawn; bool( float pKey, float pAscii ) Item_FloatingArea_Key; void() Item_FloatingArea_Update; void() Item_FloatingArea_Spawn; -/* -// Item_HScrollBar + +// Item_VScrollBar // target should point to a ScrollWindow -.float minValue; -.float maxValue; -.vector current; .string target; .entity _target; -// TODO: Add pictureSlider support -void() Item_HScrollBar_Spawn;*/ +void() Item_VScrollBar_Draw; +bool( float pKey, float Ascii ) Item_VScrollBar_Key; +void() Item_VScrollBar_Update; +void() Item_VScrollBar_Spawn; diff --git a/scmenu/source/control/window/scroll.qc b/scmenu/source/control/window/scroll.qc index 8f81190d7..8316ae5a2 100644 --- a/scmenu/source/control/window/scroll.qc +++ b/scmenu/source/control/window/scroll.qc @@ -7,8 +7,19 @@ void() Item_ScrollWindow_Update = local float lOldLevel; local entity lParent; - if( !Menu_IsVisible( self ) || !_Menu_IsEmbeddedParentOf( Menu_ActiveItem, self._child ) ) + // reset _link and return if the window isnt owner of the currently selected item + if( !Menu_IsVisible( self ) || !_Menu_IsEmbeddedParentOf( Menu_ActiveItem, self._child ) ) { + self._link = null_entity; return; + } + // if the window has been selected just now, we set _link and scroll to its position + // if the selection has changed we also scroll down + // only if nothing has changed, we do nothing, too (this makes scrollbar support possible) + if( self._link == Menu_ActiveItem ) { + return; + } else { + self._link = Menu_ActiveItem; + } // find the lLevel lLevel = Menu_ActiveItem.pos_y; diff --git a/scmenu/source/control/window/windows.qh b/scmenu/source/control/window/windows.qh index de8217df7..bd0d6e1a4 100644 --- a/scmenu/source/control/window/windows.qh +++ b/scmenu/source/control/window/windows.qh @@ -46,6 +46,7 @@ void() Item_Arrangement_Spawn; // It will adapt its origin to always make the currently selected item visible // There always has to be only *one* child window, that has a valid size .vector direction; // first is space between frame and item +.entity _link; // used to determine changes of the ActiveItem void() Item_ScrollWindow_Update; void() Item_ScrollWindow_Spawn; diff --git a/scmenu/source/progs.src b/scmenu/source/progs.src index 99ab6deff..58bb669fb 100644 --- a/scmenu/source/progs.src +++ b/scmenu/source/progs.src @@ -133,6 +133,7 @@ control/visual/slider.qc control/visual/valuebutton.qc control/visual/floating.qc control/visual/switchbutton.qc +control/visual/scrollbar.qc //control/fx/vector.qc //control/fx/float.qc -- 2.39.2