void TreeScreen::setupSignals(void) { // Соединение сигнал-слот чтобы показать контекстное меню по правому клику на ветке connect(knowTreeView, SIGNAL(customContextMenuRequested(const QPoint &)), this,SLOT(on_customContextMenuRequested(const QPoint &))); // Соединение сигнал-слот чтобы показать контекстное меню по долгому нажатию connect(knowTreeView, SIGNAL(tapAndHoldGestureFinished(const QPoint &)), this, SLOT(on_customContextMenuRequested(const QPoint &))); // Соединение сигнал-слот что ветка выбрана мышкой или стрелками на клавиатуре if(mytetraConfig.getInterfaceMode()=="desktop") connect(knowTreeView->selectionModel(), SIGNAL(currentRowChanged (const QModelIndex&, const QModelIndex&)), this, SLOT(on_knowtree_clicked(const QModelIndex&))); if(mytetraConfig.getInterfaceMode()=="mobile") connect(knowTreeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(on_knowtree_clicked(const QModelIndex &))); // Сигнал чтобы открыть на редактирование параметры записи при двойном клике // connect(knowTreeView, SIGNAL(doubleClicked(const QModelIndex &)), // actionList["editBranch"], SLOT(trigger(void))); // Сигнал что ветка выбрана мышкой // connect(knowTreeView,SIGNAL(pressed(const QModelIndex &)), // this,SLOT(on_knowTreeView_clicked(const QModelIndex &))); // connect(knowTreeView, SIGNAL(clicked(const QModelIndex &)), // this, SLOT(on_knowTreeView_clicked(const QModelIndex &))); }
void TreeScreen::setupUI(void) { toolsLine=new QToolBar(this); /* QSize tool_bar_icon_size(16,16); toolsLine->setIconSize(tool_bar_icon_size); */ insertActionAsButton(toolsLine, actionList["insSubbranch"]); insertActionAsButton(toolsLine, actionList["insBranch"]); if(mytetraConfig.getInterfaceMode()=="desktop") { insertActionAsButton(toolsLine, actionList["editBranch"]); insertActionAsButton(toolsLine, actionList["delBranch"]); } toolsLine->addSeparator(); insertActionAsButton(toolsLine, actionList["expandAllSubbranch"]); insertActionAsButton(toolsLine, actionList["collapseAllSubbranch"]); toolsLine->addSeparator(); insertActionAsButton(toolsLine, actionList["moveUpBranch"]); insertActionAsButton(toolsLine, actionList["moveDnBranch"]); if(mytetraConfig.getInterfaceMode()=="mobile") { toolsLine->addSeparator(); insertActionAsButton(toolsLine, actionList["findInBase"]); // Клик по этой кнопке связывается с действием в MainWindow } knowTreeView=new KnowTreeView(this); knowTreeView->setObjectName("knowTreeView"); knowTreeView->setMinimumSize(150,250); knowTreeView->setWordWrap(true); // Временно сделан одинарный режим выбора пунктов // todo: Множественный режим надо выставить тогда, когда // станет ясно, как удалять несколько произвольных веток так, чтобы // в процессе удаления QModelIndex нижестоящих еще не удаленных // веток не менялся // knowTreeView->setSelectionMode(QAbstractItemView::ExtendedSelection); knowTreeView->setSelectionMode(QAbstractItemView::SingleSelection); knowTreeView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); // Нужно установить правила показа контекстного самодельного меню // чтобы оно могло вызываться knowTreeView->setContextMenuPolicy(Qt::CustomContextMenu); // Представление не должно позволять редактировать элементы обычным путем knowTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); }
void FindTableWidget::setupUI(void) { findTableView=new QTableView(this); findTableView->setObjectName("findTableView"); findTableView->setMinimumSize(1,1); findTableView->horizontalHeader()->hide(); // Установка высоты строки с принудительной стилизацией (если это необходимо), // так как стилизация через QSS для элементов QTableView полноценно не работает // У таблицы есть вертикальные заголовки, для каждой строки, в которых отображается номер строки. // При задании высоты вертикального заголовка, высота применяется и для всех ячеек в строке. findTableView->verticalHeader()->setDefaultSectionSize ( findTableView->verticalHeader()->minimumSectionSize () ); int height=mytetraConfig.getUglyQssReplaceHeightForTableView(); if(height!=0) findTableView->verticalHeader()->setDefaultSectionSize( height ); if(mytetraConfig.getInterfaceMode()=="mobile") findTableView->verticalHeader()->setDefaultSectionSize( getCalculateIconSizePx() ); // Устанавливается режим что могут выделяться только строки // а не отдельный item таблицы findTableView->setSelectionBehavior(QAbstractItemView::SelectRows); // Устанавливается режим что редактирование невозможно findTableView->setEditTriggers(QAbstractItemView::NoEditTriggers); // Настройка области виджета для кинетической прокрутки setKineticScrollArea( qobject_cast<QAbstractItemView*>(findTableView) ); }
void RecordTableScreen::setupUI(void) { toolsLine=new QToolBar(this); /* QSize toolBarIconSize(16,16); toolsLine->setIconSize(toolBarIconSize); */ if(mytetraConfig.getInterfaceMode()=="mobile") { insertActionAsButton(toolsLine, actionBack); toolsLine->addSeparator(); } insertActionAsButton(toolsLine, actionAddNewToEnd); if(mytetraConfig.getInterfaceMode()=="desktop") { insertActionAsButton(toolsLine, actionEditField); insertActionAsButton(toolsLine, actionDelete); } toolsLine->addSeparator(); insertActionAsButton(toolsLine, actionCut); insertActionAsButton(toolsLine, actionCopy); insertActionAsButton(toolsLine, actionPaste); toolsLine->addSeparator(); insertActionAsButton(toolsLine, actionMoveUp); insertActionAsButton(toolsLine, actionMoveDn); extraToolsLine=new QToolBar(this); if(mytetraConfig.getInterfaceMode()=="desktop") { insertActionAsButton(extraToolsLine, actionSyncro); insertActionAsButton(extraToolsLine, actionWalkHistoryPrevious); insertActionAsButton(extraToolsLine, actionWalkHistoryNext); } insertActionAsButton(extraToolsLine, actionFindInBase); treePathLabel=new QLabel(this); treePathLabel->setWordWrap(true); if(mytetraConfig.getInterfaceMode()=="desktop") treePathLabel->hide(); }
void RecordTableController::initMetaEditorAtClickToRecord(const int pos) { // Внимание! Наверно, всю эту логику следует перенести в MetaEditor. А здесь только получить данные из таблицы // Выясняется указатель на объект редактирования текста записи MetaEditor *edView=find_object<MetaEditor>("editorScreen"); // Выясняется ссылка на таблицу конечных данных RecordTableData *table=recordSourceModel->getTableData(); // В таблице конечных данных запоминается какая запись была выбрана // чтобы затем при выборе этой же подветки засветка автоматически // установилась на последнюю рабочую запись table->setWorkPos( pos ); // Устанавливается функция обратного вызова для записи данных edView->set_save_callback(table->editorSaveCallback); // Сохраняется текст и картинки в окне редактирования find_object<MainWindow>("mainwindow")->saveTextarea(); // Для новой выбраной записи выясняется директория и основной файл QString currentDir =table->getField("dir", pos); QString currentFile=table->getField("file", pos); QString fullDir=mytetraConfig.get_tetradir()+"/base/"+currentDir; QString fullFileName=fullDir+"/"+currentFile; qDebug() << " File " << fullFileName << "\n"; // Если в окне содержимого записи уже находится выбираемая запись if(edView->get_work_directory()==fullDir && edView->get_file_name()==currentFile) { globalParameters.getWindowSwitcher()->switchFromRecordtableToRecord(); return; } // Перед открытием редактора происходит попытка получения текста записи // Этот вызов создаст файл с текстом записи, если он еще не создан (подумать, переделать) table->getText(pos); // Редактору задаются имя файла и директории // И дается команда загрузки файла edView->set_work_directory(fullDir); edView->set_file_name(currentFile); // Если идет работа с зашифрованной записью // И если имя директории или имя файла пусты, то это означает что // запись не была расшифрована, и редактор должен просто показывать пустой текст // ничего не сохранять и не считывать qDebug() << "RecordTableView::onClickToRecord() : id " << table->getField("id", pos); qDebug() << "RecordTableView::onClickToRecord() : name " << table->getField("name", pos); qDebug() << "RecordTableView::onClickToRecord() : crypt " << table->getField("crypt", pos); if(table->getField("crypt", pos)=="1") if(fullDir.length()==0 || currentFile.length()==0) edView->setDirFileEmptyReaction(MetaEditor::DIRFILEEMPTY_REACTION_SUPPRESS_ERROR); // В редактор заносится информация, идет ли работа с зашифрованным текстом edView->setMiscField("crypt", table->getField("crypt", pos)); // В редакторе устанавливается функция обратного вызова для чтения данных edView->set_load_callback(table->editorLoadCallback); edView->load_textarea(); // edView->set_textarea(table->get_text(index.row())); // Заполняются прочие инфо-поля edView->setName ( table->getField("name", pos) ); edView->setAuthor( table->getField("author", pos) ); edView->setUrl ( table->getField("url", pos) ); edView->setTags ( table->getField("tags", pos) ); QString id=table->getField("id", pos); edView->setMiscField("id", id); edView->setMiscField( "title", table->getField("name", pos) ); // Устанавливается путь до ветки в которой лежит запись (в виде названий веток) QString path=qobject_cast<RecordTableScreen *>(parent())->getTreePath(); // В мобильном интерфейсе редактор должен показывать путь до записи if(mytetraConfig.getInterfaceMode()=="mobile") edView->setTreePath( path ); // В редакторе восстанавливается позиция курсора и прокрутки если это необходимо if(mytetraConfig.getRememberCursorAtOrdinarySelection()) { edView->setCursorPosition( walkHistory.getCursorPosition(id) ); edView->setScrollBarPosition( walkHistory.getScrollBarPosition(id) ); } // Обновление иконки аттачей if( table->getRecord(pos)->getAttachTablePointer()->size()==0 ) edView->toAttach->setIcon( edView->iconAttachNotExists ); // Если нет приаттаченных файлов else edView->toAttach->setIcon( edView->iconAttachExists ); // Есть приаттаченные файлы }