mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-01 10:46:23 -04:00
Merge pull request #2308 from csoler/v0.6-BugFixing_9
V0.6 bug fixing 9
This commit is contained in:
commit
dfa088acac
10 changed files with 87 additions and 52 deletions
|
@ -191,6 +191,7 @@ void HomePage::toggleIncludeAllIPs()
|
|||
|
||||
HomePage::~HomePage()
|
||||
{
|
||||
rsEvents->unregisterEventsHandler(mEventHandlerId);
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
|
|
@ -210,10 +210,10 @@ void IdEditDialog::setAvatar(const QPixmap &avatar)
|
|||
mAvatar = avatar;
|
||||
|
||||
if (!mAvatar.isNull()) {
|
||||
ui->avatarLabel->setPixmap(mAvatar);
|
||||
} else {
|
||||
ui->avatarLabel->setPicture(avatar);
|
||||
} else {
|
||||
// we need to use the default pixmap here, generated from the ID
|
||||
ui->avatarLabel->setPixmap(GxsIdDetails::makeDefaultIcon(RsGxsId(mEditGroup.mMeta.mGroupId)));
|
||||
ui->avatarLabel->setPicture(GxsIdDetails::makeDefaultIcon(RsGxsId(mEditGroup.mMeta.mGroupId)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -551,18 +551,20 @@ void IdEditDialog::createId()
|
|||
params.nickname = groupname.toUtf8().constData();
|
||||
params.isPgpLinked = (ui->radioButton_GpgId->isChecked());
|
||||
|
||||
if (!mAvatar.isNull())
|
||||
{
|
||||
QByteArray ba;
|
||||
QBuffer buffer(&ba);
|
||||
mAvatar = ui->avatarLabel->extractCroppedScaledPicture();
|
||||
|
||||
buffer.open(QIODevice::WriteOnly);
|
||||
mAvatar.save(&buffer, "PNG"); // writes image into ba in PNG format
|
||||
if (!mAvatar.isNull())
|
||||
{
|
||||
QByteArray ba;
|
||||
QBuffer buffer(&ba);
|
||||
|
||||
params.mImage.copy((uint8_t *) ba.data(), ba.size());
|
||||
}
|
||||
else
|
||||
params.mImage.clear();
|
||||
buffer.open(QIODevice::WriteOnly);
|
||||
mAvatar.save(&buffer, "PNG"); // writes image into ba in PNG format
|
||||
|
||||
params.mImage.copy((uint8_t *) ba.data(), ba.size());
|
||||
}
|
||||
else
|
||||
params.mImage.clear();
|
||||
|
||||
RsGxsId keyId;
|
||||
std::string gpg_password;
|
||||
|
@ -639,7 +641,7 @@ void IdEditDialog::updateId()
|
|||
RsGxsId keyId;
|
||||
std::string gpg_password;
|
||||
|
||||
if(!mEditGroup.mPgpId.isNull())
|
||||
if(mEditGroup.mPgpLinked)
|
||||
{
|
||||
std::string gpg_name = rsPeers->getGPGName(rsPeers->getGPGOwnId());
|
||||
bool cancelled;
|
||||
|
|
|
@ -175,7 +175,7 @@ void PostedPostDelegate::expandItem(RsGxsMessageId msgId,bool expanded)
|
|||
else
|
||||
mExpandedItems.erase(msgId);
|
||||
|
||||
mPostListWidget->forceRedraw();
|
||||
mPostListWidget->redraw();
|
||||
}
|
||||
|
||||
uint8_t PostedPostDelegate::displayFlags(const RsGxsMessageId &id) const
|
||||
|
@ -244,7 +244,7 @@ PostedListWidgetWithModel::PostedListWidgetWithModel(const RsGxsGroupId& postedI
|
|||
/* Invoke the Qt Designer generated object setup routine */
|
||||
ui->setupUi(this);
|
||||
|
||||
ui->postsTree->setModel(mPostedPostsModel = new RsPostedPostsModel());
|
||||
ui->postsTree->setModel(mPostedPostsModel = new RsPostedPostsModel(POSTS_CHUNK_SIZE));
|
||||
ui->postsTree->setItemDelegate(mPostedPostsDelegate = new PostedPostDelegate(this));
|
||||
ui->postsTree->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // prevents bug on w10, since row size depends on widget width
|
||||
ui->postsTree->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);// more beautiful if we scroll at pixel level
|
||||
|
@ -351,31 +351,45 @@ void PostedListWidgetWithModel::handlePostsTreeSizeChange(QSize size)
|
|||
mPostedPostsModel->triggerRedraw();
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::updateShowLabel()
|
||||
{
|
||||
if (mPostedPostsModel->rowCount() > 0)
|
||||
whileBlocking(ui->showLabel)->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)
|
||||
+" - "+QString::number(mPostedPostsModel->displayedStartPostIndex()+mPostedPostsModel->rowCount()));
|
||||
else
|
||||
whileBlocking(ui->showLabel)->setText(tr("Empty"));
|
||||
|
||||
ui->nextButton->setEnabled(mPostedPostsModel->displayedStartPostIndex() + POSTS_CHUNK_SIZE < mPostedPostsModel->filteredPostsCount());
|
||||
ui->prevButton->setEnabled(mPostedPostsModel->displayedStartPostIndex() > 0);
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::filterItems(QString text)
|
||||
{
|
||||
QStringList lst = text.split(" ",QString::SkipEmptyParts) ;
|
||||
|
||||
uint32_t count;
|
||||
mPostedPostsModel->setFilter(lst,count) ;
|
||||
|
||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
||||
updateShowLabel();
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::nextPosts()
|
||||
{
|
||||
ui->postsTree->selectionModel()->clear();
|
||||
if(mPostedPostsModel->displayedStartPostIndex() + POSTS_CHUNK_SIZE < mPostedPostsModel->filteredPostsCount())
|
||||
{
|
||||
mPostedPostsModel->setPostsInterval(POSTS_CHUNK_SIZE+mPostedPostsModel->displayedStartPostIndex(),POSTS_CHUNK_SIZE);
|
||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
||||
updateShowLabel();
|
||||
}
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::prevPosts()
|
||||
{
|
||||
if((int)mPostedPostsModel->displayedStartPostIndex() - POSTS_CHUNK_SIZE >= 0)
|
||||
ui->postsTree->selectionModel()->clear();
|
||||
|
||||
if((int)mPostedPostsModel->displayedStartPostIndex() > 0)
|
||||
{
|
||||
mPostedPostsModel->setPostsInterval(mPostedPostsModel->displayedStartPostIndex()-POSTS_CHUNK_SIZE,POSTS_CHUNK_SIZE);
|
||||
ui->showLabel->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
||||
mPostedPostsModel->setPostsInterval((int)mPostedPostsModel->displayedStartPostIndex()-POSTS_CHUNK_SIZE,POSTS_CHUNK_SIZE);
|
||||
updateShowLabel();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -651,7 +665,7 @@ void PostedListWidgetWithModel::postPostLoad()
|
|||
else
|
||||
std::cerr << "No pre-selected channel post." << std::endl;
|
||||
|
||||
whileBlocking(ui->showLabel)->setText(QString::number(mPostedPostsModel->displayedStartPostIndex()+1)+" - "+QString::number(std::min(mPostedPostsModel->filteredPostsCount(),mPostedPostsModel->displayedStartPostIndex()+POSTS_CHUNK_SIZE+1)));
|
||||
updateShowLabel();
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::forceRedraw()
|
||||
|
@ -659,7 +673,11 @@ void PostedListWidgetWithModel::forceRedraw()
|
|||
if(mPostedPostsModel)
|
||||
mPostedPostsModel->deepUpdate();
|
||||
}
|
||||
|
||||
void PostedListWidgetWithModel::redraw()
|
||||
{
|
||||
if(mPostedPostsModel)
|
||||
mPostedPostsModel->triggerRedraw();
|
||||
}
|
||||
void PostedListWidgetWithModel::updateDisplay(bool complete)
|
||||
{
|
||||
#ifdef DEBUG_CHANNEL
|
||||
|
|
|
@ -99,7 +99,8 @@ public:
|
|||
virtual bool navigate(const RsGxsMessageId&) override;
|
||||
|
||||
void updateDisplay(bool complete) ;
|
||||
void forceRedraw(); // does not re-load the data, but makes sure the underlying model triggers a full redraw, recomputes sizes, etc.
|
||||
void forceRedraw(); // does not re-load the data, but makes sure the underlying model triggers a full redraw, recomputes indexes, etc.
|
||||
void redraw(); // does not re-load the data, but makes sure the underlying model triggers a full redraw, recomputes only sizes.
|
||||
|
||||
#ifdef TODO
|
||||
/* FeedHolder */
|
||||
|
@ -149,6 +150,7 @@ private slots:
|
|||
void nextPosts();
|
||||
void prevPosts();
|
||||
void filterItems(QString s);
|
||||
void updateShowLabel();
|
||||
|
||||
public slots:
|
||||
void handlePostsTreeSizeChange(QSize size);
|
||||
|
|
|
@ -42,10 +42,12 @@ const uint32_t RsPostedPostsModel::DEFAULT_DISPLAYED_NB_POSTS = 10;
|
|||
|
||||
std::ostream& operator<<(std::ostream& o, const QModelIndex& i);// defined elsewhere
|
||||
|
||||
RsPostedPostsModel::RsPostedPostsModel(QObject *parent)
|
||||
RsPostedPostsModel::RsPostedPostsModel(int default_chunk_size, QObject *parent)
|
||||
: QAbstractItemModel(parent), mTreeMode(TREE_MODE_PLAIN)
|
||||
{
|
||||
initEmptyHierarchy();
|
||||
mDefaultDisplayedNbPosts = default_chunk_size;
|
||||
|
||||
initEmptyHierarchy();
|
||||
|
||||
mEventHandlerId = 0;
|
||||
mSortingStrategy = SORT_NEW_SCORE;
|
||||
|
@ -132,7 +134,7 @@ void RsPostedPostsModel::initEmptyHierarchy()
|
|||
|
||||
mPosts.clear();
|
||||
mFilteredPosts.clear();
|
||||
mDisplayedNbPosts = DEFAULT_DISPLAYED_NB_POSTS;
|
||||
mDisplayedNbPosts = mDefaultDisplayedNbPosts;
|
||||
mDisplayedStartIndex = 0;
|
||||
|
||||
postMods();
|
||||
|
@ -149,7 +151,8 @@ void RsPostedPostsModel::postMods()
|
|||
}
|
||||
void RsPostedPostsModel::update()
|
||||
{
|
||||
emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mDisplayedNbPosts,0,(void*)NULL));
|
||||
if(mDisplayedNbPosts > 0)
|
||||
emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mDisplayedNbPosts-1,0,(void*)NULL));
|
||||
}
|
||||
void RsPostedPostsModel::triggerRedraw()
|
||||
{
|
||||
|
@ -191,7 +194,7 @@ void RsPostedPostsModel::setFilter(const QStringList& strings, uint32_t& count)
|
|||
count = mFilteredPosts.size();
|
||||
|
||||
mDisplayedStartIndex = 0;
|
||||
mDisplayedNbPosts = std::min(count,DEFAULT_DISPLAYED_NB_POSTS) ;
|
||||
mDisplayedNbPosts = std::min(count,mDefaultDisplayedNbPosts) ;
|
||||
|
||||
std::cerr << "After filtering: " << count << " posts remain." << std::endl;
|
||||
|
||||
|
@ -491,19 +494,28 @@ void RsPostedPostsModel::setPostsInterval(int start,int nb_posts)
|
|||
{
|
||||
if(start >= (int)mFilteredPosts.size())
|
||||
return;
|
||||
if(start < 0)
|
||||
start = 0;
|
||||
|
||||
preMods();
|
||||
|
||||
uint32_t old_nb_rows = rowCount() ;
|
||||
int old_nb_rows = rowCount() ;
|
||||
int new_nb_rows = (uint32_t)std::min(nb_posts,(int)mFilteredPosts.size() - start);
|
||||
|
||||
mDisplayedNbPosts = (uint32_t)std::min(nb_posts,(int)mFilteredPosts.size() - (start+1));
|
||||
mDisplayedStartIndex = start;
|
||||
if(old_nb_rows > new_nb_rows)
|
||||
{
|
||||
beginRemoveRows(QModelIndex(),new_nb_rows,old_nb_rows-1);
|
||||
endRemoveRows();
|
||||
}
|
||||
|
||||
beginRemoveRows(QModelIndex(),mDisplayedNbPosts,old_nb_rows);
|
||||
endRemoveRows();
|
||||
mDisplayedStartIndex = start;
|
||||
mDisplayedNbPosts = new_nb_rows;
|
||||
|
||||
beginInsertRows(QModelIndex(),old_nb_rows,mDisplayedNbPosts);
|
||||
endInsertRows();
|
||||
if(new_nb_rows > old_nb_rows)
|
||||
{
|
||||
beginInsertRows(QModelIndex(),old_nb_rows,new_nb_rows-1);
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
postMods();
|
||||
}
|
||||
|
@ -532,7 +544,7 @@ void RsPostedPostsModel::setPosts(const RsPostedGroup& group, std::vector<RsPost
|
|||
uint32_t tmpval;
|
||||
setFilter(QStringList(),tmpval);
|
||||
|
||||
mDisplayedNbPosts = std::min((uint32_t)mFilteredPosts.size(),DEFAULT_DISPLAYED_NB_POSTS);
|
||||
mDisplayedNbPosts = std::min((uint32_t)mFilteredPosts.size(),mDefaultDisplayedNbPosts);
|
||||
mDisplayedStartIndex = 0;
|
||||
|
||||
if (rowCount()>0)
|
||||
|
|
|
@ -92,7 +92,7 @@ class RsPostedPostsModel : public QAbstractItemModel
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RsPostedPostsModel(QObject *parent = NULL);
|
||||
explicit RsPostedPostsModel(int default_chunk_size,QObject *parent = NULL);
|
||||
virtual ~RsPostedPostsModel() override;
|
||||
|
||||
static const uint32_t COLUMN_THREAD_NB_COLUMNS = 0x01;
|
||||
|
@ -159,6 +159,7 @@ public:
|
|||
void setFilter(const QStringList &strings, uint32_t &count) ;
|
||||
void setSortingStrategy(SortingStrategy s);
|
||||
void setPostsInterval(int start,int nb_posts);
|
||||
void setPostsDefaultInterval(int size);
|
||||
|
||||
#ifdef TODO
|
||||
void setAuthorOpinion(const QModelIndex& indx,RsOpinion op);
|
||||
|
@ -246,6 +247,7 @@ private:
|
|||
std::vector<int> mFilteredPosts;
|
||||
uint32_t mDisplayedStartIndex;
|
||||
uint32_t mDisplayedNbPosts;
|
||||
uint32_t mDefaultDisplayedNbPosts;
|
||||
SortingStrategy mSortingStrategy;
|
||||
|
||||
RsEventsHandlerId_t mEventHandlerId ;
|
||||
|
|
|
@ -42,7 +42,7 @@ void RSTreeView::mouseMoveEvent(QMouseEvent *e)
|
|||
{
|
||||
QModelIndex idx = indexAt(e->pos());
|
||||
|
||||
if(idx != selectionModel()->currentIndex())
|
||||
if(idx.isValid() && idx != selectionModel()->currentIndex())
|
||||
selectionModel()->setCurrentIndex(idx,QItemSelectionModel::ClearAndSelect);
|
||||
|
||||
QTreeView::mouseMoveEvent(e);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue