⛏️ index : haiku.git

/*
 * Copyright 2022-2025 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef THEME_VIEW_H
#define THEME_VIEW_H


#include <Button.h>
#include <ColorControl.h>
#include <ColorPreview.h>
#include <GroupView.h>
#include <ListItem.h>
#include <ListView.h>
#include <Menu.h>
#include <MenuBar.h>
#include <MenuField.h>
#include <MenuItem.h>
#include <Message.h>
#include <Messenger.h>
#include <ObjectList.h>
#include <ScrollBar.h>
#include <ScrollView.h>
#include <String.h>
#include <StringView.h>
#include <View.h>

#include "Colors.h"


static const uint32 MSG_COLOR_SCHEME_CHANGED 	= 'mccs';
static const uint32 MSG_UPDATE_COLOR		 	= 'upcl';
static const uint32 MSG_COLOR_ATTRIBUTE_CHOSEN	= 'atch';
static const uint32 MSG_THEME_MODIFIED			= 'tmdf';


class ThemeWindow;
class BMenu;
class BMenuField;
class BPopUpMenu;
class BTextView;


class ThemeView : public BGroupView {
public:
								ThemeView(const char *name,
									const BMessenger &messenger);
	virtual						~ThemeView();

	virtual	void				AttachedToWindow();
	virtual	void				WindowActivated(bool active);
	virtual	void				MessageReceived(BMessage *msg);

			void				SetDefaults();
			void				Revert();
			void				UpdateMenu();

private:
			void				_UpdateStyle();
			void				_ChangeColorScheme(color_scheme* scheme);
			void				_SetCurrentColorScheme();
			void				_SetCurrentColor(rgb_color color);
			void				_SetColor(int32 index, rgb_color color);

			void				_MakeColorSchemeMenu();
			void				_MakeColorSchemeMenuItem(const color_scheme *item);

private:
			BColorControl*		fPicker;
			BListView*			fAttrList;
			const char*			fName;
			BScrollView*		fScrollView;
			BPrivate::BColorPreview*	fColorPreview;
			BMenuField*			fColorSchemeField;
			BPopUpMenu*			fColorSchemeMenu;
			BTextView*			fPreview;

			BMessage			fPrevColors;
			BMessage			fDefaultColors;
			BMessage			fCurrentColors;

			BMessenger			fTerminalMessenger;

public:
			static const char*	kColorTable[];
};


#endif	// THEME_VIEW_H