Procházet zdrojové kódy

Refs #6 Breadcrumb componnent

isundil před 9 měsíci
rodič
revize
a8c201d832
5 změnil soubory, kde provedl 40 přidání a 24 odebrání
  1. 1 1
      QtWidgets
  2. 7 8
      fakeRaid/MainWindow.ui
  3. 1 1
      fakeRaid/main.cpp
  4. 28 13
      fakeRaid/mainWindow.cpp
  5. 3 1
      fakeRaid/mainWindow.h

+ 1 - 1
QtWidgets

@@ -1 +1 @@
-Subproject commit 5bece5e011676dc38cfb2a3cc1e0368edb66cebe
+Subproject commit 9200d932e7d6718049086f87c378ee157c750518

+ 7 - 8
fakeRaid/MainWindow.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>800</width>
-    <height>600</height>
+    <width>482</width>
+    <height>373</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -16,17 +16,17 @@
   <widget class="QWidget" name="centralwidget">
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
-     <widget class="craftlab::ui::Breadcrumb" name="listView_2">
+     <widget class="craftlab::ui::Breadcrumb" name="breadcrumb">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
-      <property name="maximumSize">
+      <property name="baseSize">
        <size>
-        <width>16777215</width>
-        <height>25</height>
+        <width>0</width>
+        <height>36</height>
        </size>
       </property>
      </widget>
@@ -51,7 +51,7 @@
     <rect>
      <x>0</x>
      <y>0</y>
-     <width>800</width>
+     <width>482</width>
      <height>21</height>
     </rect>
    </property>
@@ -63,7 +63,6 @@
    </widget>
    <addaction name="menuFichier"/>
   </widget>
-  <widget class="QStatusBar" name="statusbar"/>
   <action name="actionOuvrir">
    <property name="text">
     <string>Ouvrir</string>

+ 1 - 1
fakeRaid/main.cpp

@@ -7,6 +7,6 @@ using namespace craftlab::fakeraid;
 int main(int ac, char** av)
 {
 	QApplication app(ac, av);
-	ui::MainWindow window;
+	ui::MainWindow window(std::vector<std::string>({ "C:\\Users\\isund\\projects\\fakeRaid\\test\\A", "C:\\Users\\isund\\projects\\fakeRaid\\test\\B" }));
 	return app.exec();
 }

+ 28 - 13
fakeRaid/mainWindow.cpp

@@ -8,7 +8,7 @@
 
 using namespace craftlab::fakeraid::ui;
 
-MainWindow::MainWindow()
+MainWindow::MainWindow(const std::vector<std::string>& dirList)
 	: fileListItemModel(std::make_unique<QStandardItemModel>(this)),
 	ui(std::make_unique<Ui_MainWindow>())
 {
@@ -17,6 +17,7 @@ MainWindow::MainWindow()
 	ui->setupUi(window.get());
 	ui->listView->setModel(fileListItemModel.get());
 	ui->listView->setItemDelegate(new FileItemDelegate(this));
+	ui->breadcrumb->setFixedHeight(36);
 
 	connect(ui->actionOuvrir, &QAction::triggered, this, &MainWindow::MenuBarActionTrigerred);
 	connect(ui->listView, &QListView::doubleClicked, this, [this](const QModelIndex& index)
@@ -30,7 +31,8 @@ MainWindow::MainWindow()
 	});
 	window->show();
 
-	DisplaySourceWindow(false, std::vector<std::string>({ "C:\\Users\\isund\\projects\\fakeRaid\\test\\A", "C:\\Users\\isund\\projects\\fakeRaid\\test\\B" }));
+	if (dirList.empty() || !TryOpenningDir(dirList))
+		DisplaySourceWindow(false, std::vector<std::string>({ "", "" }));
 }
 
 MainWindow::~MainWindow()
@@ -51,6 +53,12 @@ bool MainWindow::PathExists(const IEngine& engine) const
 	return true;
 }
 
+void MainWindow::UpdateBreadcrumb()
+{
+	craftlab::ui::Breadcrumb* breadcrumb = ui->breadcrumb;
+	breadcrumb->clear();
+}
+
 void MainWindow::UpdateFileList()
 {
 	fileListItemModel->clear();
@@ -62,9 +70,8 @@ void MainWindow::UpdateFileList()
 	std::transform(currentDiffResult->missingDirs.begin(), currentDiffResult->missingDirs.end(), std::back_inserter(allFilenames), [](const std::pair<std::string, std::vector<bool>>& i) { return i.first; });
 	std::sort(allFilenames.begin(), allFilenames.end());
 	for (const std::string& file : allFilenames)
-	{
 		fileListItemModel->appendRow(new FileItem(*ui->listView, engine->GetRootPaths(), currentDiffResult->FileList[file], false));
-	}
+	UpdateBreadcrumb();
 }
 
 void MainWindow::ListFiles()
@@ -146,23 +153,31 @@ void MainWindow::OnEngineUpdated()
 	ListFiles();
 }
 
-void MainWindow::DisplaySourceWindow(bool canCancel, const std::vector<std::string>& previous)
+bool MainWindow::TryOpenningDir(const std::vector<std::string>& folders)
 {
-	const std::vector<std::string> folders = BrowseModal::Display(canCancel, previous);
-	if (folders.empty())
-	{
-		if (canCancel)
-			return;
-		return DisplaySourceWindow(canCancel, previous);
-	}
 	IEngine* newEngine = EngineManager::Open(folders);
 	if (!PathExists(*newEngine))
 	{
 		delete newEngine;
-		return DisplaySourceWindow(false, folders);
+		return false;
 	}
 	engine.reset(newEngine);
 	OnEngineUpdated();
+	return true;
+}
+
+void MainWindow::DisplaySourceWindow(bool canCancel, const std::vector<std::string>& previous)
+{
+	const std::vector<std::string> folders = BrowseModal::Display(canCancel, previous);
+
+	if (folders.empty())
+	{
+		if (!canCancel)
+			DisplaySourceWindow(canCancel, previous);
+		return;
+	}
+	if (!TryOpenningDir(folders))
+		DisplaySourceWindow(canCancel, folders);
 }
 void MainWindow::DisplaySourceWindow(bool canCancel)
 {

+ 3 - 1
fakeRaid/mainWindow.h

@@ -19,7 +19,7 @@ namespace craftlab::fakeraid::ui
 	{
 	Q_OBJECT
 	public:
-		MainWindow();
+		MainWindow(const std::vector<std::string>& dirList);
 		~MainWindow();
 
 	public:
@@ -37,6 +37,8 @@ namespace craftlab::fakeraid::ui
 		void FileEdit(const File& f);
 		bool IsFileCorrent(const File& file) const;
 		void UpdateFileList();
+		void UpdateBreadcrumb();
+		bool TryOpenningDir(const std::vector<std::string>& directories);
 
 		std::unique_ptr<QStandardItemModel> fileListItemModel;
 		std::unique_ptr<QMainWindow> window;