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;