ui: switch to single file mode with snippet maximize
* switch back to snippet view with snippet button in file title bar * use new title bar widget in single view as well * restore view mode on undo, store current view mode for every message id (added id to message) * treat view mode switch as adapt message on undo stack * fixed crash after snippet expansion * fixed hatching in file title not shown
This commit is contained in:
@@ -454,6 +454,7 @@ add_files(
|
||||
utility/messaging/type/MessageZoom.h
|
||||
|
||||
utility/messaging/Message.h
|
||||
utility/messaging/MessageBase.cpp
|
||||
utility/messaging/MessageBase.h
|
||||
utility/messaging/MessageFilter.h
|
||||
utility/messaging/MessageInterruptTasksCounter.cpp
|
||||
|
||||
@@ -61,6 +61,7 @@ void ActivationController::handleMessage(MessageActivateFile* message)
|
||||
MessageChangeFileView msg(
|
||||
message->filePath,
|
||||
MessageChangeFileView::FILE_MAXIMIZED,
|
||||
MessageChangeFileView::VIEW_CURRENT,
|
||||
true,
|
||||
true
|
||||
);
|
||||
|
||||
@@ -31,6 +31,7 @@ void CodeController::handleMessage(MessageActivateAll* message)
|
||||
{
|
||||
TRACE("code all");
|
||||
|
||||
saveOrRestoreViewMode(message);
|
||||
clear();
|
||||
|
||||
Project* currentProject = Application::getInstance()->getCurrentProject().get();
|
||||
@@ -107,6 +108,8 @@ void CodeController::handleMessage(MessageActivateTokens* message)
|
||||
{
|
||||
TRACE("code activate");
|
||||
|
||||
saveOrRestoreViewMode(message);
|
||||
|
||||
CodeView* view = getView();
|
||||
|
||||
CodeView::CodeParams params;
|
||||
@@ -180,6 +183,8 @@ void CodeController::handleMessage(MessageActivateTrailEdge* message)
|
||||
{
|
||||
TRACE("trail edge activate");
|
||||
|
||||
saveOrRestoreViewMode(message);
|
||||
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION);
|
||||
getView()->scrollTo(scrollParams);
|
||||
|
||||
@@ -197,14 +202,6 @@ void CodeController::handleMessage(MessageChangeFileView* message)
|
||||
{
|
||||
TRACE("code change file");
|
||||
|
||||
if (!m_collection)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CodeView* view = getView();
|
||||
bool inListMode = view->isInListMode();
|
||||
|
||||
CodeView::FileState state;
|
||||
switch (message->state)
|
||||
{
|
||||
@@ -219,13 +216,15 @@ void CodeController::handleMessage(MessageChangeFileView* message)
|
||||
case MessageChangeFileView::FILE_MAXIMIZED:
|
||||
state = CodeView::FILE_MAXIMIZED;
|
||||
break;
|
||||
|
||||
case MessageChangeFileView::FILE_DEFAULT_FOR_MODE:
|
||||
state = inListMode ? CodeView::FILE_SNIPPETS : CodeView::FILE_MAXIMIZED;
|
||||
break;
|
||||
}
|
||||
|
||||
if (message->needsData)
|
||||
CodeView* view = getView();
|
||||
if (message->viewMode != MessageChangeFileView::VIEW_CURRENT)
|
||||
{
|
||||
view->setMode(message->viewMode == MessageChangeFileView::VIEW_LIST);
|
||||
}
|
||||
|
||||
if (message->needsData && !message->filePath.empty())
|
||||
{
|
||||
CodeView::CodeParams params;
|
||||
view->showCodeSnippets(getSnippetsForFileWithState(message->filePath, state, !message->showErrors), params);
|
||||
@@ -302,6 +301,8 @@ void CodeController::handleMessage(MessageShowErrors* message)
|
||||
{
|
||||
TRACE("code errors");
|
||||
|
||||
saveOrRestoreViewMode(message);
|
||||
|
||||
CodeView* view = getView();
|
||||
if (!view->showsErrors() || !message->errorId)
|
||||
{
|
||||
@@ -337,6 +338,8 @@ void CodeController::handleMessage(MessageSearchFullText* message)
|
||||
{
|
||||
TRACE("code fulltext");
|
||||
|
||||
saveOrRestoreViewMode(message);
|
||||
|
||||
m_collection = m_storageAccess->getFullTextSearchLocations(message->searchTerm, message->caseSensitive);
|
||||
|
||||
CodeView::ScrollParams scrollParams(CodeView::ScrollParams::SCROLL_TO_DEFINITION);
|
||||
@@ -892,3 +895,19 @@ void CodeController::addActiveSourceLocations(std::shared_ptr<SourceLocationFile
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void CodeController::saveOrRestoreViewMode(MessageBase* message)
|
||||
{
|
||||
if (message->isReplayed())
|
||||
{
|
||||
auto it = m_messageIdToViewModeMap.find(message->getId());
|
||||
if (it != m_messageIdToViewModeMap.end())
|
||||
{
|
||||
getView()->setMode(it->second);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_messageIdToViewModeMap.emplace(message->getId(), getView()->isInListMode());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,8 +100,12 @@ private:
|
||||
void addModificationTimes(std::vector<CodeSnippetParams>& snippets) const;
|
||||
void addActiveSourceLocations(std::shared_ptr<SourceLocationFile> locationFile) const;
|
||||
|
||||
void saveOrRestoreViewMode(MessageBase* message);
|
||||
|
||||
StorageAccess* m_storageAccess;
|
||||
mutable std::shared_ptr<SourceLocationCollection> m_collection;
|
||||
|
||||
std::map<Id, bool> m_messageIdToViewModeMap;
|
||||
};
|
||||
|
||||
#endif // CODE_CONTROLLER_H
|
||||
|
||||
@@ -108,7 +108,8 @@ void UndoRedoController::handleMessage(MessageActivateTrailEdge* message)
|
||||
|
||||
void UndoRedoController::handleMessage(MessageChangeFileView* message)
|
||||
{
|
||||
Command command(std::make_shared<MessageChangeFileView>(*message), Command::ORDER_VIEW);
|
||||
Command command(std::make_shared<MessageChangeFileView>(*message),
|
||||
message->switchesViewMode ? Command::ORDER_ADAPT : Command::ORDER_VIEW);
|
||||
processCommand(command);
|
||||
}
|
||||
|
||||
|
||||
@@ -94,6 +94,8 @@ public:
|
||||
virtual void showContents() = 0;
|
||||
|
||||
virtual bool isInListMode() const = 0;
|
||||
virtual void setMode(bool listMode) = 0;
|
||||
|
||||
virtual bool hasSingleFileCached(const FilePath& filePath) const = 0;
|
||||
|
||||
private:
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#include "utility/messaging/MessageBase.h"
|
||||
|
||||
Id MessageBase::s_nextId = 1;
|
||||
@@ -4,11 +4,14 @@
|
||||
#include <ostream>
|
||||
#include <sstream>
|
||||
|
||||
#include "utility/types.h"
|
||||
|
||||
class MessageBase
|
||||
{
|
||||
public:
|
||||
MessageBase()
|
||||
: m_isParallel(false)
|
||||
: m_id(s_nextId++)
|
||||
, m_isParallel(false)
|
||||
, m_isReplayed(false)
|
||||
, m_sendAsTask(true)
|
||||
, m_keepContent(false)
|
||||
@@ -24,6 +27,11 @@ public:
|
||||
virtual std::string getType() const = 0;
|
||||
virtual void dispatch() = 0;
|
||||
|
||||
Id getId() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
bool sendAsTask() const
|
||||
{
|
||||
return m_sendAsTask;
|
||||
@@ -95,6 +103,10 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
static size_t s_nextId;
|
||||
|
||||
Id m_id;
|
||||
|
||||
bool m_isParallel;
|
||||
bool m_isReplayed;
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#include "utility/messaging/MessageListenerBase.h"
|
||||
|
||||
uint MessageListenerBase::s_nextId = 0;
|
||||
Id MessageListenerBase::s_nextId = 1;
|
||||
|
||||
@@ -26,7 +26,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
uint getId() const
|
||||
Id getId() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
@@ -57,9 +57,9 @@ private:
|
||||
virtual std::string doGetType() const = 0;
|
||||
virtual void doHandleMessageBase(MessageBase*) = 0;
|
||||
|
||||
static uint s_nextId;
|
||||
static Id s_nextId;
|
||||
|
||||
uint m_id;
|
||||
Id m_id;
|
||||
bool m_alive;
|
||||
};
|
||||
|
||||
|
||||
@@ -64,12 +64,12 @@ void MessageQueue::unregisterListener(MessageListenerBase* listener)
|
||||
LOG_ERROR("Listener was not found");
|
||||
}
|
||||
|
||||
MessageListenerBase* MessageQueue::getListenerById(const uint id) const
|
||||
MessageListenerBase* MessageQueue::getListenerById(Id listenerId) const
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_listenersMutex);
|
||||
for (size_t i = 0; i < m_listeners.size(); i++)
|
||||
{
|
||||
if (m_listeners[i]->getId() == id)
|
||||
if (m_listeners[i]->getId() == listenerId)
|
||||
{
|
||||
return m_listeners[i];
|
||||
}
|
||||
@@ -284,7 +284,7 @@ void MessageQueue::sendMessageAsTask(std::shared_ptr<MessageBase> message, bool
|
||||
|
||||
if (listener->getType() == message->getType())
|
||||
{
|
||||
uint listenerId = listener->getId();
|
||||
Id listenerId = listener->getId();
|
||||
taskGroup->addTask(std::make_shared<TaskLambda>(
|
||||
[listenerId, message]()
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@ public:
|
||||
void registerListener(MessageListenerBase* listener);
|
||||
void unregisterListener(MessageListenerBase* listener);
|
||||
|
||||
MessageListenerBase* getListenerById(const uint id) const;
|
||||
MessageListenerBase* getListenerById(Id listenerId) const;
|
||||
|
||||
void addMessageFilter(std::shared_ptr<MessageFilter> filter);
|
||||
|
||||
|
||||
@@ -12,20 +12,30 @@ public:
|
||||
{
|
||||
FILE_MINIMIZED,
|
||||
FILE_SNIPPETS,
|
||||
FILE_MAXIMIZED,
|
||||
FILE_DEFAULT_FOR_MODE
|
||||
FILE_MAXIMIZED
|
||||
};
|
||||
|
||||
enum ViewMode
|
||||
{
|
||||
VIEW_LIST,
|
||||
VIEW_SINGLE,
|
||||
VIEW_CURRENT
|
||||
};
|
||||
|
||||
MessageChangeFileView(
|
||||
const FilePath& filePath,
|
||||
FileState state,
|
||||
ViewMode viewMode,
|
||||
bool needsData,
|
||||
bool showErrors
|
||||
bool showErrors,
|
||||
bool switchesViewMode = false
|
||||
)
|
||||
: filePath(filePath)
|
||||
, state(state)
|
||||
, viewMode(viewMode)
|
||||
, needsData(needsData)
|
||||
, showErrors(showErrors)
|
||||
, switchesViewMode(switchesViewMode)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -41,7 +51,13 @@ public:
|
||||
case FILE_MINIMIZED: os << "minimize"; break;
|
||||
case FILE_SNIPPETS: os << "snippets"; break;
|
||||
case FILE_MAXIMIZED: os << "maximize"; break;
|
||||
case FILE_DEFAULT_FOR_MODE: os << "default"; break;
|
||||
}
|
||||
|
||||
switch (viewMode)
|
||||
{
|
||||
case VIEW_LIST: os << ", list"; break;
|
||||
case VIEW_SINGLE: os << ", single"; break;
|
||||
case VIEW_CURRENT: os << ", current"; break;
|
||||
}
|
||||
|
||||
if (needsData)
|
||||
@@ -50,11 +66,12 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
FilePath filePath;
|
||||
FileState state;
|
||||
|
||||
bool needsData;
|
||||
bool showErrors;
|
||||
const FilePath filePath;
|
||||
const FileState state;
|
||||
const ViewMode viewMode;
|
||||
const bool needsData;
|
||||
const bool showErrors;
|
||||
const bool switchesViewMode;
|
||||
};
|
||||
|
||||
#endif // MESSAGE_CHANGE_FILE_VIEW_H
|
||||
|
||||
Reference in New Issue
Block a user