OSDN Git Service

The Ruby Dialog can now be set as resizable. (Automatic resizing of the subviews...
authortoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Thu, 25 Jul 2013 15:05:49 +0000 (15:05 +0000)
committertoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Thu, 25 Jul 2013 15:05:49 +0000 (15:05 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@374 a2be9bc6-48de-4e38-9406-05402d4bc13c

MolLib/Ruby_bind/ruby_dialog.c
MolLib/Ruby_bind/ruby_dialog.h
wxSources/RubyDialogFrame.cpp

index fa94f03..1669979 100644 (file)
@@ -23,7 +23,7 @@ static VALUE
        sCheckBoxSymbol, sPopUpSymbol, sTextViewSymbol, sViewSymbol,
        sLineSymbol, sTagSymbol, sTypeSymbol, sTitleSymbol, sRadioGroupSymbol,
        sTableSymbol,
-       sDialogSymbol, sIndexSymbol,
+       sResizableSymbol, sDialogSymbol, sIndexSymbol,
        sXSymbol, sYSymbol, sWidthSymbol, sHeightSymbol, 
        sOriginSymbol, sSizeSymbol, sFrameSymbol,
        sEnabledSymbol, sEditableSymbol, sHiddenSymbol, sValueSymbol,
@@ -88,10 +88,10 @@ s_RubyDialog_Alloc(VALUE klass)
 {
        VALUE val;
        RubyDialogInfo *di;
-       RubyDialog *dref = RubyDialogCallback_new();
+//     RubyDialog *dref = RubyDialogCallback_new();
        val = Data_Make_Struct(klass, RubyDialogInfo, 0, s_RubyDialog_Release, di);
-       di->dref = dref;
-       RubyDialogCallback_setRubyObject(dref, (RubyValue)val);
+       di->dref = NULL;
+//     RubyDialogCallback_setRubyObject(dref, (RubyValue)val);
        return val;
 }
 
@@ -487,13 +487,28 @@ s_RubyDialogItem_AppendString(VALUE self, VALUE val)
 static VALUE
 s_RubyDialog_Initialize(int argc, VALUE *argv, VALUE self)
 {
-       int i;
-       VALUE val1, val2, val3;
+       int i, style;
+       VALUE val1, val2, val3, val4;
        VALUE items;
        char *title1, *title2;
-       RubyDialog *dref = s_RubyDialog_GetController(self);
+       RubyDialogInfo *di;
+       RubyDialog *dref;
+
+       Data_Get_Struct(self, RubyDialogInfo, di);
+
+       rb_scan_args(argc, argv, "04", &val1, &val2, &val3, &val4);
+
+       style = 0;
+       if (val4 != Qnil) {
+               VALUE optval;
+               optval = rb_hash_aref(val4, sResizableSymbol);
+               if (RTEST(optval))
+                       style |= rd_Resizable;
+       }
+       
+       di->dref = dref = RubyDialogCallback_new(style);
+       RubyDialogCallback_setRubyObject(dref, (RubyValue)self);
        
-       rb_scan_args(argc, argv, "03", &val1, &val2, &val3);
        if (!NIL_P(val1)) {
                char *p = StringValuePtr(val1);
                RubyDialogCallback_setWindowTitle(dref, p);
@@ -1407,8 +1422,6 @@ s_RubyDialog_doTableAction(VALUE val)
        RDItem *ip = (RDItem *)vp[1];
        VALUE sym = (VALUE)vp[2];
        RubyDialog *dref = s_RubyDialog_GetController(self);
-       VALUE items = rb_iv_get(self, "_items");
-       int nitems = RARRAY_LEN(items);
        int idx = RubyDialogCallback_indexOfItem(dref, ip);
        if (idx < 0)
                return Qnil;   /*  No such item (this cannot happen)  */
@@ -1793,7 +1806,7 @@ RubyDialogInitClass(void)
                        &sTextSymbol, &sTextFieldSymbol, &sRadioSymbol, &sButtonSymbol,
                        &sCheckBoxSymbol, &sPopUpSymbol, &sTextViewSymbol, &sViewSymbol,
                        &sTableSymbol,
-                       &sDialogSymbol, &sIndexSymbol, &sLineSymbol, &sTagSymbol,
+                       &sResizableSymbol, &sDialogSymbol, &sIndexSymbol, &sLineSymbol, &sTagSymbol,
                        &sTypeSymbol, &sTitleSymbol, &sXSymbol, &sYSymbol,
                        &sWidthSymbol, &sHeightSymbol, &sOriginSymbol, &sSizeSymbol,
                        &sFrameSymbol, &sEnabledSymbol, &sEditableSymbol, &sHiddenSymbol,
@@ -1812,7 +1825,7 @@ RubyDialogInitClass(void)
                        "text", "textfield", "radio", "button",
                        "checkbox", "popup", "textview", "view",
                        "table",
-                       "dialog", "index", "line", "tag",
+                       "resizable", "dialog", "index", "line", "tag",
                        "type", "title", "x", "y",
                        "width", "height", "origin", "size",
                        "frame", "enabled", "editable", "hidden",
index c825634..782327c 100644 (file)
@@ -27,6 +27,11 @@ extern "C" {
 /*  RubyDialog class  */
 /* extern VALUE rb_cDialog; */
 
+/*  Style of the dialog frame  */
+enum {
+       rd_Resizable = 1,
+};
+
 /*  True if y-coordinate grows from bottom to top (like Cocoa)  */
 extern int gRubyDialogIsFlipped;
        
@@ -58,7 +63,7 @@ extern int RubyDialog_SetTableItemColor(RubyValue self, RDItem *ip, int row, int
 extern void RubyDialogInitClass(void);
 
 /*  Stub routines  */
-STUB RubyDialog *RubyDialogCallback_new(void);
+STUB RubyDialog *RubyDialogCallback_new(int style);
 STUB void RubyDialogCallback_release(RubyDialog *dref);
 STUB void RubyDialogCallback_setRubyObject(RubyDialog *dref, RubyValue val);
 STUB void RubyDialogCallback_setWindowTitle(RubyDialog *dref, const char *title);
index d4fdca1..1464fc4 100644 (file)
@@ -261,10 +261,14 @@ RubyDialogFrame::SetItemColor(MyListCtrl *ctrl, long row, long col, float *fg, f
 #pragma mark ====== Plain C interface ======
 
 RubyDialog *
-RubyDialogCallback_new(void)
+RubyDialogCallback_new(int style)
 {
        /*  RubyDialogFrame should not have a close box  */
-       RubyDialogFrame *dref = new RubyDialogFrame(GetMainFrame(), -1, _T("Ruby Dialog"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxSYSTEM_MENU);
+       RubyDialogFrame *dref;
+       int fstyle = wxCAPTION | wxSYSTEM_MENU;
+       if (style & rd_Resizable)
+               fstyle |= wxRESIZE_BOX | wxRESIZE_BORDER;
+       dref = new RubyDialogFrame(GetMainFrame(), -1, _T("Ruby Dialog"), wxDefaultPosition, wxDefaultSize, fstyle);
        return (RubyDialog *)dref;
 }