Following the question asked in ScriptSpot Forums :: Working checklist I decided to make the code snippet usable in real life and made a basic to-do list with automatic saving and loading of the tasks (saves a different file for each user), resizable interface and... well, no other distractions at all. As usual, no .mse, just plain text for you to have a look at and reuse:
try destroyDialog listview_rollout catch()rollout listview_rollout " Task List v0.02" width:190 height:300(----------------------------------------------------------------------------------- Layout Section---------------------------------------------------------------------------------editText etTaskName "" width:75 pos:[6,8]button btnAdd "Add" pos:[85,7]button btnRemove "Remove" pos:[121,7]dotNetControl dncTaskList "System.Windows.Forms.ListView" pos:[3,37] width:184 height:260----------------------------------------------------------------------------------- Private Globals---------------------------------------------------------------------------------local dn_listitem = dotNetClass "System.Windows.Forms.ListViewItem"local dn_buttons = dotNetClass "System.Windows.Forms.MouseButtons"local dn_file = dotNetClass "System.IO.File"local dn_streamwriter = dotNetClass "System.IO.StreamWriter"local dn_streamreader = dotNetClass "System.IO.StreamReader"local dn_garbage = dotNetClass "System.GC"local file_name = ((dotNetClass "System.Windows.Forms.Application").LocalUserAppDataPath + "\\to-do.list")local file_stream = undefinedlocal check_states, sel_nums = #(), sel_nums_count = 0 -- for the listview checkbox workaround all the credits go to Jon Huhn-- for more details see forums.cgsociety.org/showthread.php?t=598014----------------------------------------------------------------------------------- Event Handlers---------------------------------------------------------------------------------on listview_rollout open do(dncTaskList.View = (dotNetClass "System.Windows.Forms.View").DetailsdncTaskList.BorderStyle = dncTaskList.BorderStyle.FixedSingledncTaskList.FullRowSelect = truedncTaskList.GridLines = truedncTaskList.CheckBoxes = truecolums_arr = #(#(" ", 18), #("Task", 166))for i in colums_arr do (dncTaskList.Columns.Add i[1] i[2])if doesFileExist file_name do(local read_line, list_items = #()local new_item = dotNetObject dn_listitem ""new_item.SubItems.Add ""file_stream = dotNetObject dn_streamreader file_namewhile (read_line = file_stream.ReadLine()) != undefined do(local line_item = filterString read_line "\t"list_item = new_item.Clone()list_item.Checked = line_item[1] as booleanClasslist_item.SubItems.Item[1].Text = line_item[2]append list_items list_item)dncTaskList.Items.AddRange list_itemslist_items = undefinedfile_stream.Close()file_stream.Dispose()file_stream = undefineddn_garbage.collect()gc light:true))on btnAdd pressed do(if etTaskName.text != "" do(local new_item = dotNetObject dn_listitem ""new_item.SubItems.Add etTaskName.textnew_item.Checked = falsedncTaskList.Items.Add new_itemnew_item = undefined))on btnRemove pressed do(selected_count = dncTaskList.SelectedItems.Count - 1for index = selected_count to 0 by -1 dodncTaskList.Items.Remove dncTaskList.SelectedItems.Item[index])on dncTaskList ItemSelectionChanged do(local selected_count = dncTaskList.selectedIndices.count - 1sel_nums = for each = 0 to selected_count collectdncTaskList.SelectedIndices.Item[each]sel_nums_count = sel_nums.countcheck_states = for each = 1 to sel_nums_count collectdncTaskList.Items.Item[sel_nums[each]].Checked)on dncTaskList MouseUp ctrl evnt do(if evnt.Button == dn_buttons.Left do(for item = 1 to sel_nums.count dodncTaskList.Items.Item[sel_nums[item]].Checked = check_states[item]check_states = #()sel_nums = #()))on dncTaskList ColumnClick ctrl evnt do(if evnt.Column == 0 do(local checked_arr = #()local unchecked_arr = #()for i = 0 to (listview_rollout.dncTaskList.Items.count - 1) do(case listview_rollout.dncTaskList.Items.Item[i].Checked of(true : append checked_arr listview_rollout.dncTaskList.Items.Item[i]false : append unchecked_arr listview_rollout.dncTaskList.Items.Item[i]))dncTaskList.BeginUpdate()dncTaskList.Items.Clear()dncTaskList.Items.AddRange (join checked_arr unchecked_arr)dncTaskList.EndUpdate()))on listview_rollout resized rollout_size do(if rollout_size[1] <= 190 dolistview_rollout.width = 190 --limit dialog resizingif rollout_size[2] <= 150 dolistview_rollout.height = 150dncTaskList.Size = dotNetObject "System.Drawing.Size" (listview_rollout.width - 6) (listview_rollout.height - 40)dncTaskList.Columns.Item[1].Width = (listview_rollout.width - 24))on listview_rollout close do(file_stream = dotNetObject dn_streamwriter (dn_file.Create file_name)item_count = listview_rollout.dncTaskList.Items.Count - 1for index = 0 to item_count dofile_stream.WriteLine ((local list_item = listview_rollout.dncTaskList.Items.Item[index]).Checked as string + "\t" + list_item.SubItems.Item[1].Text)file_stream.Close()file_stream.Dispose()file_stream = undefined))createDialog listview_rollout style:#(#style_titlebar, #style_sysmenu, #style_minimizebox, #style_resizing)
USAGE: Run the script, add items, check/uncheck them, remove them – there's not much else to do with it.

DISCLAIMER: All scripts and snippets are provided as is under Creative Commons Zero (public domain, no restrictions) license. The author and this blog cannot be held liable for any loss caused as a result of inaccuracy or error within these web pages. Use at your own risk.


This Post needs Your Comment!
Great work man. Thanks for the script.
JokerMartini
nice script...
Leave a Comment