gwenhywfar  5.10.1
w_pushbutton.mm
Go to the documentation of this file.
1 /***************************************************************************
2  begin : August 10 2010
3  copyright : (C) 2010 by Samuel Strupp
4 
5  ***************************************************************************
6  * Please see toplevel file COPYING for license details *
7  ***************************************************************************/
8 
9 
10 #import "CocoaButton.h"
11 
12 
13 static GWENHYWFAR_CB
16  int index,
17  int value,
18  int doSignal) {
19 
20  CocoaButton *button;
21 
23  assert(button);
24 
25  switch(prop) {
27  [button setEnabled:(value==0)?NO:YES];
28  return 0;
29 
31  if ([button window]) {
32  [[button window] makeFirstResponder:button];
33  }
34  return 0;
35 
37  NSRect frame = [button frame];
38  frame.size.width = value;
39  [button setFrame:frame];
40  }
41  return 0;
42 
44  NSRect frame = [button frame];
45  frame.size.height = value;
46  [button setFrame:frame];
47  }
48  return 0;
49 
50  default:
51  break;
52  }
53 
55  "Function is not appropriate for this type of widget (%s)",
57  return GWEN_ERROR_INVALID;
58 }
59 
60 
61 
62 
63 static GWENHYWFAR_CB
66  int index,
67  int defaultValue) {
68  CocoaButton *button;
69 
71  assert(button);
72 
73  switch(prop) {
75  return ([button isEnabled]==YES)?1:0;
76 
78  if ([button window]) {
79  if ([[button window] firstResponder] == button) return 1;
80  }
81  return 0;
82 
84  return [button frame].size.width;
85 
87  return [button frame].size.height;
88 
89  default:
90  break;
91  }
92 
94  "Function is not appropriate for this type of widget (%s)",
96  return defaultValue;
97 }
98 
99 
100 
101 static GWENHYWFAR_CB
104  int index,
105  const char *value,
106  int doSignal) {
107 
108  CocoaButton *button;
109 
111  assert(button);
112 
113  switch(prop) {
115  NSString *stringValue = [[NSString alloc] initWithCString:value encoding:NSUTF8StringEncoding];
116  [button setTitle:stringValue];
117  [stringValue release];
118  }
119  return 0;
120  default:
121  break;
122  }
123 
125  "Function is not appropriate for this type of widget (%s)",
127  return GWEN_ERROR_INVALID;
128 }
129 
130 
131 
132 static GWENHYWFAR_CB
135  int index,
136  const char *defaultValue) {
137  CocoaButton *button;
138 
140  assert(button);
141 
142  switch(prop) {
144  return [[button stringValue] cStringUsingEncoding:NSUTF8StringEncoding];
145  default:
146  break;
147  }
148 
150  "Function is not appropriate for this type of widget (%s)",
152  return defaultValue;
153 }
154 
155 
156 
157 static void CocoaGui_WPushButton_Clicked_handler(NSButton *button, void* data) {
158  GWEN_WIDGET *w;
159  int rv;
160 
161  DBG_ERROR(0, "Clicked");
162  w=(GWEN_WIDGET*)data;
163  assert(w);
169  else if (rv==GWEN_DialogEvent_ResultReject)
171 }
172 
173 
174 
176 
177  CocoaButton *button;
178  const char *s;
179  uint32_t flags;
180  GWEN_WIDGET *wParent;
181 
182  flags=GWEN_Widget_GetFlags(w);
183  wParent=GWEN_Widget_Tree_GetParent(w);
184  s=GWEN_Widget_GetText(w, 0);
185 
186 
187  //Create Button
188  button = [[[CocoaButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 60.0, 24.0)] autorelease];
189  if (flags & GWEN_WIDGET_FLAGS_FILLX) button.fillX = YES;
190  if (flags & GWEN_WIDGET_FLAGS_FILLY) button.fillY = YES;
191  [button setBezelStyle:NSRoundedBezelStyle];
192  if (s && *s) {
193  NSString *title = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];
194  [button setTitle:title];
195  [title release];
196  }
197 
199  if (s && *s) {
200  GWEN_STRINGLIST *sl;
201 
203  if (sl) {
204  int rv;
205  GWEN_BUFFER *tbuf;
206 
207  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
208  rv=GWEN_Directory_FindFileInPaths(sl, s, tbuf);
209  if (rv<0) {
210  DBG_ERROR(GWEN_LOGDOMAIN, "Image file [%s] not found (%d)", s, rv);
211  // ignore result here, instead create GtkImage with "broken mage" later
212  }
213  else {
214  NSString *pathToIconFile = [[NSString alloc] initWithCString:GWEN_Buffer_GetStart(tbuf) encoding:NSUTF8StringEncoding];
215  if (pathToIconFile) {
216  NSImage *icon = [[NSImage alloc] initWithContentsOfFile:pathToIconFile];
217  CGFloat height = 15.0;
218  NSSize imageSize = [icon size];
219  imageSize.width = round(imageSize.width/(imageSize.height/height));
220  imageSize.height = 15.0;
221  [icon setSize:imageSize];
222  [pathToIconFile release];
223  if (icon) {
224  //[button setBezelStyle:NSRegularSquareBezelStyle];
225  [button setImage:icon];
226  [button setImagePosition:NSImageLeft];
227  //[[button cell] setImageScaling:NSImageScaleProportionallyUpOrDown];
228  [icon release];
229  }
230  }
231  }
232  GWEN_Buffer_free(tbuf);
233  }
234  }
235 
238 
243 
245  [button setC_ActionPtr:ptr Data:w];
246 
247  if (wParent)
248  GWEN_Widget_AddChildGuiWidget(wParent, w);
249 
250  return 0;
251 }
252 
253 
GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w)
Definition: widget.c:185
static GWENHYWFAR_CB int CocoaGui_WPushButton_SetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int value, int doSignal)
Definition: w_pushbutton.mm:14
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
#define COCOA_DIALOG_WIDGET_REAL
#define GWEN_ERROR_INVALID
Definition: error.h:67
const char * GWEN_Widget_GetName(const GWEN_WIDGET *w)
Definition: widget.c:320
GWEN_WIDGET_SETCHARPROPERTY_FN GWEN_Widget_SetSetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETCHARPROPERTY_FN fn)
Definition: widget.c:717
GWEN_WIDGET_GETCHARPROPERTY_FN GWEN_Widget_SetGetCharPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETCHARPROPERTY_FN fn)
Definition: widget.c:732
static GWENHYWFAR_CB const char * CocoaGui_WPushButton_GetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *defaultValue)
GWEN_DIALOG_PROPERTY
Definition: dialog.h:260
static void CocoaGui_WPushButton_Clicked_handler(NSButton *button, void *data)
uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w)
Definition: widget.c:149
#define DBG_WARN(dbg_logger, format, args...)
Definition: debug.h:125
#define GWEN_LOGDOMAIN
Definition: logger.h:35
void GWEN_Widget_SetImplData(GWEN_WIDGET *w, int index, void *ptr)
Store a pointer with the widget.
Definition: widget.c:136
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
GWEN_WIDGET_GETINTPROPERTY_FN GWEN_Widget_SetGetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_GETINTPROPERTY_FN fn)
Definition: widget.c:702
static GWENHYWFAR_CB int CocoaGui_WPushButton_SetCharProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, const char *value, int doSignal)
void * GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index)
Definition: widget.c:122
GWEN_DIALOG * GWEN_Widget_GetDialog(const GWEN_WIDGET *w)
Definition: widget.c:92
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
void(* gwenActionPtr)(NSButton *button, void *data)
Definition: CocoaButton.h:14
GWENHYWFAR_API int GWEN_Directory_FindFileInPaths(const GWEN_STRINGLIST *paths, const char *filePath, GWEN_BUFFER *fbuf)
GWEN_WIDGET_SETINTPROPERTY_FN GWEN_Widget_SetSetIntPropertyFn(GWEN_WIDGET *w, GWEN_WIDGET_SETINTPROPERTY_FN fn)
Definition: widget.c:687
GWEN_STRINGLIST * GWEN_Dialog_GetMediaPaths(const GWEN_DIALOG *dlg)
Definition: dialog.c:295
GWEN_DIALOG * GWEN_Widget_GetTopDialog(const GWEN_WIDGET *w)
Definition: widget.c:102
const char * GWEN_Widget_GetIconFileName(const GWEN_WIDGET *w)
Definition: widget.c:342
#define COCOA_DIALOG_WIDGET_CONTENT
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:56
struct GWEN_WIDGET GWEN_WIDGET
Definition: widget_be.h:34
int GWEN_Widget_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild)
Definition: widget.c:828
#define GWEN_WIDGET_FLAGS_FILLY
Definition: dialog.h:62
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
#define GWEN_WIDGET_FLAGS_FILLX
Definition: dialog.h:61
int GWEN_Dialog_EmitSignal(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender)
Definition: dialog.c:321
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
int CocoaGui_WPushButton_Setup(GWEN_WIDGET *w)
static GWENHYWFAR_CB int CocoaGui_WPushButton_GetIntProperty(GWEN_WIDGET *w, GWEN_DIALOG_PROPERTY prop, int index, int defaultValue)
Definition: w_pushbutton.mm:64
void CocoaGui_Dialog_Leave(GWEN_DIALOG *dlg, int result)
const char * GWEN_Widget_Type_toString(GWEN_WIDGET_TYPE t)
Definition: widget.c:452
const char * GWEN_Widget_GetText(const GWEN_WIDGET *w, int idx)
Definition: widget.c:293