#include "pch.h"
#include "label.h"
#include "text.h"
#include "util.h"
#include "toolkit.h"
#include "container.h"
#include "../common/object.h"
#include "../common/context.h"
using namespace winrt;
using namespace Microsoft::
UI::Xaml;
using namespace Microsoft::
UI::Xaml::Controls;
using namespace Windows::
UI::Xaml::Interop;
using namespace winrt::Windows::Foundation;
using namespace winrt::Microsoft::
UI::Xaml::Controls::Primitives;
UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args) {
UiObject* current = uic_current_obj(obj);
TextBlock label = TextBlock();
if (args.label) {
wchar_t* wlabel = str2wstr(args.label, nullptr);
label.Text(wlabel);
free(wlabel);
}
UIElement elm = label;
UiWidget* widget = new UiWidget(elm);
ui_context_add_widget_destructor(current->ctx, widget);
UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname,
UI_VAR_STRING);
if (var) {
UiString* value = (UiString*)var->value;
value->obj = widget;
value->get = ui_label_get;
value->set = ui_label_set;
}
UI_APPLY_LAYOUT1(current, args);
current->container->Add(label, false);
return widget;
}
UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args) {
args.align =
UI_ALIGN_LEFT;
return ui_label_create(obj, args);
}
UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args) {
args.align =
UI_ALIGN_RIGHT;
return ui_label_create(obj, args);
}
char* ui_label_get(UiString* str) {
UiWidget* widget = (UiWidget*)str->obj;
TextBlock box = widget->uielement.as<TextBlock>();
std::wstring wstr(box.Text());
return ui_wstring_get(str, wstr);
}
void ui_label_set(UiString* str,
const char* newvalue) {
UiWidget* widget = (UiWidget*)str->obj;
TextBlock box = widget->uielement.as<TextBlock>();
box.Text(ui_wstring_set(str, newvalue));
}
UIWIDGET ui_progressbar_create(UiObject* obj, UiProgressbarArgs args) {
UiObject* current = uic_current_obj(obj);
ProgressBar progressbar = ProgressBar();
progressbar.Minimum(args.min);
progressbar.Maximum(args.max ==
0 ?
100 : args.max);
if (args.width >
0) {
progressbar.Width(args.width);
}
UIElement elm = progressbar;
UiWidget* widget = new UiWidget(elm);
ui_context_add_widget_destructor(current->ctx, widget);
UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname,
UI_VAR_DOUBLE);
if (var) {
UiDouble* value = (UiDouble*)var->value;
value->obj = widget;
value->get = ui_progressbar_get;
value->set = ui_progressbar_set;
}
UI_APPLY_LAYOUT1(current, args);
current->container->Add(progressbar, false);
return widget;
}
double ui_progressbar_get(UiDouble * d) {
UiWidget* widget = (UiWidget*)d->obj;
ProgressBar progressbar = widget->uielement.as<ProgressBar>();
d->value = progressbar.Value();
return d->value;
}
void ui_progressbar_set(UiDouble * d,
double newvalue) {
UiWidget* widget = (UiWidget*)d->obj;
ProgressBar progressbar = widget->uielement.as<ProgressBar>();
d->value = newvalue;
progressbar.Value(newvalue);
}
UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args) {
UiObject* current = uic_current_obj(obj);
ProgressRing spinner = ProgressRing();
spinner.IsActive(false);
UIElement elm = spinner;
UiWidget* widget = new UiWidget(elm);
ui_context_add_widget_destructor(current->ctx, widget);
UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname,
UI_VAR_DOUBLE);
if (var) {
UiInteger* value = (UiInteger*)var->value;
value->obj = widget;
value->get = ui_progressspinner_get;
value->set = ui_progressspinner_set;
}
UI_APPLY_LAYOUT1(current, args);
current->container->Add(spinner, false);
return widget;
}
int64_t ui_progressspinner_get(UiInteger * i) {
UiWidget* widget = (UiWidget*)i->obj;
ProgressRing spinner = widget->uielement.as<ProgressRing>();
i->value = spinner.IsActive();
return i->value;
}
void ui_progressspinner_set(UiInteger * i,
int64_t newvalue) {
UiWidget* widget = (UiWidget*)i->obj;
ProgressRing spinner = widget->uielement.as<ProgressRing>();
i->value = newvalue !=
0 ?
1 :
0;
spinner.IsActive(i->value);
}