/
Puzzman
/
setPointMap
Обзор
Документация
Войти
/
Puzzman
/
setPointMap
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/libs/classes/TableViewScad.ctl
130 строк
6 KB
Sergey
refactor
12 май 2025, 16:11
12 май 2025, 16:11
8c27993
Код
Авторство
О чём код?
#uses "classes/Structures.ctl" const int SIZE_X = 1900; const int SIZE_Y = 760; const string styleSheet = "QTableView::item:selected{background-color: #787479} " //цвет выделения строки/ячейки "QTableView::item:hover{background-color: #CCCCCC;} "; //цвет наведения на ячейку const dyn_string defaultHeaders = makeDynAnytype("№ п/п", "Описание", "Идент.", "Ед.изм."); const dyn_string defaultTags = makeDynAnytype("id", "name", "tag", "unit"); const dyn_int defaultWidth = makeDynInt(40, 700, 200, 70); const string SCRIPT_CLICK = "main(int row, string col, string value){CLICK(row, col, value, this);}"; const string SCRIPT_RIGHT_CLICK = "main(int row, string col){setpointMap.cellRightClick(row, col, this.name);}"; void CLICK(int row, string nameColumn, string value, anytype owner) { DebugFTN("dbgmap", __LINE__, __FUNCTION__ + "----> START"); int curColumn; getValue(owner.name, "nameToColumn", nameColumn, curColumn); setpointMap.functionOfRemovingEditingCellsExeptForSelectedOne(row, curColumn, owner.name); setpointMap.selectionProcessing(owner.getSelectedLines(), owner.getSelectedColumns(), owner.name, row, curColumn, value, nameColumn); DebugFTN("dbgmap", __LINE__, __FUNCTION__ + "----> END"); } //базовая таблица где все дефолтные настройки struct BaseTable { protected string typeTable_=""; protected shape TABLE_; //constructor public BaseTable(shape tab){ TABLE_ = tab; setValue( TABLE_, "script", "Clicked", SCRIPT_CLICK ); setMultiValue( TABLE_, "position", 1, 127, TABLE_, "size", SIZE_X, SIZE_Y, TABLE_, "minimumSize", SIZE_X, SIZE_Y, TABLE_, "maximumSize", SIZE_X, SIZE_Y, TABLE_, "sortOnClick", FALSE, TABLE_, "tableMode", TABLE_SELECT_MULTIPLE, TABLE_, "selectByClick", TABLE_SELECT_LINE_COLUMN, TABLE_, "enableColumnResize", FALSE, TABLE_, "alternatingRowColors", makeDynString("WF_TableAlternatingRowColor_2", "white"), TABLE_, "styleSheet", styleSheet, TABLE_, "font", "MyFont11,-1,12,5,50,0,0,0,0,0,Обычный" //убираем tooltip ); } public shape get_table() {return TABLE_;} public append_lines(int count) {TABLE_.appendLines(count);} public dyn_dyn_int get_cell() {return cell_selected_;} public set_cell(int row, int col, int value) {cell_selected_[row][col] = value;} public setTypeTable(string t) {typeTable_ = t;} }; //тут происходит кастомизация базовой таблицы class TableViewScad:BaseTable { private dyn_string nameColumn_; private bool ternTable_; private bool editingIsAllowed_; //constructor public TableViewScad(shape table, bool ternTable, bool editingIsAllowed, string typeTable = "") : BaseTable(table) { ternTable_ = ternTable; editingIsAllowed_ = editingIsAllowed; setTypeTable(typeTable); insert_columns(defaultHeaders, defaultTags, true); } public insert_columns(dyn_string headers, dyn_string tagColumns, bool default_t=false){ DebugFTN("dbgmap", __LINE__, __FUNCTION__ + " --> START"); //int column = 2; //if (ternTable_) column = 3; int shift= TABLE_.columnCount(); dyn_int index; if (!default_t) index = maxLengthHeader(headers); int pixelWidth; for (int i = 0; i < dynlen(headers); i++){ if (headers[i+1] == "Резерв") continue; setValue(TABLE_, "insertColumn", i+shift); setValue(TABLE_, "columnName", i+shift, tagColumns[i+1]); setValue(TABLE_, "columnHeader", i+shift, (langString)headers[i+1]); setValue(TABLE_, "columnHeaderAlignment", i+shift, "AlignVCenter | AlignHCenter"); setValue(TABLE_, "columnWidth", i+shift, (default_t)?defaultWidth[i+1]:defaultWidth[4]); //после вычесления макс. длины заголовка выполняем adjustColumn по индексу этого заголовка //и выравниваем все оставшиеся колонки по ширине той колонки, по которой делали adjustColumn //ps: данное решение не панацея!!! if (!default_t && (i+1) == index[1]) { TABLE_.adjustColumn(i+shift); getValue(TABLE_, "columnWidth", i+shift, pixelWidth); } dynAppend(nameColumn_, headers[i+1]); } if (typeTable_ == "Аналог"&& editingIsAllowed_) setValue(TABLE_, "script", "RightMousePressed", SCRIPT_RIGHT_CLICK); //Вынесено в отдельный цикл, дабы не хочет записывать в одном заросе for (int i = 0; i < TABLE_.columnCount(); i++){ TABLE_.columnEditable(i, (i > 3 && editingIsAllowed_)?true:false); if (!default_t && i > 3) TABLE_.columnWidth(i, pixelWidth+5); } DebugFTN("dbgmap", __LINE__, __FUNCTION__ + " --> END"); } public dyn_string getNameColumn() {return nameColumn_;} public string getTagTable() {return tagTable_;} public bool isTernTable() {return ternTable_;} //возвращает максимальный по длине заголовок private dyn_int maxLengthHeader(dyn_string headers) { dyn_int r = makeDynInt(0,0); for (int i = 1; i <= dynlen(headers); ++i) { // DebugN(headers[i], strlen(headers[i])); if (headers[i].contains('\n') || strlen(headers[i]) == 0) continue;// без учета переноса строки(плохо работает, если есть символ "\n") if (strlen(headers[i]) >= r[2]) {r[1] = i; r[2] = strlen(headers[i]);} } if (r[1] == 0) {r[1] = 1; r[2] = strlen(headers[1]);} return r; } };