summaryrefslogtreecommitdiff
path: root/indra/newview/llfloatereditdaycycle.h
blob: 742608712b5cb7787e183cb7a4cb7c606a71ea88 (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
117
118
119
120
121
122
123
124
125
/** 
 * @file llfloatereditdaycycle.h
 * @brief Floater to create or edit a day cycle
 *
 * $LicenseInfo:firstyear=2011&license=viewerlgpl$
 * Second Life Viewer Source Code
 * Copyright (C) 2011, Linden Research, Inc.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation;
 * version 2.1 of the License only.
 * 
 * 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
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 * $/LicenseInfo$
 */

#ifndef LL_LLFLOATEREDITDAYCYCLE_H
#define LL_LLFLOATEREDITDAYCYCLE_H

#include "llfloater.h"

#include "llwlparammanager.h" // for LLWLParamKey

class LLCheckBoxCtrl;
class LLComboBox;
class LLLineEditor;
class LLMultiSliderCtrl;
class LLTimeCtrl;

/// Menu for all of windlight's functionality.
/// Menuing system for adjusting the atmospheric settings of the world.
class LLFloaterEditDayCycle : public LLFloater
{
	LOG_CLASS(LLFloaterEditDayCycle);

public:
	LLFloaterEditDayCycle(const LLSD &key);

	/*virtual*/	BOOL	postBuild();
	/*virtual*/ void	onOpen(const LLSD& key);
	/*virtual*/ void	onClose(bool app_quitting);
	/*virtual*/ void	draw();

private:

	/// sync the time slider with day cycle structure
	void syncTimeSlider();

	// 	makes sure key slider has what's in day cycle
	void loadTrack();

	/// makes sure day cycle data structure has what's in menu
	void applyTrack();

	/// refresh the sky presets combobox
	void refreshSkyPresetsList();

	/// refresh the day cycle combobox
	void refreshDayCyclesList();

	/// add a slider to the track
	void addSliderKey(F32 time, LLWLParamKey keyframe);

	void initCallbacks();
	LLWLParamKey getSelectedDayCycle();
	void deletePreset(LLWLParamKey keyframe);
	bool isNewDay() const;
	void dumpTrack();
	void enableEditing(bool enable);
	void reset();

	void onTimeSliderMoved();	/// time slider moved
	void onKeyTimeMoved();		/// a key frame moved
	void onKeyTimeChanged();	/// a key frame's time changed
	void onKeyPresetChanged();	/// sky preset selected
	void onAddKey();			/// new key added on slider
	void onDeleteKey();			/// a key frame deleted

	void onDayCycleNameEdited();
	void onDayCycleSelected();
	void onBtnSave();
	void onBtnCancel();

	bool onSaveAnswer(const LLSD& notification, const LLSD& response);
	void onSaveConfirmed();

	static std::string getRegionName();

	/// convenience class for holding keyframes mapped to sliders
	struct SliderKey
	{
	public:
		SliderKey(LLWLParamKey kf, F32 t) : keyframe(kf), time(t) {}
		SliderKey() : keyframe(), time(0.f) {} // Don't use this default constructor

		LLWLParamKey keyframe;
		F32 time;
	};

	static const F32 sHoursPerDay;

	LLLineEditor*		mDayCycleNameEditor;
	LLComboBox*			mDayCyclesCombo;
	LLMultiSliderCtrl*	mTimeSlider;
	LLMultiSliderCtrl*	mKeysSlider;
	LLComboBox*			mSkyPresetsCombo;
	LLTimeCtrl*			mTimeCtrl;
	LLCheckBoxCtrl*		mMakeDefaultCheckBox;
	LLButton*			mSaveButton;

	// map of sliders to parameters
	std::map<std::string, SliderKey> mSliderToKey;
};

#endif // LL_LLFLOATEREDITDAYCYCLE_H