Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi-broadcasting #1300

Merged
merged 187 commits into from
Nov 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
187 commits
Select commit Hold shift + click to select a range
b75dc85
preferences: add WIP class for broadcasting profiles
Jun 2, 2017
eb7a29d
xml profile schema: refactor tag names to SnakeCase
Jun 2, 2017
abc8b81
Fix errors in BroadcastProfile and make sure it builds
Jun 2, 2017
6449956
(WIP) BroadcastSettings and BroadcastProfile refactor
Jun 9, 2017
afff79f
BroadcastSettings: fix behaviour of filename gen. method
Jun 9, 2017
744cb93
BroadcastProfile: fix XML load/save code
Jun 9, 2017
c1296be
BroadcastSettings: enhance default profile creation
Jun 9, 2017
52f8d7e
BroadcastSettings: add qDebug statements
Jun 9, 2017
84dd954
BroadcastProfile: remove extra qualifications in header file
Jun 9, 2017
607bab5
Merge branch 'master' of https://github.com/mixxxdj/mixxx into broadc…
Jun 9, 2017
b2d089d
BroadcastProfile: fix XML file load code
Jun 9, 2017
29e2205
BroadcastSettings: make sure only one instance exists
Jun 15, 2017
0ee0095
Code style fix in EncoderBroadcastSettings
Jun 15, 2017
6196f40
SettingsManager: remove shared pointer type
Jun 15, 2017
48fd2f2
Add auto migration from legacy broadcasting settings
Jun 15, 2017
9114789
Broadcasting settings: don't remove previous settings when migrating
Jun 16, 2017
cb2ed7b
Move BroadcastProfile::loadLegacySettings to BroadcastSettings
Jun 16, 2017
679b61d
Unindent anonymous namespace of BroadcastProfile class
Jun 16, 2017
0c8392c
BroadcastProfile: remove non-existent method declaration
Jun 16, 2017
39cc28a
Add unit tests for BroadcastProfile class
Jun 16, 2017
ab14026
Fix and rename method BroadcastProfile::checkNameCompliance
Jun 16, 2017
c6e0af9
BroadcastProfile: fix DefaultValues unit test
Jun 16, 2017
38c9b1d
BroadcastProfile: fix typo in forbidden characters regex
Jun 16, 2017
1f2452d
BroadcastProfile: fix forbidden chars regex syntax
Jun 17, 2017
e590364
Several minor fixes in BroadcastProfile class
Jun 20, 2017
0b85dea
Use a QSharedPointer smart pointer for instances of BroadcastProfile
Jun 20, 2017
5057479
Several changes in BroadcastSettings class
Jun 20, 2017
6d4e369
Minor fixes in DlgPrefBroadcast
Jun 20, 2017
7ddba28
BroadcastProfile: replace use of QSharedPointer with std::unique_ptr
Jun 20, 2017
799dc4e
BroadcastSettings: hashmap for fast lookup of profiles by name
Jun 20, 2017
337b260
BroadcastProfile: loadFromFile returns a smart pointer
Jun 20, 2017
0676416
Remove uses of C++14 std::make_unique
Jun 21, 2017
b9806f6
Revert removal of std::make_unique and use it properly
Jun 21, 2017
7d4fdd6
Use QSharedPointers instead of std::unique_ptr and add missing connec…
Jun 21, 2017
4c55ae6
Refactor BroadcastProfile ForbiddenChars unit test
Jun 21, 2017
43468cd
BroadcastProfile tests: remove deprecated asserts
Jun 22, 2017
50e542b
BroadcastProfile: add clarifying comment
Jun 22, 2017
f4d10b7
BroadcastSettings: implement model and remove get/setCurrentProfile
Jun 23, 2017
113108d
BroadcastProfile unit testing: use regular tests
Jun 23, 2017
57e9047
BroadcastProfile tests: remove useless fixture
Jun 23, 2017
266007f
Merge branch 'master' of https://github.com/mixxxdj/mixxx
Palakis Jun 24, 2017
c7382d8
(WIP) Preliminary work on ShoutOutput and EngineBroadcast refactor
Palakis Jul 4, 2017
6917d7e
ShoutOutput: Fix header closing comment
Palakis Jul 5, 2017
8c03902
Various fixes
Palakis Jul 6, 2017
6e5fa01
Tidying up from the refactor
Palakis Jul 7, 2017
b9cb248
BroadcastProfile: add valuesCopy() and equals() method
Palakis Jul 7, 2017
be407b0
EngineBroadcast sync with BroadcastSettings
Palakis Jul 7, 2017
f1bf7f1
ShoutOutput: start/stop connection on settings apply
Palakis Jul 9, 2017
d595cf2
DlgPrefBroadcast: new UI setup
Palakis Jul 11, 2017
873e738
DlgPrefBroadcast: disable unsaved changes dialog
Palakis Jul 12, 2017
1b7bfdd
DlgPrefBroadcast: profile list WIP
Palakis Jul 12, 2017
a75bb17
DlgPrefBroadcast: push values to profile on list selection or apply
Palakis Jul 16, 2017
11fb342
DlgPrefBroadcast: basic enable/disable + rename
Palakis Jul 17, 2017
9c17eb3
Fixes in BroadcastSettings and DlgPrefBroadcast
Palakis Jul 17, 2017
aa2f52b
DlgPrefBroadcast: implement profile removal
Palakis Jul 17, 2017
fa050bc
BroadcastSettings: fix file removal
Palakis Jul 17, 2017
01ee9e3
DlgPrefBroadcast: automatic profile naming on create
Palakis Jul 18, 2017
18d8004
DlgPrefBroadcast: fix profile list presentation
Palakis Jul 18, 2017
ef28060
Profile creation: check if profile with desired name already exists
Palakis Jul 18, 2017
63a886b
Various changes in DlgPrefBroadcast
Palakis Jul 18, 2017
c31354b
DlgPrefBroadcast: grey out "create connection" button during streaming
Palakis Jul 18, 2017
e8441d1
DlgPrefBroadcast: fix table column width
Palakis Jul 19, 2017
02a51b9
Bugfix: avoid empty values when renaming a profile/connection in prefs
Palakis Jul 19, 2017
d402382
Bugfix: show current name when renaming a broadcasting profile
Palakis Jul 19, 2017
d6654d0
DlgPrefBroadcast: WIP on connection Removal Mode
Palakis Jul 19, 2017
984a8fb
BroadcastSettings: migrated profile enabled by default
Palakis Jul 22, 2017
2aad697
DlgPrefBroadcast: remove "values changed"-related code
Palakis Jul 22, 2017
f064217
EngineBroadcast + ShoutOutput cleanup
Palakis Jul 22, 2017
5403930
EngineBroadcast: init connection list on construct
Palakis Jul 22, 2017
eba67a8
BroadcastProfile: add valuesEquals
Palakis Jul 22, 2017
e30ae9d
EngineBroadcast + ShoutOutput: connect only when broadcasting is on
Palakis Jul 22, 2017
f3f8267
EngineBroadcast: fix duplicate connect call + some cleaning
Palakis Jul 22, 2017
3bbb715
EngineBroadcast: fix stalled thread
Palakis Jul 22, 2017
b8de265
Bring back [Shoutcast],status
Palakis Jul 23, 2017
8afe852
Fix debug statements in ShoutOutput
Palakis Jul 23, 2017
97736f5
EngineBroadcast + ShoutOutput refactor
Palakis Jul 23, 2017
62af486
Bugfix: connections not started when enabling broadcasting
Palakis Jul 23, 2017
c691dde
BroadcastProfile: remove profile name from XML document
Palakis Jul 24, 2017
875b268
Cleanup tab identation
Palakis Jul 24, 2017
469ac5d
Remove unwanted comments
Palakis Jul 24, 2017
883f38d
DlgPrefBroadcast: fix orphan values editor after profile removal
Palakis Jul 24, 2017
3157038
ShoutOutput: fix hardcoded channel count
Palakis Jul 24, 2017
ac3d44b
Changes in ShoutOutput
Palakis Jul 24, 2017
9fb40ff
ShoutOutput: avoid semaphore infinite lock
Palakis Jul 24, 2017
c7090d6
ShoutOutput: detect if broadcasting is disabled
Palakis Jul 24, 2017
fbe7b25
BroadcastProfile: implement optional secure password storage
Palakis Jul 26, 2017
3ea2824
Minor changes in BroadcastProfile
Palakis Jul 26, 2017
a7a2a81
Fix typo
Palakis Jul 26, 2017
579b7fe
Streaming output "slow start"
Palakis Jul 27, 2017
b0eaefc
More detailed comments in EngineBroadcast::process
Palakis Jul 27, 2017
bba4a7f
EngineBroadcast: handle "output stalled" case
Palakis Jul 27, 2017
3466215
Secure password in XML profiles: store accounts instead of K/V pairs
Palakis Jul 31, 2017
96cd4e2
Add Ubuntu dependency for Travis builds
Palakis Jul 31, 2017
0902e5e
Remove tabs identitation
Palakis Jul 31, 2017
10c4831
Add QtKeychain to Travis OS X builds
Palakis Aug 1, 2017
cdad690
Add compile flag to enable secure password storage
Palakis Aug 1, 2017
be375c7
Add optional secure credentials in Live Broadcasting profiles
Palakis Aug 1, 2017
dfe6c40
Set qtkeychain option's default value to 0
Palakis Aug 1, 2017
9557e7d
Refactor ShoutOutput to ShoutConnection
Palakis Aug 4, 2017
accdb0c
Refactor EngineBroadcast as a simple pointer
Palakis Aug 4, 2017
b89def4
Don't pass EngineNetworkStream to EngineBroadcast
Palakis Aug 4, 2017
8882d93
EngineBroadcast back to QSharedPointer
Palakis Aug 4, 2017
f4771f9
EngineNetworkStream as a unique pointer
Palakis Aug 4, 2017
ce8afe4
Fix mistake
Palakis Aug 4, 2017
84b16aa
WIP on LB connection status UI
Palakis Aug 4, 2017
f4a85d7
Connection status moved to broadcast profile
Palakis Aug 4, 2017
8401b30
Provide connection status in Live Broadcasting preferences UI
Palakis Aug 4, 2017
c8e18cb
Fix dataChanged notification triggered on connection status changes
Palakis Aug 4, 2017
449f902
Merge branch 'gsoc2017' into xmlprofile-securepassword
Palakis Aug 4, 2017
2b455ec
Add optional secure password storage in XML profiles
Palakis Aug 4, 2017
6aff8a7
Fix include protection
Palakis Aug 4, 2017
032dcf7
Minor changes
Palakis Aug 4, 2017
9023e38
CI: try to fix qtkeychain OS X install
Palakis Aug 4, 2017
a421db8
Fix windows builds
Palakis Aug 4, 2017
1901785
Revert "CI: try to fix qtkeychain OS X install"
Palakis Aug 4, 2017
a4b9102
CI: use ownCloud's Homebrew repo in OS X automated builds
Palakis Aug 4, 2017
6894dbd
CI: fix typo
Palakis Aug 4, 2017
f4c6846
BroadcastProfile: update unit tests
Palakis Aug 4, 2017
fdf3078
CI: disable qtkeychain dependency in Travis OS X
Palakis Aug 4, 2017
5631250
Live Broadcasting: simpler connection removal
Palakis Aug 4, 2017
89b0251
Refactor in DlgPrefBroadcast and BroadcastSettings
Palakis Aug 4, 2017
dbb5f31
Proper scons organization for the Live Broadcasting compile flag
Palakis Aug 4, 2017
eb613ab
ShoutConnection log msg fix + revert to shared pointer for netstream
Palakis Aug 7, 2017
fa5a846
EngineBroadcast: rename channels count variable
Palakis Aug 7, 2017
a79a858
DlgPrefBroadcast: remove useless reset to defaults for profiles
Palakis Aug 7, 2017
6fdd91b
DlgPrefBroadcast: "rename" button + minor design changes
Palakis Aug 7, 2017
bd00b55
Bugfix: profile not saved under new name when renaming
Palakis Aug 7, 2017
a8ab60a
BroadcastSettings: remove useless const refs to QSharedPointers
Palakis Aug 7, 2017
b78f9b8
DlgPrefBroadcast: clone values from selected connection when creating
Palakis Aug 7, 2017
43e95ea
BroadcastProfile: add method adoptValues and use it in valuesCopy
Palakis Aug 7, 2017
0d632ec
(WIP) Qt model separate from BroadcastSettings
Palakis Aug 7, 2017
da0468f
Small fix
Palakis Aug 7, 2017
194c0f2
Fix possible crash when creating a connection
Palakis Aug 8, 2017
5a87fda
Move model reset method to model class
Palakis Aug 8, 2017
6763376
DlgPrefBroadcast: fix non-working programmatic row selection code
Palakis Aug 8, 2017
1939347
(WIP) Audio streaming engine refactor
Palakis Aug 8, 2017
4c3214a
Colorful connection state
Palakis Aug 10, 2017
51e5095
Bugfix: erroneous connection state reset on settings apply
Palakis Aug 10, 2017
1c96385
DlgPrefBroadcast: fix connection list column sizes
Palakis Aug 10, 2017
5f84f1e
ShoutConnection: error and info dialog show the connection name
Palakis Aug 10, 2017
0f5c8f6
DlgPrefBroadcast: proper terminology
Palakis Aug 10, 2017
61113f8
DlgPrefBroadcast: radio button group for password storage setting
Palakis Aug 10, 2017
f8b0fdd
Secure password storage: add error dialog
Palakis Aug 10, 2017
7bab140
Change error/info dialog titles
Palakis Aug 10, 2017
84af3ae
DlgPrefBroadcast: disable rename button while broadcasting is active
Palakis Aug 11, 2017
c39eecf
Replace uses of qDebug with Logger class
Palakis Aug 11, 2017
e203710
NetworkStreamWorker becomes NetworkOutputStreamWorker
Palakis Aug 11, 2017
170b439
Fix Travis OS X builds
Palakis Aug 11, 2017
988c6dc
BroadcastSettings: fix default profile name
Palakis Aug 11, 2017
2f52925
EngineNetworkStream: add input worker
Palakis Aug 11, 2017
0d7e087
Bugfix: values ignored when editing values right after opening settings
Palakis Aug 11, 2017
9324899
DlgPrefBroadcast: fix highlight color in connection list
Palakis Aug 11, 2017
4c262e9
BroadcastProfile: add error message on failed secure password retrieval
Palakis Aug 12, 2017
cac95d8
Bugfix: possible crash after applying changes in Live Broadcasting prefs
Palakis Aug 14, 2017
7ff7bd6
BroadcastManager: proper Live Broadcasting status report
Palakis Aug 14, 2017
0ab23ed
DlgPrefBroadcast: prevent connection rename to existing name
Palakis Aug 14, 2017
3cba5bf
DlgPrefBroadcast: fix row highlight
Palakis Aug 14, 2017
9e499cf
Settings model: properly relay "enabled" connection status
Palakis Aug 14, 2017
b99d4a5
Encoder API: update comment
Palakis Aug 15, 2017
68b18b5
Fix issues with connection status and enabled status
Palakis Aug 22, 2017
bbc7c0b
Style fix
Palakis Aug 22, 2017
0c9e770
Make the error messages a bit more "welcoming"
Palakis Aug 23, 2017
1a18f75
Update comment in SoundDeviceNetwork
Palakis Aug 23, 2017
832f144
Add warning state in status control object + update shade
Palakis Aug 23, 2017
46dd14b
Update Tango with support for warning state
Palakis Aug 23, 2017
b0aefaa
Merge branch 'master' into multi-broadcasting
Palakis Aug 23, 2017
d984089
Broadcasting status: show failure status if all enabled conns fail
Palakis Aug 26, 2017
e9f042a
DlgPrefBroadcast: refactor broadcasting state changes to UI
Palakis Aug 26, 2017
a0e7c44
DlgPrefBroadcast: error if no connections enabled with turning LB on
Palakis Aug 26, 2017
f0887c5
Show failed status if Live Broadcasting is on with no enabled connection
Palakis Aug 26, 2017
b22fdc4
Fix handling of connection selection
Palakis Sep 1, 2017
7dd84f5
"Connect on apply" live broadcasting option
Palakis Sep 1, 2017
04d017c
Broadcast manager: fix LB menu entry toggle
Palakis Sep 4, 2017
5d91aee
Live Broadcasting prefs: mountpoint check + fix bug
Palakis Sep 14, 2017
abfa300
Fix status updates of main menu "Enable Live Broadcasting" action
Palakis Sep 14, 2017
c5ef2d1
Merge branch 'master' into multi-broadcasting
Palakis Sep 24, 2017
cfa5940
Bring back the "Enable Live Broadcasting" pref checkbox
Palakis Sep 25, 2017
6fdde51
LB status handling : turn off if all connections are manually disconn…
Palakis Oct 21, 2017
e2b32fc
Bring back LB "Turn LB On when applying"
Palakis Oct 21, 2017
7c72278
Merge branch 'master' into multi-broadcasting
Palakis Nov 18, 2017
ad83005
Merge remote-tracking branch 'upstream/master' into multi-broadcasting
Palakis Nov 18, 2017
4d17faa
Add "Disconnect all" button
Palakis Nov 18, 2017
f5a8de3
Tango: rename Warning image file
Palakis Nov 18, 2017
43ba5e0
Tango: fix LB button type
Palakis Nov 18, 2017
f23e55a
"Disconnect all" button new behaviour: turn broadcasting off
Palakis Nov 19, 2017
19cbee3
Merge branch 'master' into multi-broadcasting
Palakis Nov 20, 2017
993d0cb
SoundDeviceNetwork: fix errors
Palakis Nov 20, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ addons:
- protobuf-compiler
- scons
- vamp-plugin-sdk
- qtkeychain-dev
before_install:
# Virtual X, needed for analyzer waveform tests
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export DISPLAY=:99.0 ; fi
Expand Down
5 changes: 3 additions & 2 deletions SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ available_features = [features.Mad,
features.IPod,
features.FFMPEG,

# Experimental features
features.OpenGLES
# Experimental features
features.OpenGLES,
features.QtKeychain
]

build = mixxx.MixxxBuild(target, machine, build_type,
Expand Down
13 changes: 11 additions & 2 deletions build/depends.py
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,12 @@ def configure(self, build, conf):
def sources(self, build):
return ['#lib/reverb/Reverb.cc']

class QtKeychain(Dependence):
def configure(self, build, conf):
libs = ['qtkeychain']
if not conf.CheckLib(libs):
raise Exception(
"Could not find qtkeychain.")

class MixxxCore(Feature):

Expand Down Expand Up @@ -680,10 +686,12 @@ def sources(self, build):
"preferences/settingsmanager.cpp",
"preferences/replaygainsettings.cpp",
"preferences/broadcastsettings.cpp",
"preferences/broadcastsettings_legacy.cpp",
"preferences/broadcastsettingsmodel.cpp",
"preferences/broadcastprofile.cpp",
"preferences/upgrade.cpp",
"preferences/dlgpreferencepage.cpp",


"effects/effectmanifest.cpp",
"effects/effectmanifestparameter.cpp",

Expand Down Expand Up @@ -755,7 +763,8 @@ def sources(self, build):
"engine/enginevumeter.cpp",
"engine/enginesidechaincompressor.cpp",
"engine/sidechain/enginesidechain.cpp",
"engine/sidechain/networkstreamworker.cpp",
"engine/sidechain/networkoutputstreamworker.cpp",
"engine/sidechain/networkinputstreamworker.cpp",
"engine/enginexfader.cpp",
"engine/enginemicrophone.cpp",
"engine/enginedeck.cpp",
Expand Down
26 changes: 25 additions & 1 deletion build/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -853,7 +853,7 @@ def sources(self, build):
depends.Qt.uic(build)('preferences/dialog/dlgprefbroadcastdlg.ui')
return ['preferences/dialog/dlgprefbroadcast.cpp',
'broadcast/broadcastmanager.cpp',
'engine/sidechain/enginebroadcast.cpp']
'engine/sidechain/shoutconnection.cpp']


class Opus(Feature):
Expand Down Expand Up @@ -1300,3 +1300,27 @@ def sources(self, build):

def depends(self, build):
return [depends.IOKit, depends.UPower]

class QtKeychain(Feature):
def description(self):
return "Secure credentials storage support for Live Broadcasting profiles"

def enabled(self, build):
build.flags['qtkeychain'] = util.get_flags(build.env, 'qtkeychain', 0)
if int(build.flags['qtkeychain']):
return True
return False

def add_options(self, build, vars):
vars.Add('qtkeychain', 'Set to 1 to enable secure credentials storage support for Live Broadcasting profiles', 0)

def configure(self, build, conf):
if not self.enabled(build):
return
build.env.Append(CPPDEFINES='__QTKEYCHAIN__')

def sources(self, build):
return []

def depends(self, build):
return [depends.QtKeychain]
Binary file added res/skins/Shade/btn_broadcast_warning.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 6 additions & 1 deletion res/skins/Shade/mixer_panel.xml
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,7 @@

<PushButton>
<Style></Style>
<NumberStates>4</NumberStates>
<NumberStates>5</NumberStates>
<State>
<Number>0</Number>
<Pressed>btn_broadcast_unconnected.png</Pressed>
Expand All @@ -624,6 +624,11 @@
<Pressed>btn_broadcast_failure.png</Pressed>
<Unpressed>btn_broadcast_failure.png</Unpressed>
</State>
<State>
<Number>4</Number>
<Pressed>btn_broadcast_warning.png</Pressed>
<Unpressed>btn_broadcast_warning.png</Unpressed>
</State>
<Pos>113,30</Pos>
<Connection>
<ConfigKey>[Shoutcast],enabled</ConfigKey>
Expand Down
66 changes: 66 additions & 0 deletions res/skins/Tango/button_5state_display.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<!--
Description:
A button that has click or display controls.
Variables:
ObjectName : object name
TooolTipID : standard Tooltip from mixxx db
see: https://github.com/mixxxdj/mixxx/blob/master/src/skin/tooltips.cpp
Size : button size
state_X_text : label text for state X
state_X_pressed : background graphic for pressed state X
state_X_unpressed : background graphic for unpressed state X
Align : alignment of text
ConfigKey : left-click control
ConfigKeyDisp : display control
-->
<Template>
<PushButton>
<TooltipId><Variable name="TooltipId"/></TooltipId>
<ObjectName><Variable name="ObjectName"/></ObjectName>
<Size><Variable name="Size"/></Size>
<NumberStates>5</NumberStates>
<State>
<Number>0</Number>
<Text><Variable name="state_0_text"/></Text>
<Pressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_0_pressed"/></Pressed>
<Unpressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_0_unpressed"/></Unpressed>
<Alignment><Variable name="Align"/></Alignment>
</State>
<State>
<Number>1</Number>
<Text><Variable name="state_1_text"/></Text>
<Pressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_1_pressed"/></Pressed>
<Unpressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_1_unpressed"/></Unpressed>
<Alignment><Variable name="Align"/></Alignment>
</State>
<State>
<Number>2</Number>
<Text><Variable name="state_2_text"/></Text>
<Pressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_2_pressed"/></Pressed>
<Unpressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_2_unpressed"/></Unpressed>
<Alignment><Variable name="Align"/></Alignment>
</State>
<State>
<Number>3</Number>
<Text><Variable name="state_3_text"/></Text>
<Pressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_3_pressed"/></Pressed>
<Unpressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_3_unpressed"/></Unpressed>
<Alignment><Variable name="Align"/></Alignment>
</State>
<State>
<Number>4</Number>
<Text><Variable name="state_4_text"/></Text>
<Pressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_4_pressed"/></Pressed>
<Unpressed scalemode="STRETCH_ASPECT">skin:/buttons/btn_<Variable name="state_4_unpressed"/></Unpressed>
<Alignment><Variable name="Align"/></Alignment>
</State>
<Connection>
<ConfigKey><Variable name="ConfigKey"/></ConfigKey>
<ButtonState>LeftButton</ButtonState>
</Connection>
<Connection>
<ConfigKey><Variable name="ConfigKeyDisp"/></ConfigKey>
<ConnectValueFromWidget>false</ConnectValueFromWidget>
</Connection>
</PushButton>
</Template>
137 changes: 137 additions & 0 deletions res/skins/Tango/buttons/btn_broadcast_warning.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading