PDA

View Full Version : سوال: پیاده سازی TreeModel ( Gtk#)



FastCode
سه شنبه 23 خرداد 1391, 15:16 عصر
سلام.
کسی تا حالا موفق شده این کلاس رو implement بکنه؟
هیچ اثزی ازش نیست به جز چند تا راهنما که میگن باید این کلاس رو implement کنم ولی نگفتن چطوری.

من تا حالا چیزی به مزخرفی Treeiter ندیدم.کمک.
ساخارم این شکلیه:
class MyDBTableType:MyTreeNodeType,MyDatabaseRowType,...
{
RBTree<SomeOtherTypeWhichIsBasicallySameAsThis> MySomeChilds;
RBTree<SomeAnotherTypeWhichIsBasicallySameAsThis> MySomeOtherChilds;
SomeOtherType MyParentXYZ;
....
}

فقط یک نمونه ساده کافیه.
با مقداردهی Treeiter مشکل دارم.
interface ها و abstract class هایی که باید implement کنم خیلی قوین.

Saeed_m_Farid
سه شنبه 23 خرداد 1391, 16:42 عصر
حالا چرا انقدر عصبانی؟ ضمناً فکر کنم سوالت رو از وسط پرسیدی! یه مدل سفارشی واسه کار با TreeView تو GNOME (http://www.gnome.org/) میخوای درسته؟ اگه نه که بقیه اش رو نخون :دی
نمیدونم بتونم کمکی کنم یا نه ولی خیلی موارد خاص لازم میشه TreeModel رو implement کرد و خیلی هم سخته! اونهمه چرت و پرت که مثلاً تو TreeStore (http://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeStore.html) نوشتن میخوای از اول بنویسی؟ عمراً!!!
هیچ جوری نمیتونی داده هات رو با TreeStore یا ListStore سینک کنی؟ از من میپرسی یه جوری SomeChild ها و Parent و ... رو با همین مدل TreeStore پیاده کن، ضمناً لازم نیست که Column هایی که قراره نشون بدی دقیقاً به همون ساختار مدل ذخیره شده ات باشه؛ وقتی یه column به TreeView ات اضافه کردی میتونی mapping بین property های اون و مدل موردنظرت درست کنی: treeView.AppendColumn ("Title", renderer, "text", 0, "editable", 4); بازم IMHO:لبخند: اصلاً نرو سراغ wrapper واسه TreeModel: بیخودی علاف میشی و پدرت در میاد، یه data function که همون TreeIter مزخرف و store ازت میگیره و کاری که لازم داری با Cell بکنی رو برات انجام میده بنویسی، خیلی بهتر از اختراع دوباره چرخه:
treeColumn.SetCellDataFunc (renderer, delegate (TreeViewColumn col,
CellRenderer cell, TreeModel model, TreeIter iter)
{
var textCell = (CellRendererText) cell;
textCell.Text = (string) model.GetValue (iter, 0);
textCell.Editable = (bool) model.GetValue (iter, 4);
});


البته همه اینا با این فرض بود بخوای با TreeView کار کنی...

FastCode
سه شنبه 23 خرداد 1391, 16:59 عصر
حالا چرا انقدر عصبانی؟ ضمناً فکر کنم سوالت رو از وسط پرسیدی! یه مدل سفارشی واسه کار با TreeView تو GNOME (http://www.gnome.org/) میخوای درسته؟ اگه نه که بقیه اش رو نخون :دی
نمیدونم بتونم کمکی کنم یا نه ولی خیلی موارد خاص لازم میشه TreeModel رو implement کرد و خیلی هم سخته! اونهمه چرت و پرت که مثلاً تو TreeStore (http://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeStore.html) نوشتن میخوای از اول بنویسی؟ عمراً!!!
هیچ جوری نمیتونی داده هات رو با TreeStore یا ListStore سینک کنی؟ از من میپرسی یه جوری SomeChild ها و Parent و ... رو با همین مدل TreeStore پیاده کن، ضمناً لازم نیست که Column هایی که قراره نشون بدی دقیقاً به همون ساختار مدل ذخیره شده ات باشه؛ وقتی یه column به TreeView ات اضافه کردی میتونی mapping بین property های اون و مدل موردنظرت درست کنی: treeView.AppendColumn ("Title", renderer, "text", 0, "editable", 4); بازم IMHO:لبخند: اصلاً نرو سراغ wrapper واسه TreeModel: بیخودی علاف میشی و پدرت در میاد، یه data function که همون TreeIter مزخرف و store ازت میگیره و کاری که لازم داری با Cell بکنی رو برات انجام میده بنویسی، خیلی بهتر از اختراع دوباره چرخه:
treeColumn.SetCellDataFunc (renderer, delegate (TreeViewColumn col,
CellRenderer cell, TreeModel model, TreeIter iter)
{
var textCell = (CellRendererText) cell;
textCell.Text = (string) model.GetValue (iter, 0);
textCell.Editable = (bool) model.GetValue (iter, 4);
});


البته همه اینا با این فرض بود بخوای با TreeView کار کنی...
سلام.مرسی و فرضتون درست بود.
mapping رو قبلاً آماده کردم.ctor چند ده تا Delegate میگیره و کارش رو انجام میده.
مشکلم اینه که حجم اطلاعات زیاده و چون با چند جا sync هست نمیتونم چند ثانیه یک بار combo رو پر و خالی کنم.تنها چاره ای که به ذهنم رسید همین بود که چند روزه ذهنم رو مشغول کرده.
یه راه دیگه هم هست که یک class بنویسم که backingstore اش یه ListStore باشه ولی خیلی زشت و بیکلاس ه دیگه نمیتونم کدم رو به کسی نشون بدم.


من تا 5 ساعت دیگه نیستم ولی خیلی خوشحال میشم باهاتون چت کنم.

Saeed_m_Farid
سه شنبه 23 خرداد 1391, 17:11 عصر
چند ده تا Delegate میگیره و کارش رو انجام میده.
:متعجب: آقا من نیستم! یعنی مثلاً 30~40 تا Delegate میگیره؟ پس همون TreeModel رو implement کنی بهتره والا ...

FastCode
سه شنبه 23 خرداد 1391, 17:27 عصر
:متعجب: آقا من نیستم! یعنی مثلاً 30~40 تا Delegate میگیره؟ پس همون TreeModel رو implement کنی بهتره والا ...

نه, 30 40 تا که نه,یکی به ازای هر ستون.یکی برای فیلتر.یکی برای سورت.به ازای هر type.