From 6836c3cb8c6f0e1d4c89d6baa5a2185e69d35f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 13 Jun 2003 03:56:28 +0000 Subject: [PATCH] Add a first non-functional version of the default media theme. Implemented all needed functionality in BMediaTheme to use this default theme - it's currently disabled, though (or should be). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3491 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/media/DefaultMediaTheme.cpp | 63 ++++++++++++ src/kits/media/MediaTheme.cpp | 144 ++++++++++++++++++++------- 2 files changed, 169 insertions(+), 38 deletions(-) create mode 100644 src/kits/media/DefaultMediaTheme.cpp diff --git a/src/kits/media/DefaultMediaTheme.cpp b/src/kits/media/DefaultMediaTheme.cpp new file mode 100644 index 0000000000..b0fa079d7e --- /dev/null +++ b/src/kits/media/DefaultMediaTheme.cpp @@ -0,0 +1,63 @@ +/* +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + + +#include "DefaultMediaTheme.h" +#include "debug.h" + +#include + + +using namespace BPrivate; + + +DefaultMediaTheme::DefaultMediaTheme() + : BMediaTheme("BeOS Theme", "BeOS built-in theme version 0.1") +{ + CALLED(); +} + + +BControl * +DefaultMediaTheme::MakeControlFor(BParameter *parameter) +{ + CALLED(); +} + + +BView * +DefaultMediaTheme::MakeViewFor(BParameterWeb *web, const BRect *hintRect) +{ + CALLED(); +} + + +BView * +DefaultMediaTheme::MakeViewFor(BParameterGroup *group, const BRect *hintRect) +{ + CALLED(); +} + + +BControl * +DefaultMediaTheme::MakeViewFor(BParameter *parameter, const BRect *hintRect) +{ + switch (parameter->Type()) { + case BParameter::B_NULL_PARAMETER: + // there is no default view for a null parameter + return NULL; + + case BParameter::B_DISCRETE_PARAMETER: + break; + + case BParameter::B_CONTINUOUS_PARAMETER: + break; + + default: + FATAL("BMediaTheme: Don't know parameter type: 0x%lx\n", parameter->Type()); + } + return NULL; +} + diff --git a/src/kits/media/MediaTheme.cpp b/src/kits/media/MediaTheme.cpp index 068c7d25a3..9b36f29292 100644 --- a/src/kits/media/MediaTheme.cpp +++ b/src/kits/media/MediaTheme.cpp @@ -1,44 +1,60 @@ -/*********************************************************************** - * AUTHOR: Marcus Overhagen - * FILE: MediaTheme.cpp - * DESCR: - ***********************************************************************/ +/* Author: Marcus Overhagen +** Axel Dörfler, axeld@pinc-software.de +** +** This file may be used under the terms of the OpenBeOS License. +*/ + #include #include +#include +#include + +#include + +#include "DefaultMediaTheme.h" #include "debug.h" + +static BLocker sLock; + +/************************************************************* + * static BMediaTheme variables + *************************************************************/ + +BMediaTheme * BMediaTheme::_mDefaultTheme; + + /************************************************************* * public BMediaTheme *************************************************************/ BMediaTheme::~BMediaTheme() { - UNIMPLEMENTED(); + CALLED(); + + free(_mName); + free(_mInfo); } const char * BMediaTheme::Name() { - UNIMPLEMENTED(); - return ""; + return _mName; } const char * BMediaTheme::Info() { - UNIMPLEMENTED(); - return ""; + return _mInfo; } int32 BMediaTheme::ID() { - UNIMPLEMENTED(); - - return 0; + return _mID; } @@ -52,29 +68,73 @@ BMediaTheme::GetRef(entry_ref *out_ref) BView * -BMediaTheme::ViewFor(BParameterWeb *web, - const BRect *hintRect, - BMediaTheme *using_theme) +BMediaTheme::ViewFor(BParameterWeb *web, const BRect *hintRect, BMediaTheme *usingTheme) { - UNIMPLEMENTED(); - return new BStringView(BRect(0,0,200,30), "", "No BMediaTheme, sorry!"); + CALLED(); + + // use default theme if none was specified + + if (usingTheme == NULL) { + BAutolock locker(sLock); + + if (_mDefaultTheme == NULL) + _mDefaultTheme = new BPrivate::DefaultMediaTheme(); + + //usingTheme = _mDefaultTheme; + } + + if (usingTheme == NULL) + return new BStringView(BRect(0, 0, 200, 30), "", "No BMediaTheme available, sorry!"); + + return usingTheme->MakeViewFor(web, hintRect); } status_t -BMediaTheme::SetPreferredTheme(BMediaTheme *default_theme) +BMediaTheme::SetPreferredTheme(BMediaTheme *defaultTheme) { - UNIMPLEMENTED(); + CALLED(); - return B_ERROR; + // ToDo: this method should probably set some global settings file + // to make the new preferred theme available to all applications + + BAutolock locker(sLock); + + if (defaultTheme == NULL) { + // if the current preferred theme is not the default media theme, + // delete it, and set it back to the default + if (dynamic_cast(_mDefaultTheme) == NULL) + _mDefaultTheme = new BPrivate::DefaultMediaTheme(); + + return B_OK; + } + + // this method takes possession of the BMediaTheme passed, even + // if it fails, so it has to delete it + if (defaultTheme != _mDefaultTheme) + delete _mDefaultTheme; + + _mDefaultTheme = defaultTheme; + + return B_OK; } BMediaTheme * BMediaTheme::PreferredTheme() { - UNIMPLEMENTED(); - return NULL; + CALLED(); + + BAutolock locker(sLock); + + // ToDo: should look in the global prefs file for the preferred + // add-on and load this from disk - in the meantime, just use + // the default theme + + if (_mDefaultTheme == NULL) + _mDefaultTheme = new BPrivate::DefaultMediaTheme(); + + return _mDefaultTheme; } @@ -90,7 +150,7 @@ rgb_color BMediaTheme::BackgroundColorFor(bg_kind bg) { UNIMPLEMENTED(); - rgb_color dummy = {0,0,0}; + rgb_color dummy = {0, 0, 0}; return dummy; } @@ -100,31 +160,44 @@ rgb_color BMediaTheme::ForegroundColorFor(fg_kind fg) { UNIMPLEMENTED(); - rgb_color dummy = {255,255,255}; + rgb_color dummy = {255, 255, 255}; return dummy; } + /************************************************************* * protected BMediaTheme *************************************************************/ -BMediaTheme::BMediaTheme(const char *name, - const char *info, - const entry_ref *add_on, - int32 theme_id) + +BMediaTheme::BMediaTheme(const char *name, const char *info, const entry_ref *ref, int32 id) + : + _mID(id) { - UNIMPLEMENTED(); + _mName = strdup(name); + _mInfo = strdup(info); + + // ToDo: is there something else here, which has to be done? + + if (ref) { + _mAddOn = true; + _mAddOnRef = *ref; + } else + _mAddOn = false; } BControl * -BMediaTheme::MakeFallbackViewFor(BParameter *control) +BMediaTheme::MakeFallbackViewFor(BParameter *parameter) { - UNIMPLEMENTED(); - return NULL; + if (parameter == NULL) + return NULL; + + return BPrivate::DefaultMediaTheme::MakeViewFor(parameter); } + /************************************************************* * private BMediaTheme *************************************************************/ @@ -145,8 +218,3 @@ status_t BMediaTheme::_Reserved_ControlTheme_5(void *) { return B_ERROR; } status_t BMediaTheme::_Reserved_ControlTheme_6(void *) { return B_ERROR; } status_t BMediaTheme::_Reserved_ControlTheme_7(void *) { return B_ERROR; } -/************************************************************* - * static BMediaTheme variables - *************************************************************/ - -BMediaTheme * BMediaTheme::_mDefaultTheme;