From fbd17d5f31194e36932366ce7bb4a77f0821c5c2 Mon Sep 17 00:00:00 2001 From: toshinagata1964 Date: Thu, 25 Jul 2013 15:05:49 +0000 Subject: [PATCH] The Ruby Dialog can now be set as resizable. (Automatic resizing of the subviews are not implemented yet) git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@374 a2be9bc6-48de-4e38-9406-05402d4bc13c --- MolLib/Ruby_bind/ruby_dialog.c | 37 +++++++++++++++++++++++++------------ MolLib/Ruby_bind/ruby_dialog.h | 7 ++++++- wxSources/RubyDialogFrame.cpp | 8 ++++++-- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/MolLib/Ruby_bind/ruby_dialog.c b/MolLib/Ruby_bind/ruby_dialog.c index fa94f03..1669979 100644 --- a/MolLib/Ruby_bind/ruby_dialog.c +++ b/MolLib/Ruby_bind/ruby_dialog.c @@ -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", diff --git a/MolLib/Ruby_bind/ruby_dialog.h b/MolLib/Ruby_bind/ruby_dialog.h index c825634..782327c 100644 --- a/MolLib/Ruby_bind/ruby_dialog.h +++ b/MolLib/Ruby_bind/ruby_dialog.h @@ -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); diff --git a/wxSources/RubyDialogFrame.cpp b/wxSources/RubyDialogFrame.cpp index d4fdca1..1464fc4 100644 --- a/wxSources/RubyDialogFrame.cpp +++ b/wxSources/RubyDialogFrame.cpp @@ -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; } -- 2.11.0