public static ListViewItem selected(this ctrl_TableList tableList)
 {
     return((ListViewItem)tableList.invokeOnThread(
                () => {
         if (tableList.listView().SelectedItems.Count > 0)
         {
             return tableList.listView().SelectedItems[0];
         }
         return null;
     }));
 }
 public static ctrl_TableList sort(this ctrl_TableList tableList, SortOrder sortOrder)
 {
     return((ctrl_TableList)tableList.invokeOnThread(
                () =>
     {
         tableList.listView().Sorting = sortOrder;
         return tableList;
     }));
 }
 public static ctrl_TableList resize(this ctrl_TableList tableList)
 {
     return((ctrl_TableList)tableList.invokeOnThread(
                () =>
     {
         tableList.listView().AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
         return tableList;
     }));
 }
 public static ctrl_TableList onDoubleClick <T>(this ctrl_TableList tableList, Action <T> callback)
 {
     tableList.invokeOnThread(
         () => {
         tableList.listView().DoubleClick += (sender, e)
                                             => {
             var selectedRows = tableList.listView().SelectedItems;
             if (selectedRows.size() == 1)
             {
                 var selectedRow = selectedRows[0];
                 if (selectedRow.Tag.notNull() && selectedRow.Tag is T)
                 {
                     O2Thread.mtaThread(() => callback((T)selectedRow.Tag));
                 }
                 ;
             }
         };
     });
     return(tableList);
 }
 public static ListViewItem lastRow(this ctrl_TableList tableList)
 {
     return((ListViewItem)tableList.invokeOnThread(
                () =>
     {
         var listView = tableList.listView();
         if (listView.Items.size() > 0)
         {
             return listView.Items[listView.Items.size() - 1];
         }
         return null;
     }));
 }
 public static ctrl_TableList onDoubleClick_get_Row(this ctrl_TableList tableList, Action <ListViewItem> callback)
 {
     tableList.invokeOnThread(
         () => {
         tableList.listView().DoubleClick += (sender, e)
                                             => {
             var selectedRow = tableList.selected();
             if (selectedRow.notNull())
             {
                 O2Thread.mtaThread(() => callback(selectedRow));
             }
         };
     });
     return(tableList);
 }
        public API_MSBuild_Gui buildGui(Panel _topPanel)
        {
            topPanel            = _topPanel;
            msBuild             = new API_MSBuild();
            buildEnabled        = true;
            consoleOut_TextArea = topPanel.insert_Right(300).add_GroupBox("Console Out details").add_TextArea_With_SearchPanel().wordWrap(false);
            tableList           = topPanel.clear().add_TableList("VisualStudio MSBuild results");
            tableList.add_Columns("Project", "Path", "Status", "Time", "Console Out");

            startBuild = (pathToProject) =>
            {
                var buildStatus = "SKIPPED";
                var buildResult = false;
                if (buildEnabled)
                {
                    buildResult = msBuild.build_Ok(pathToProject);
                    buildStatus = buildResult ? "OK" :  "FAILED";
                }
                else
                {
                    "buildEnabled was set to false, so skipping build for: {0}".error(pathToProject);
                    msBuild.ConsoleOut = new StringBuilder();
                }

                tableList.add_ListViewItem(pathToProject.fileName(),
                                           pathToProject,
                                           buildStatus,
                                           msBuild.BuildDuration.timeSpan_ToString(),
                                           msBuild.ConsoleOut.str())
                .foreColor(buildResult, Color.Green, Color.Red);
            };

            tableList.afterSelect_get_Cell(4, (value) => consoleOut_TextArea.set_Text(value));
            buildEnabled_CheckBox = tableList.insert_Below(50, "Config")
                                    .add_CheckBox("Build Enabled", 3, 0, (value) => buildEnabled = value).check();
            //currentTarget_TextBox	= buildEnabled_CheckBox.append_Label("Current Target").top(8).autoSize().append_TextBox("").width(300);
            status_Label = buildEnabled_CheckBox.append_Label("...").autoSize().top(8);

            tableList.add_ContextMenu()
            .add_MenuItem("Recompile project", true,
                          () => {
                startBuild(tableList.selected().values().second());
            })
            .add_MenuItem("Open Project folder", true,
                          () => {
                tableList.selected().values()
                .second()
                .directoryName()
                .startProcess();
            })
            .add_MenuItem("Clear table",
                          () => tableList.clearRows());

            //tableList.onDoubleClick_get_Row((row)=> buildProject(row.values().second()));
            tableList.columns_Width(200, 200, 50, 100, -2);

            buildProjects = (fileOrFolder, onBuildComplete) =>
            {
                //currentTarget_TextBox.set_Text(fileOrFolder);
                O2Thread.mtaThread(
                    () => {
                    var start = DateTime.Now;
                    tableList.listView().backColor(Color.Azure);
                    "Loading file(s) from: {0}".info(fileOrFolder);
                    if (fileOrFolder.fileExists())
                    {
                        status_Label.set_Text("[1/1] Building: {0}".format(fileOrFolder.fileName()));
                        startBuild(fileOrFolder);
                    }
                    else
                    {
                        var files = fileOrFolder.csproj_Files();
                        "Found {0} csproj files to process: {0}".debug(files.size());
                        var processed = 1;
                        foreach (var file in files)
                        {
                            status_Label.set_Text("[{0}/{1}] Building: {2}".format(processed++, files.size(), file.fileName()));
                            startBuild(file);
                        }
                    }
                    status_Label.set_Text("Build complete");
                    tableList.listView().backColor(Color.White);
                    "Build Projects action was completed in: {0}".info(start.timeSpan_ToString());
                    onBuildComplete();
                });
            };

            tableList.listView().onDrop((fileOrFolder) => buildProjects(fileOrFolder, () => {}));
            return(this);
        }