summaryrefslogtreecommitdiffstats
path: root/arts/modules/common/effectrackslot_impl.cc
blob: 3210e83ecb7a26a80c859903828458952030a7f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*  This file is part of the KDE project
    Copyright (C) 2002 Matthias Kretz <kretz@kde.org>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.

*/
// $Id$

#include "artsmodulescommon.h"
#include <artsgui.h>
#include <debug.h>

namespace Arts {
class EffectRackSlot_impl : virtual public EffectRackSlot_skel
{
	private:
		HBox _hbox;
		VBox _buttonbox; // Buttons
		Button _removeButton;
		Button _masterButton;
		HBox _frame;
		Widget _effect;
		Frame _spacer;
		EffectRackItemGui _effectrackgui; //XXX: need a WeakReference here?

		EffectRackSlot self() { return EffectRackSlot::_from_base( _copy() ); }

	public:
		EffectRackSlot_impl()
		{
		}

		void constructor( Widget parent, Widget effect, EffectRackItemGui effectrackgui )
		{
			_effectrackgui = effectrackgui;

			_hbox.parent( parent );
			_hbox.margin( 0 );
			_hbox.spacing( 0 );
			_hbox.framestyle( Sunken | Panel );
			_hbox.linewidth( 1 );
			_hbox.show();

			_buttonbox.parent( _hbox );
			_buttonbox.margin( 0 );
			_buttonbox.spacing( 0 );
			_buttonbox.show();

			_removeButton.parent( _buttonbox );
			_removeButton.text( "x" );
			_removeButton.hSizePolicy( spFixed );
			_removeButton.width( 20 );
			_removeButton.height( 20 );
			connect( _removeButton, "clicked_changed", self(), "removeslot" );
			_removeButton.show();

			_masterButton.parent( _buttonbox );
			_masterButton.text( "MM" );
			_masterButton.toggle( true );
			_masterButton.hSizePolicy( spFixed );
			_masterButton.width( 20 );
			_masterButton.height( 20 );
			connect( _masterButton, "pressed_changed", self(), "tomaster" );
			_masterButton.show();

			_frame.parent( _hbox );
			_frame.margin( 5 );
			_frame.spacing( 0 );
			_frame.framestyle( Raised | Panel );
			_frame.linewidth( 2 );
			_frame.midlinewidth( 2 );
			_frame.hSizePolicy( spExpanding );
			_frame.show();

			_effect = effect;
			_effect.parent( _frame );
			_effect.show();

			_spacer.parent( _frame );
			_spacer.hSizePolicy( spExpanding );
			_spacer.show();
		}

		bool removeslot() { return false; } //unused
		void removeslot( bool clicked )
		{
			if( ! _removeButton.clicked() || ! clicked )
				return;

			// I need to be removed...
			_effectrackgui.removeSlot( self() );
			// I should be deleted by now
		}

		bool tomaster() { return false; } //unused
		void tomaster( bool toggled )
		{
			_effectrackgui.routeToMaster( self(), toggled );
		}
};
REGISTER_IMPLEMENTATION( EffectRackSlot_impl );
}

// vim: sw=4 ts=4