diff --git a/Jamoma/misc/JamomaConfiguration.xml b/Jamoma/misc/JamomaConfiguration.xml
index 0ca5146e..14074cc4 100644
--- a/Jamoma/misc/JamomaConfiguration.xml
+++ b/Jamoma/misc/JamomaConfiguration.xml
@@ -19,6 +19,10 @@
+
+
+
+
@@ -30,6 +34,7 @@
+
diff --git a/source/j.ui/TTUiInfo.cpp b/source/j.ui/TTUiInfo.cpp
index 2df6a75a..3eb726bf 100755
--- a/source/j.ui/TTUiInfo.cpp
+++ b/source/j.ui/TTUiInfo.cpp
@@ -19,7 +19,8 @@
#define thisTTClassName "UiInfo"
#define thisTTClassTags "ui info"
-TT_MODULAR_CONSTRUCTOR
+TT_MODULAR_CONSTRUCTOR,
+mFreeze(NO)
{
TT_ASSERT("Correct number of args to create TTUiInfo", arguments.size() == 1);
@@ -28,6 +29,13 @@ TT_MODULAR_CONSTRUCTOR
mObject = (t_ui*)(TTPtr(arguments[0]));
addAttributeWithGetterAndSetter(Size, kTypeLocalValue);
+ addAttributeWithSetter(Freeze, kTypeBoolean);
+
+ addMessageWithArguments(ColorContentBackground);
+ addMessageWithArguments(ColorToolbarBackground);
+ addMessageWithArguments(ColorToolbarText);
+ addMessageWithArguments(ColorBorder);
+ addMessage(Panel);
}
@@ -60,4 +68,116 @@ TTErr TTUiInfo::getSize(TTValue& value)
value.append(TTUInt32(mObject->box.b_presentation_rect.height));
return kTTErrNone;
+}
+
+TTErr TTUiInfo::setFreeze(const TTValue& newValue)
+{
+ long argc = 0;
+ AtomPtr argv = NULL;
+ TTNodePtr modelNode;
+ TTErr err;
+
+ mFreeze = newValue;
+
+ // get the TTContainer object of the view patch
+ err = JamomaDirectory->getTTNode(mObject->viewAddress, &modelNode);
+
+ if (!err) {
+
+ if (modelNode->getObject()) {
+
+ jamoma_ttvalue_to_Atom(mFreeze, &argc, &argv);
+
+ // set freeze attribute to all j.remote (on 3 levels only as we don't have the // operator)
+ jamoma_container_send(TTContainerPtr(modelNode->getObject()), gensym("*.*:freeze"), argc, argv);
+ jamoma_container_send(TTContainerPtr(modelNode->getObject()), gensym("*.*/*.*:freeze"), argc, argv);
+ jamoma_container_send(TTContainerPtr(modelNode->getObject()), gensym("*.*/*.*/*.*:freeze"), argc, argv);
+
+ return kTTErrNone;
+ }
+ }
+
+ return kTTErrGeneric;
+}
+
+TTErr TTUiInfo::ColorContentBackground(const TTValue& inputValue, TTValue& outputValue)
+{
+ long argc = 0;
+ AtomPtr argv = NULL;
+
+ jamoma_ttvalue_to_Atom(inputValue, &argc, &argv);
+
+ // Colors default to "0". If default value is passed, we avoid setting the color, in order to stick to object defaults.
+ if (argc > 1) {
+
+ object_attr_setvalueof(mObject, _sym_bgcolor, argc, argv);
+ return kTTErrNone;
+ }
+
+ return kTTErrGeneric;
+}
+
+TTErr TTUiInfo::ColorToolbarBackground(const TTValue& inputValue, TTValue& outputValue)
+{
+ long argc = 0;
+ AtomPtr argv = NULL;
+
+ jamoma_ttvalue_to_Atom(inputValue, &argc, &argv);
+
+ if (argc > 1) {
+
+ object_attr_setvalueof(mObject, gensym("headercolor"), argc, argv);
+ return kTTErrNone;
+ }
+
+ return kTTErrGeneric;
+}
+
+TTErr TTUiInfo::ColorToolbarText(const TTValue& inputValue, TTValue& outputValue)
+{
+ long argc = 0;
+ AtomPtr argv = NULL;
+
+ jamoma_ttvalue_to_Atom(inputValue, &argc, &argv);
+
+ if (argc > 1) {
+
+ object_attr_setvalueof(mObject, _sym_textcolor, argc, argv);
+ return kTTErrNone;
+ }
+
+ return kTTErrGeneric;
+}
+
+TTErr TTUiInfo::ColorBorder(const TTValue& inputValue, TTValue& outputValue)
+{
+ long argc = 0;
+ AtomPtr argv = NULL;
+
+ jamoma_ttvalue_to_Atom(inputValue, &argc, &argv);
+
+ if (argc > 1) {
+
+ object_attr_setvalueof(mObject, gensym("bordercolor"), argc, argv);
+ mObject->memo_bordercolor = mObject->bordercolor;
+ return kTTErrNone;
+ }
+
+ return kTTErrGeneric;
+}
+
+TTErr TTUiInfo::Panel()
+{
+ t_atom a;
+
+ if (mObject->patcher_panel) {
+
+ // open ui panel and set title
+ atom_setsym(&a, gensym((char*)mObject->viewAddress.c_str()));
+ object_attr_setvalueof(mObject->patcher_panel, _sym_title, 1, &a);
+ object_method(mObject->patcher_panel, _sym_vis);
+ return kTTErrNone;
+ }
+
+ return kTTErrGeneric;
}
\ No newline at end of file
diff --git a/source/j.ui/TTUiInfo.h b/source/j.ui/TTUiInfo.h
index c9808b2b..ab6627b3 100644
--- a/source/j.ui/TTUiInfo.h
+++ b/source/j.ui/TTUiInfo.h
@@ -26,6 +26,7 @@ class TTMODULAR_EXPORT TTUiInfo : public TTDataObjectBase
TTCLASS_SETUP(TTUiInfo)
TTValue mSize; ///< ATTRIBUTE : the size of the j.ui
+ TTBoolean mFreeze; ///< ATTRIBUTE : freeze all j.remote
t_ui* mObject; ///< cache the j.ui object
@@ -38,10 +39,51 @@ class TTMODULAR_EXPORT TTUiInfo : public TTDataObjectBase
TTErr setSize(const TTValue& newValue);
/** Attribute accessor.
- @param value current horizontal and a vertical size value
+ @param value current horizontal and a vertical size value
@return TTErr kTTErrNone
*/
TTErr getSize(TTValue& value);
+
+ /** Attribute accessor.
+ @param newValue a new freeze state
+ @return TTErr kTTErrNone
+ */
+ TTErr setFreeze(const TTValue& newValue);
+
+ /** Set content background color
+ @param inputValue a new color
+ @param outputValue nothing
+ @return TTErr kTTErrNone
+ */
+ TTErr ColorContentBackground(const TTValue& inputValue, TTValue& outputValue);
+
+ /** Set toolbar background color
+ @param inputValue a new color
+ @param outputValue nothing
+ @return TTErr kTTErrNone
+ */
+ TTErr ColorToolbarBackground(const TTValue& inputValue, TTValue& outputValue);
+
+ /** Set toolbar text color
+ @param inputValue a new color
+ @param outputValue nothing
+ @return TTErr kTTErrNone
+ */
+ TTErr ColorToolbarText(const TTValue& inputValue, TTValue& outputValue);
+
+ /** Set border color
+ @param inputValue a new color
+ @param outputValue nothing
+ @return TTErr kTTErrNone
+ */
+ TTErr ColorBorder(const TTValue& inputValue, TTValue& outputValue);
+
+ /** Open the ui panel
+ @param inputValue a new color
+ @param outputValue nothing
+ @return TTErr kTTErrNone
+ */
+ TTErr Panel();
};
typedef TTUiInfo* TTUiInfoPtr;
diff --git a/source/j.ui/j.ui.cpp b/source/j.ui/j.ui.cpp
index bcf0f2d0..64f85a62 100755
--- a/source/j.ui/j.ui.cpp
+++ b/source/j.ui/j.ui.cpp
@@ -74,14 +74,6 @@ int JAMOMA_EXPORT_MAXOBJ main(void)
class_addmethod(c, (method)ui_modelMessExplorer_callback, "return_modelMessExploration", A_CANT, 0);
class_addmethod(c, (method)ui_modelRetExplorer_callback, "return_modelRetExploration", A_CANT, 0);
- class_addmethod(c, (method)ui_view_panel_return, "return_view_panel", A_CANT, 0);
-
- class_addmethod(c, (method)ui_return_color_contentBackground, "return_color_contentBackground", A_CANT, 0);
- class_addmethod(c, (method)ui_return_color_toolbarBackground, "return_color_toolbarBackground", A_CANT, 0);
- class_addmethod(c, (method)ui_return_color_toolbarText, "return_color_toolbarText", A_CANT, 0);
- class_addmethod(c, (method)ui_return_color_border, "return_color_border", A_CANT, 0);
- class_addmethod(c, (method)ui_return_ui_freeze, "return_ui_freeze", A_CANT, 0);
-
class_addmethod(c, (method)ui_return_model_address, "return_model_address", A_CANT, 0);
class_addmethod(c, (method)ui_return_model_init, "return_model_init", A_CANT, 0);
@@ -213,13 +205,15 @@ t_ui* ui_new(t_symbol *s, long argc, t_atom *argv)
x->textEditor = NULL;
x->textHandler = NULL;
x->state = NULL;
-
+
+ x->patcher_panel = NULL;
+
attr_dictionary_process(x, d); // handle attribute args
// The following must be deferred because we have to interrogate our box,
// and our box is not yet valid until we have finished instantiating the object.
// Trying to use a loadbang method instead is also not fully successful (as of Max 5.0.6)
- defer_low((ObjectPtr)x, (method)ui_data_create_all, NULL, 0, 0);
+ defer_low((ObjectPtr)x, (method)ui_register_info, NULL, 0, 0);
// The following must be deferred because we have to interrogate our box,
// and our box is not yet valid until we have finished instantiating the object.
@@ -261,7 +255,7 @@ void ui_free(t_ui *x)
}
}
- ui_data_destroy_all(x);
+ ui_unregister_info(x);
ui_viewer_destroy_all(x);
ui_receiver_destroy_all(x);
}
@@ -932,7 +926,7 @@ void ui_mousedown(t_ui *x, t_object *patcherview, t_pt px, long modifiers)
}
}
else if (x->has_panel && px.x >= x->rect_panel.x && px.x <= (x->rect_panel.x + x->rect_panel.width))
- ui_data_send(x, TTSymbol("panel"), none);
+ x->uiInfo->sendMessage(TTSymbol("Panel"));
else if (x->has_preview && px.x >= x->rect_preview.x && px.x <= (x->rect_preview.x + x->rect_preview.width)) {
if (x->selection) {
diff --git a/source/j.ui/j.ui.h b/source/j.ui/j.ui.h
index 2288a452..cdbc7b08 100755
--- a/source/j.ui/j.ui.h
+++ b/source/j.ui/j.ui.h
@@ -172,11 +172,13 @@ void ui_refmenu_do(t_ui *x, t_object *patcherview, t_pt px, long modifiers);
void ui_refmenu_qfn(t_ui *x);
void ui_refmenu_build(t_ui *x);
+// prototypes: TTUiInfo registration
+void ui_register_info(t_ui* obj);
+void ui_unregister_info(t_ui* obj);
+
// prototypes: internal TTData and TTViewer
void ui_data_create(t_ui *obj, TTObjectBasePtr *returnedData, SymbolPtr aCallbackMethod, TTSymbol service, TTSymbol name, TTBoolean deferlow = NO);
-void ui_data_create_all(t_ui* obj);
void ui_data_destroy(t_ui *obj, TTSymbol name);
-void ui_data_destroy_all(t_ui* obj);
void ui_data_send(t_ui *obj, TTSymbol name, TTValue v);
void ui_data_interface(t_ui *x, TTSymbol name);
@@ -197,13 +199,6 @@ void ui_modelParamExplorer_callback(TTPtr self, SymbolPtr msg, AtomCount argc,
void ui_modelRetExplorer_callback(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
void ui_view_panel_attach(TTPtr self, t_symbol *msg, long argc, t_atom *argv);
-void ui_view_panel_return(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
-
-void ui_return_color_contentBackground(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
-void ui_return_color_toolbarBackground(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
-void ui_return_color_toolbarText(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
-void ui_return_color_border(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
-void ui_return_ui_freeze(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
void ui_return_model_address(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
void ui_return_model_init(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv);
diff --git a/source/j.ui/j.ui.internals.cpp b/source/j.ui/j.ui.internals.cpp
index cbe80e35..dca5961c 100755
--- a/source/j.ui/j.ui.internals.cpp
+++ b/source/j.ui/j.ui.internals.cpp
@@ -9,13 +9,12 @@
#include "j.ui.h"
-void ui_data_create_all(t_ui* obj)
+void ui_register_info(t_ui* obj)
{
TTObjectBasePtr anObject = NULL;
TTAddress returnedAddress;
TTNodePtr returnedNode = NULL;
TTNodePtr returnedContextNode = NULL;
- TTString uiStr, parentStr, dataStr;
TTValue v, args;
// create a ui info object
@@ -34,68 +33,14 @@ void ui_data_create_all(t_ui* obj)
// make a receiver on contextAddress/model:address attribute
ui_receiver_create(obj, &anObject, gensym("return_model_address"), TTSymbol("model:address"), obj->viewAddress, YES); // YES : we want to deferlow this method
-
- // Then create all internal datas concerning the j.ui
- // ui/color/contentBackground
- ui_data_create(obj, &anObject, gensym("return_color_contentBackground"), kTTSym_message, TTSymbol("ui/color/contentBackground"));
- anObject->setAttributeValue(kTTSym_type, kTTSym_array);
- anObject->setAttributeValue(kTTSym_tag, kTTSym_generic);
- anObject->setAttributeValue(kTTSym_rampDrive, kTTSym_none);
- anObject->setAttributeValue(kTTSym_description, TTSymbol("The background color of the module in the format RGBA where values range [0.0, 1.0]."));
-
- // ui/color/toolbarBackground
- ui_data_create(obj, &anObject, gensym("return_color_toolbarBackground"), kTTSym_message, TTSymbol("ui/color/toolbarBackground"));
- anObject->setAttributeValue(kTTSym_type, kTTSym_array);
- anObject->setAttributeValue(kTTSym_tag, kTTSym_generic);
- anObject->setAttributeValue(kTTSym_rampDrive, kTTSym_none);
- anObject->setAttributeValue(kTTSym_description, TTSymbol("The background color of the module's toolbar in the format RGBA where values range [0.0, 1.0]."));
-
- // ui/color/toolbarText
- ui_data_create(obj, &anObject, gensym("return_color_toolbarText"), kTTSym_message, TTSymbol("ui/color/toolbarText"));
- anObject->setAttributeValue(kTTSym_type, kTTSym_array);
- anObject->setAttributeValue(kTTSym_tag, kTTSym_generic);
- anObject->setAttributeValue(kTTSym_rampDrive, kTTSym_none);
- anObject->setAttributeValue(kTTSym_description, TTSymbol("The color of the module's toolbar text in the format RGBA where values range [0.0, 1.0]."));
-
- // ui/color/border
- ui_data_create(obj, &anObject, gensym("return_color_border"), kTTSym_message, TTSymbol("ui/color/border"));
- anObject->setAttributeValue(kTTSym_type, kTTSym_array);
- anObject->setAttributeValue(kTTSym_tag, kTTSym_generic);
- anObject->setAttributeValue(kTTSym_rampDrive, kTTSym_none);
- anObject->setAttributeValue(kTTSym_description, TTSymbol("The border color of the module in the format RGBA where values range [0.0, 1.0]."));
-
- obj->memo_bordercolor = obj->bordercolor;
-
- // ui/freeze
- ui_data_create(obj, &anObject, gensym("return_ui_freeze"), kTTSym_parameter, TTSymbol("ui/freeze"));
- anObject->setAttributeValue(kTTSym_type, kTTSym_boolean);
- anObject->setAttributeValue(kTTSym_tag, kTTSym_generic);
- anObject->setAttributeValue(kTTSym_rampDrive, kTTSym_none);
- anObject->setAttributeValue(kTTSym_description, TTSymbol("Freeze each j.remote in the patch"));
}
+
+ // keep current bordercolor in mind
+ obj->memo_bordercolor = obj->bordercolor;
}
-void ui_data_destroy_all(t_ui *obj)
+void ui_unregister_info(t_ui *obj)
{
- TTValue hk, v;
- TTSymbol key;
- TTUInt8 i;
-
- // delete all datas
- if (obj->hash_datas) {
-
- if (!obj->hash_datas->isEmpty()) {
-
- obj->hash_datas->getKeys(hk);
- for (i=0; ihash_datas->getSize(); i++) {
-
- hk.get(i, key);
- ui_data_destroy(obj, key);
- }
- }
- delete obj->hash_datas;
- }
-
// unregister the ui info object
if (obj->uiSubscriber)
TTObjectBaseRelease(&obj->uiSubscriber);
@@ -540,7 +485,7 @@ void ui_view_panel_attach(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
obj->patcher_panel = o;
obj->has_panel = true;
- // view/panel
+ // ui/panel
ui_data_create(obj, &aData, gensym("return_view_panel"), kTTSym_message, TTSymbol("panel"));
// Set attribute of the data
@@ -559,17 +504,6 @@ void ui_view_panel_attach(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
}
}
-void ui_view_panel_return(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
-{
- t_ui* obj = (t_ui*)self;
- Atom a;
-
- // open view panel and set title
- atom_setsym(&a, gensym((char*)obj->viewAddress.c_str()));
- object_attr_setvalueof(obj->patcher_panel, _sym_title, 1, &a);
- object_method(obj->patcher_panel, _sym_vis);
-}
-
void ui_return_metersdefeated(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
{
t_ui* obj = (t_ui*)self;
@@ -675,65 +609,6 @@ void ui_return_preview(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
jbox_redraw(&obj->box);
}
-void ui_return_ui_freeze(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
-{
- t_ui* obj = (t_ui*)self;
- TTNodePtr modelNode;
- TTErr err;
-
- if (argc == 1)
- obj->ui_freeze = atom_getlong(argv);
-
- // get the TTContainer object of the view patch
- err = JamomaDirectory->getTTNode(obj->viewAddress, &modelNode);
-
- if (!err) {
-
- if (modelNode->getObject()) {
-
- // set freeze attribute to all j.remote (on 3 levels only as we don't have the // operator)
- jamoma_container_send(TTContainerPtr(modelNode->getObject()), gensym("*.*:freeze"), argc, argv);
- jamoma_container_send(TTContainerPtr(modelNode->getObject()), gensym("*.*/*.*:freeze"), argc, argv);
- jamoma_container_send(TTContainerPtr(modelNode->getObject()), gensym("*.*/*.*/*.*:freeze"), argc, argv);
- }
- }
-}
-
-void ui_return_color_contentBackground(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
-{
- t_ui* obj = (t_ui*)self;
-
- // Colors default to "0". If default value is passed, we avoid setting the color, in order to stick to object defaults.
- if (argc>1)
- object_attr_setvalueof(obj, _sym_bgcolor, argc, argv);
-}
-
-void ui_return_color_toolbarBackground(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
-{
- t_ui* obj = (t_ui*)self;
-
- if (argc>1)
- object_attr_setvalueof(obj, gensym("headercolor"), argc, argv);
-}
-
-void ui_return_color_toolbarText(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
-{
- t_ui* obj = (t_ui*)self;
-
- if (argc>1)
- object_attr_setvalueof(obj, _sym_textcolor, argc, argv);
-}
-
-void ui_return_color_border(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
-{
- t_ui* obj = (t_ui*)self;
-
- if (argc>1) {
- object_attr_setvalueof(obj, gensym("bordercolor"), argc, argv);
- obj->memo_bordercolor = obj->bordercolor;
- }
-}
-
void ui_return_model_address(TTPtr self, SymbolPtr msg, AtomCount argc, AtomPtr argv)
{
ObjectPtr obj = (ObjectPtr)self;