Exemplo n.º 1
0
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 &)));

}
Exemplo n.º 2
0
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) );
}
Exemplo n.º 4
0
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 ); // Есть приаттаченные файлы
}